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 检查配置是否更新
- 2.1 多配置更新法
- 3 挂载方式探讨
- 0 configmap前置说明
- configmap用来管理明文配置
-
0.1.2 怎么使用configmap
创建configmap资源
- 在deploy中定义congfigmap类型的volumes
-
0.1.3 更新configmap配置的方法
单配置更新法:
修改configmap资源清单并应用
- 重启使用该configmap资源的pod
多配置更换法:
- 准备多个configmap资源
- 修改dp中使用的configmap
- 重新apply该dp,pod会自动重启
1 configmap使用准备
使用configmap前,需要先做如下准备工作1.1 清理资源
先将前面部署的3个dubbo服务的POD个数全部调整(scale)为0个,避免在应用configmap过程中可能的报错,也为了节省资源
直接在dashboard上操作即可,1.2 拆分zk集群
将3个zk组成的集群,拆分成独立的zk单机服务,分别表示测试环境和开发环境(节约资源)
| IP地址 | ZK地址 | 角色 |
|---|---|---|
| 10.4.7.11 | zk1.zq.com | test测试环境 |
| 10.4.7.12 | zk2.zq.com | pro生产环境 |
停止3个zk服务
sh /opt/zookeeper/bin/zkServer.sh stoprm -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 startsh /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: v1kind: ConfigMapmetadata:name: dubbo-monitor-cmnamespace: infradata:dubbo.properties: |dubbo.container=log4j,spring,registry,jettydubbo.application.name=simple-monitordubbo.application.owner=zqkjdubbo.registry.address=zookeeper://zk1.zq.com:2181dubbo.protocol.port=20880dubbo.jetty.port=8080dubbo.jetty.directory=/dubbo-monitor-simple/monitordubbo.charts.directory=/dubbo-monitor-simple/chartsdubbo.statistics.directory=/dubbo-monitor-simple/statisticsdubbo.log4j.file=/dubbo-monitor-simple/logs/dubbo-monitor.logdubbo.log4j.level=WARNEOF
其实就是把dubbo-monitor配置文件中的内容用configmap语法展示出来了 当然最前面加上了相应的元数据信息
如果转换不来格式,也可以使用命令行工具直接将配置文件转换为configmap
kubectl create configmap <map-name> <data-source># <map-name> 是希望创建的ConfigMap的名称,<data-source>是一个目录、文件和具体值。
案例如下:
# 1.通过单个文件创建ConfigMapkubectl create configmap game-config-1 --from-file=/xxx/xxx.properties# 2.通过多个文件创建ConfigMapkubectl create configmap game-config-2 \--from-file=/xxx/xxx.properties \--from-file=/xxx/www.properties# 3.通过在一个目录下的多个文件创建ConfigMapkubectl create configmap game-config-3 --from-file=/xxx/www/
1.3.2 修改deploy清单内容
为了和原来的dp.yaml对比,我们新建一个dp-cm.yaml
cat >dp-cm.yaml <<'EOF'kind: DeploymentapiVersion: extensions/v1beta1metadata:name: dubbo-monitornamespace: infralabels:name: dubbo-monitorspec:replicas: 1selector:matchLabels:name: dubbo-monitortemplate:metadata:labels:app: dubbo-monitorname: dubbo-monitorspec:containers:- name: dubbo-monitorimage: harbor.zq.com/infra/dubbo-monitor:latestports:- containerPort: 8080protocol: TCP- containerPort: 20880protocol: TCPimagePullPolicy: IfNotPresent#----------------start---------------------------volumeMounts:- name: configmap-volumemountPath: /dubbo-monitor-simple/confvolumes:- name: configmap-volumeconfigMap:name: dubbo-monitor-cm#----------------end-----------------------------imagePullSecrets:- name: harborrestartPolicy: AlwaysterminationGracePeriodSeconds: 30securityContext:runAsUser: 0schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1maxSurge: 1revisionHistoryLimit: 7progressDeadlineSeconds: 600EOF
注释中的内容就是新增在原
dp.yaml中增加的内容,解释如下:
- 申明一个卷,卷名为
configmap-volume- 指定这个卷使用名为
dubbo-monitor-cm的configMap- 在
containers中挂载卷,卷名与申明的卷相同- 用
mountPath的方式挂载到指定目录
1.4 创建资源并检查
1.4.1 应用资源配置清单
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm.yamlkubectl 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.propertiesdubbo.container=log4j,spring,registry,jettydubbo.application.name=simple-monitordubbo.application.owner=zqkjdubbo.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-prosed -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 更新资源
# 应用新configmapkubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm-pro.yaml# 更新deploykubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml
2.1.4 检查配置是否更新
新的pod已经起来了
~]# kubectl -n infra get podNAME READY STATUS RESTARTS AGEdubbo-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 zookdubbo.registry.address=zookeeper://zk2.zq.com:2181
3 挂载方式探讨
3.1 monutPath挂载的问题
我们使用的是mountPath,这个是挂载整个目录,会使容器内的被挂载目录中原有的文件不可见,可以看见我们。
查看我们pod容器启动的命令可以看见原来脚本中的命令已经无法对挂载的目录操作了
如何单独挂载一个配置文件:
只挂载单独一个文件而不是整个目录,需要添加subPath方法
3.2 单独挂载文件演示
3.2.1 更新配置
在dp-cm.yaml的配置中,将原来的volume配置做一下更改
#----------------start---------------------------volumeMounts:- name: configmap-volumemountPath: /dubbo-monitor-simple/confvolumes:- name: configmap-volumeconfigMap:name: dubbo-monitor-cm#----------------end-----------------------------# 调整为#----------------start---------------------------volumeMounts:- name: configmap-volumemountPath: /dubbo-monitor-simple/conf- name: configmap-volumemountPath: /var/dubbo.propertiessubPath: dubbo.propertiesvolumes:- name: configmap-volumeconfigMap:name: dubbo-monitor-cm#----------------end-----------------------------
3.2.2 应用apply配置并验证
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yamlkubectl -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash# 容器内操作bash-4.3# ls -l /var/total 4drwxr-xr-x 1 root root 29 Apr 13 2016 cache-rw-r--r-- 1 root root 459 May 10 10:02 dubbo.propertiesdrwxr-xr-x 2 root root 6 Apr 1 2016 empty.....
