kubernetes實戰-配置中心(一)configmap資源


在我們的環境中測試使用configmap資源,需要先對我們的環境進行一些准備,首先將dubbo服務調整為0個pod ,然后把zookeeper進行拆分:

 

 

 

 拆分zk環境,模擬測試環境跟生產環境:

 

 

 

停止zookeeper:

# sh /opt/zookeeper/bin/zkServer.sh stop
# rm -rf /data/zookeeper/data/*
# rm -rf /data/zookeeper/logs/*
# vi /opt/zookeeper/conf/zoo.cfg

注釋掉集群配置:

 啟動zookeeper:

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

 

 

 創建資源配置清單:

1、cm.yaml  紅色部分是配置文件的name,下面的是內容。

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=OldboyEdu
    dubbo.registry.address=zookeeper://zk1.od.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

2、dp-cm.yaml

在dp里面如何使用configmap資源:

首先聲明一個卷,卷的名字叫configmap-volume,然后指定這個卷使用的configmap

然后定義這個卷的掛載,掛載到哪里。

# vi dp-cm.yaml
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.od.com/infra/dubbo-monitor:latest
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        imagePullPolicy: IfNotPresent
        volumeMounts: - name: configmap-volume mountPath: /dubbo-monitor-simple/conf
      volumes: - name: configmap-volume configMap: name: dubbo-monitor-cm
      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

應用資源配置清單:

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

去dashboard查看configmap資源:

 

 

 

我們可以創建多個configmap資源,然后在dp中去掛載應用這些configmap資源,達到修改配置的功能。

 

我們檢查一下我們的容器:

# kubectl get pod -n infra

已經起來了

 

 

 我們檢查一下我們掛載的配置是不是我們定義的configmap資源中的配置:

# kubectl exec -it dubbo-monitor-6676dd74cc-pvf2f -n infra /bin/bash

我們把配置文件掛載到了/dubbo-monitor-simple/conf 這里,我們去看一下。(上面的dp-cm.yaml中聲明的)

# cat /dubbo-monitor-simple/conf/dubbo.properties

 

 

 跟我們定義的一模一樣。

這里如果想更換配置,有兩種方法:

  一、修改configmap 資源,然后apply一下更新資源,然后重啟掛載這個configmap資源的dp。

  二、准備多個configmap資源,然后在dp中更改掛載的configmap,apply以后,dp自動重啟。

 

檢查dubbo-monitor頁面的注冊信息:

 

 

 

 

 

連接的zk1.od.com,下面我們模擬更換configmap資源,來切換環境:

這里使用第二種方法,准備多個configmap,我們在准備一個configmap,就叫cm-pro.yaml:

# cp cm.yaml cm-pro.yaml
# vi cm-pro.yaml

然后我們把服務注冊到zk2.od.com上:

把資源名字改成dubbo-monitor-cm-pro

 

 

 把服務注冊到zk2上:

 

 

 應用一下cm-pro.yaml:

# kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/cm-pro.yaml

 

 

 

 

 

 然后我們修改dp-cm.yaml:

 

 

 然后apply這個dp-cm.yaml:

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

新的已經起來了,我們進去看看是不是應用的新的configmap配置:

 

 

 

# kubectl exec -it dubbo-monitor-5cb756cc6c-xtnrt -n infra /bin/bash
# cat /dubbo-monitor-simple/conf/dubbo.properties 

 

 

 已經生效了。

更新configmap資源來更改配置需要更新(刪除/apply/update)pod,否則無效。

看下dubbo-monitor的頁面:已經是zk2了。

 

 

 

但是注意,我們這里使用的是mountPath,這個是掛載整個目錄,會使容器內的被掛載目錄中原有的文件不可見,可以看見我們原來腳本中的命令已經無法對掛載的目錄操作了。

查看我們pod容器啟動的命令可以看見:如果想單獨掛載一個配置配件,而不是整個目錄,如何操作:

 

這里我使用之前的nginx:curl來做如何掛載單個的文件:

查看資源key的使用方法:

# kubectl explain pod.spec.containers.volumeMounts

這里有個掛載方法是:subPath,使用這個方法,可以掛載指定的文件,要結合mountPath來使用:

 

 

查看我們原來實驗做的nginx:curl這個容器:在default命名空間里。

我們實驗的需求,把dubbo.properties這個配置文件掛載到/usr/lib/目錄下,並且保證原來容器內/usr/lib/目錄下的文件都還在:

# kubectl get pod

 

 進入容器查看容器內/usr/lib/下有哪些文件:

 

在default命名空間下創建configmap資源:

 

 應用configmap資源配置清單:

# kubectl apply -f http://k8s-yaml.od.com/nginx-ds/cm.yaml

然后修改這個容器的資源配置清單:

# kubectl edit ds nginx-ds -n default

掛載configmap資源:一定要注意格式跟縮進~~~~

 

 然后重啟pod

登錄進容器中,查看:

 

 

 經過對比,我們原來/usr/lib/下的文件還在,並且新增了一個配置文件dubbo-properties這個配置文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM