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

  3. 创建configmap资源

  4. 在deploy中定义congfigmap类型的volumes
  5. 在deoloy的containers中挂载此volumes

    0.1.3 更新configmap配置的方法

    单配置更新法:

  6. 修改configmap资源清单并应用

  7. 重启使用该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单机服务,分别表示测试环境和开发环境(节约资源)
IP地址 ZK地址 角色
10.4.7.11 zk1.zq.com test测试环境
10.4.7.12 zk2.zq.com pro生产环境

停止3个zk服务

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

注释掉集群配置

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

启动zk单机

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

1.3 创建dubbo-monitor资源清单

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

  1. cd /data/k8s-yaml/dubbo-monitor

1.3.1 创建comfigmap清单

  1. cat >cm.yaml <<'EOF'
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: dubbo-monitor-cm
  6. namespace: infra
  7. data:
  8. dubbo.properties: |
  9. dubbo.container=log4j,spring,registry,jetty
  10. dubbo.application.name=simple-monitor
  11. dubbo.application.owner=zqkj
  12. dubbo.registry.address=zookeeper://zk1.zq.com:2181
  13. dubbo.protocol.port=20880
  14. dubbo.jetty.port=8080
  15. dubbo.jetty.directory=/dubbo-monitor-simple/monitor
  16. dubbo.charts.directory=/dubbo-monitor-simple/charts
  17. dubbo.statistics.directory=/dubbo-monitor-simple/statistics
  18. dubbo.log4j.file=/dubbo-monitor-simple/logs/dubbo-monitor.log
  19. dubbo.log4j.level=WARN
  20. EOF

其实就是把dubbo-monitor配置文件中的内容用configmap语法展示出来了 当然最前面加上了相应的元数据信息

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

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

案例如下:

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

1.3.2 修改deploy清单内容

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

  1. cat >dp-cm.yaml <<'EOF'
  2. kind: Deployment
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: dubbo-monitor
  6. namespace: infra
  7. labels:
  8. name: dubbo-monitor
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. name: dubbo-monitor
  14. template:
  15. metadata:
  16. labels:
  17. app: dubbo-monitor
  18. name: dubbo-monitor
  19. spec:
  20. containers:
  21. - name: dubbo-monitor
  22. image: harbor.zq.com/infra/dubbo-monitor:latest
  23. ports:
  24. - containerPort: 8080
  25. protocol: TCP
  26. - containerPort: 20880
  27. protocol: TCP
  28. imagePullPolicy: IfNotPresent
  29. #----------------start---------------------------
  30. volumeMounts:
  31. - name: configmap-volume
  32. mountPath: /dubbo-monitor-simple/conf
  33. volumes:
  34. - name: configmap-volume
  35. configMap:
  36. name: dubbo-monitor-cm
  37. #----------------end-----------------------------
  38. imagePullSecrets:
  39. - name: harbor
  40. restartPolicy: Always
  41. terminationGracePeriodSeconds: 30
  42. securityContext:
  43. runAsUser: 0
  44. schedulerName: default-scheduler
  45. strategy:
  46. type: RollingUpdate
  47. rollingUpdate:
  48. maxUnavailable: 1
  49. maxSurge: 1
  50. revisionHistoryLimit: 7
  51. progressDeadlineSeconds: 600
  52. EOF

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

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

1.4 创建资源并检查

1.4.1 应用资源配置清单

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

1.4.2 dashboard检查创建结果

在dashboard中查看infra名称空间中的configmap资源
K8S(10)配置中心实战-configmap资源 - 图1
然后检查容器中的配置

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

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

K8S(10)配置中心实战-configmap资源 - 图2

2 更新configmap资源

2.1 多配置更新法

2.1.1 准备新configmap

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

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

2.1.2 修改deploy配置

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

2.1.3 更新资源

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

2.1.4 检查配置是否更新

新的pod已经起来了

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

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

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

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

3 挂载方式探讨

3.1 monutPath挂载的问题

我们使用的是mountPath,这个是挂载整个目录,会使容器内的被挂载目录中原有的文件不可见,可以看见我们。
查看我们pod容器启动的命令可以看见原来脚本中的命令已经无法对挂载的目录操作了
K8S(10)配置中心实战-configmap资源 - 图3
如何单独挂载一个配置文件:
只挂载单独一个文件而不是整个目录,需要添加subPath方法

3.2 单独挂载文件演示

3.2.1 更新配置

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

  1. #----------------start---------------------------
  2. volumeMounts:
  3. - name: configmap-volume
  4. mountPath: /dubbo-monitor-simple/conf
  5. volumes:
  6. - name: configmap-volume
  7. configMap:
  8. name: dubbo-monitor-cm
  9. #----------------end-----------------------------
  10. # 调整为
  11. #----------------start---------------------------
  12. volumeMounts:
  13. - name: configmap-volume
  14. mountPath: /dubbo-monitor-simple/conf
  15. - name: configmap-volume
  16. mountPath: /var/dubbo.properties
  17. subPath: dubbo.properties
  18. volumes:
  19. - name: configmap-volume
  20. configMap:
  21. name: dubbo-monitor-cm
  22. #----------------end-----------------------------

3.2.2 应用apply配置并验证

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

转载自:https://www.cnblogs.com/noah-luo/p/13345379.html