k8s容器云架构之dubbo微服务—K8S(10)配置中心实战-configmap资源

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264k8s配置中心实战-configmap资源

k8s配置中心实战-configmap资源

目录

  • k8s配置中心实战-configmap资源
  • 0 configmap前置说明
  • 0.1.1 configmap和secret
  • 0.1.2 怎么使用configmap
  • 0.1.3 更新configmap配置的方法
  • 1 configmap使用准备
  • 1.1 清理资源
  • 1.2 拆分zk集群
  • 1.3 创建dubbo-monitor资源清单
  • 1.3.1 创建comfigmap清单
  • 1.3.2 修改deploy清单内容
  • 1.4 创建资源并检查
  • 1.4.1 应用资源配置清单
  • 1.4.2 dashboard检查创建结果
  • 1.4.3 检查dubbo-monitor页面的注册信息
  • 2 更新configmap资源
  • 2.1 多配置更新法
  • 2.1.1 准备新configmap
  • 2.1.2 修改deploy配置
  • 2.1.3 更新资源
  • 2.1.4 检查配置是否更新
  • 3 挂载方式探讨
  • 3.1 monutPath挂载的问题
  • 3.2 单独挂载文件演示
  • 3.2.1 更新配置
  • 3.2.2 应用apply配置并验证

0 configmap前置说明

0.1.1 configmap和secret

在K8S中,有两种方式管理资源的配置,分别是configmap和secret,他们的最大区别是:

  1. configmap用来管理明文配置
  2. secret用来管理密文配置

0.1.2 怎么使用configmap

  1. 创建configmap资源
  2. 在deploy中定义congfigmap类型的volumes
  3. 在deoloy的containers中挂载此volumes

0.1.3 更新configmap配置的方法

单配置更新法:

  1. 修改configmap资源清单并应用
  2. 重启使用该configmap资源的pod

多配置更换法:

  1. 准备多个configmap资源
  2. 修改dp中使用的configmap
  3. 重新apply该dp,pod会自动重启

1 configmap使用准备

使用configmap前,需要先做如下准备工作

1.1 清理资源

先将前面部署的3个dubbo服务的POD个数全部调整(scale)为0个,避免在应用configmap过程中可能的报错,也为了节省资源

直接在dashboard上操作即可,

1.2 拆分zk集群

将3个zk组成的集群,拆分成独立的zk单机服务,分别表示测试环境和开发环境(节约资源)

image.png

停止3个zk服务

sh /opt/zookeeper/bin/zkServer.sh stop
rm -rf /data/zookeeper/data/*
rm -rf /data/zookeeper/logs/*

注释掉集群配置

sed -i 's@^server@#server@g' /opt/zookeeper/conf/zoo.cfg

启动zk单机

sh /opt/zookeeper/bin/zkServer.sh start
sh /opt/zookeeper/bin/zkServer.sh status

1.3 创建dubbo-monitor资源清单

老规矩,资源清单在7.200运维机上统一操作

cd /data/k8s-yaml/dubbo-monitor

1.3.1 创建comfigmap清单

cat >cm.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
  name: dubbo-monitor-cm
  namespace: infra
data:
  dubbo.properties: |
    dubbo.container=log4j,spring,registry,jetty
    dubbo.application.name=simple-monitor
    dubbo.application.owner=zqkj
    dubbo.registry.address=zookeeper://zk1.zq.com:2181
    dubbo.protocol.port=20880
    dubbo.jetty.port=8080
    dubbo.jetty.directory=/dubbo-monitor-simple/monitor
    dubbo.charts.directory=/dubbo-monitor-simple/charts
    dubbo.statistics.directory=/dubbo-monitor-simple/statistics
    dubbo.log4j.file=/dubbo-monitor-simple/logs/dubbo-monitor.log
    dubbo.log4j.level=WARN
EOF

其实就是把dubbo-monitor配置文件中的内容用configmap语法展示出来了

当然最前面加上了相应的元数据信息

如果转换不来格式,也可以使用命令行工具直接将配置文件转换为configmap

kubectl create configmap <map-name> <data-source>
# <map-name> 是希望创建的ConfigMap的名称,<data-source>是一个目录、文件和具体值。

案例如下:

# 1.通过单个文件创建ConfigMap
kubectl create configmap game-config-1 --from-file=/xxx/xxx.properties
# 2.通过多个文件创建ConfigMap
kubectl create configmap game-config-2 \
    --from-file=/xxx/xxx.properties \
    --from-file=/xxx/www.properties
# 3.通过在一个目录下的多个文件创建ConfigMap
kubectl create configmap game-config-3 --from-file=/xxx/www/

1.3.2 修改deploy清单内容

为了和原来的dp.yaml对比,我们新建一个dp-cm.yaml

cat >dp-cm.yaml <<'EOF'
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-monitor
  namespace: infra
  labels: 
    name: dubbo-monitor
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: dubbo-monitor
  template:
    metadata:
      labels: 
        app: dubbo-monitor
        name: dubbo-monitor
    spec:
      containers:
      - name: dubbo-monitor
        image: harbor.zq.com/infra/dubbo-monitor:latest
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        imagePullPolicy: IfNotPresent
#----------------start---------------------------
        volumeMounts:
          - name: configmap-volume
            mountPath: /dubbo-monitor-simple/conf
      volumes:
        - name: configmap-volume
          configMap:
            name: dubbo-monitor-cm
#----------------end-----------------------------
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

注释中的内容就是新增在原dp.yaml中增加的内容,解释如下:

  1. 申明一个卷,卷名为configmap-volume
  2. 指定这个卷使用名为dubbo-monitor-cm的configMap
  3. containers中挂载卷,卷名与申明的卷相同
  4. mountPath的方式挂载到指定目录

1.4 创建资源并检查

1.4.1 应用资源配置清单

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml

1.4.2 dashboard检查创建结果

在dashboard中查看infra名称空间中的configmap资源

然后检查容器中的配置

kubectl -n infra exec -it dubbo-monitor-5b7cdddbc5-xpft6 bash
# 容器内
bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties 
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=zqkj
dubbo.registry.address=zookeeper://zk1.zq.com:2181
....

1.4.3 检查dubbo-monitor页面的注册信息

2 更新configmap资源

2.1 多配置更新法

2.1.1 准备新configmap

再准备一个configmap叫cm-pro.yaml

cp cm.yaml cm-pro.yaml
# 把资源名字改成dubbo-monitor-cm-pro
sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' cm-pro.yaml
# 把服务注册到zk2.zq.com上
sed -i 's#zk1#zk2#g' cm-pro.yaml

2.1.2 修改deploy配置

sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' dp-cm.yaml

2.1.3 更新资源

# 应用新configmap
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm-pro.yaml
# 更新deploy
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml

2.1.4 检查配置是否更新

新的pod已经起来了

~]# kubectl -n infra get pod
NAME                            READY   STATUS    RESTARTS   AGE
dubbo-monitor-c7fbf68b9-7nffj   1/1     Running   0          52s

进去看看是不是应用的新的configmap配置:

kubectl  -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash
# 容器内
bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties |grep zook
dubbo.registry.address=zookeeper://zk2.zq.com:2181

看下dubbo-monitor的页面:已经是zk2了。

3 挂载方式探讨

3.1 monutPath挂载的问题

我们使用的是mountPath,这个是挂载整个目录,会使容器内的被挂载目录中原有的文件不可见,可以看见我们。

查看我们pod容器启动的命令可以看见原来脚本中的命令已经无法对挂载的目录操作了

如何单独挂载一个配置文件:

只挂载单独一个文件而不是整个目录,需要添加subPath方法

3.2 单独挂载文件演示

3.2.1 更新配置

dp-cm.yaml的配置中,将原来的volume配置做一下更改

#----------------start---------------------------
        volumeMounts:
          - name: configmap-volume
            mountPath: /dubbo-monitor-simple/conf
      volumes:
        - name: configmap-volume
          configMap:
            name: dubbo-monitor-cm
#----------------end-----------------------------
# 调整为
#----------------start---------------------------
        volumeMounts:
          - name: configmap-volume
            mountPath: /dubbo-monitor-simple/conf
          - name: configmap-volume
            mountPath: /var/dubbo.properties
            subPath: dubbo.properties
      volumes:
        - name: configmap-volume
          configMap:
            name: dubbo-monitor-cm
#----------------end-----------------------------

3.2.2 应用apply配置并验证

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml
kubectl  -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash
# 容器内操作
bash-4.3# ls -l /var/
total 4
drwxr-xr-x    1 root     root      29 Apr 13  2016 cache
-rw-r--r--    1 root     root     459 May 10 10:02 dubbo.properties
drwxr-xr-x    2 root     root       6 Apr  1  2016 empty
.....


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 监控 供应链
微服务拆分的 “坑”:实战复盘与避坑指南
本文回顾了从2~3人初创团队到百人技术团队的成长历程,重点讨论了从传统JSP到前后端分离+SpringCloud微服务架构的演变。通过实际案例,总结了微服务拆分过程中常见的两个问题:服务拆分边界不清晰和拆分粒度过细,并提出了优化方案,将11个微服务优化为6个,提高了系统的可维护性和扩展性。
66 0
|
3月前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
112 2
|
3月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
120 4
|
4月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
103 2
|
4月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
5月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
184 3
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
131 15
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
160 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈

相关产品

  • 容器服务Kubernetes版