Google Code Prettify

2020年4月16日 星期四

K8s: ConfigMap

前一篇「K8s: 設定環境變數」是利用 create ReplicaSet 時,由 yaml 檔傳入環境變數,萬一我們的系統有許多個 ReplicaSet 要創建,每個 yaml 都要寫相同的設定,這樣就等於是 hard code 在 yaml 裡,維護相當不容易。

Kubernetes 提供了 ConfigMap 的功能,讓環境變數引用 ConfigMap 裡的值,達到集中管理的目的。怎麼建立 ConfigMap 有許多種方法,這裡舉兩個如下:
kubectl create configmap practicecnfmap --from-literal=jasypt_encryptor_password=secondKey --from-literal=spring_profiles_active=uat
這是最直覺的方式,透過命令建立一個名為 practicecnfmap 的 ConfigMap,裡面有兩個設定 jasypt_encryptor_password 及 spring_profiles_active,它們的值在這裡故意和前一篇不同,這樣才能觀察是否 ConfigMap 有產生作用。萬一 ConfigMap 裡要設定很多參數怎麼辦? 不可能在命令列這樣的輸入,可以選擇先把這些參數以 key=value 的方式存在一個目錄,檔名是 key, 內容是 value,我建立了一個 conf 的目錄,裡面有兩個檔案如下:
檔案裡是值,接著輸入如下指令, 這樣得到的結果和上面的指令是一樣的。
kubectl create configmap practicecnfmap --from-file=./conf
接著要修改 ReplicaSet 的 yaml 檔,如下:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: practice-rs
spec:
  replicas: 2
  selector:
    matchLabels:
      app: practice-rs
  template:
    metadata:
      labels:
        app: practice-rs
    spec:
      containers:
      - name: practice-pod
        image: harbor.steven.idv.tw/steven/practice-pod
        envFrom:
        - configMapRef:
            name: practicecnfmap
      imagePullSecrets:
      - name: steven-harbor
第 18~20 行指出,環境變數由 practicecnfmap 這個 ConfigMap 取得。建立 ConfigMap 後,如果想要修改內容,不需刪除後重新建立,可以用以下指令編輯。
kubectl edit configmap practicecnfmap

沒有留言:

張貼留言