1. 程式人生 > 其它 >k8s配置儲存(ConfigMap、Secret)

k8s配置儲存(ConfigMap、Secret)

配置儲存

ConfigMap

ConfigMap是一種比較特殊的儲存卷,它的主要作用是用來儲存配置資訊的。

建立configmap.yaml,內容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
  namespace: dev
data:
  info: |                  #這個|表示下面的引數資訊都是info的
    username:admin
    password:123456

接下來,使用此配置檔案建立configmap

# 建立configmap
[root@master ~]# kubectl create -f configmap.yaml

# 檢視configmap詳情
[root@master 
~]# kubectl describe cm configmap -n dev

接下來建立一個pod-configmap.yaml,將上面建立的configmap掛載進去

apiVersion: v1
kind: Pod
metadata:
  name: pod-configmap
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    volumeMounts: # 將configmap掛載到目錄
    - name: config
      mountPath: /configmap/config
  volumes: # 引用configmap
  
- name: config configMap: name: configmap #名字要和上面的相同

建立並檢視

# 建立pod
[root@master ~]# kubectl create -f pod-configmap.yaml

# 檢視pod
[root@master ~]# kubectl get pod pod-configmap -n dev

#進入容器
[root@master ~]# kubectl exec -it pod-configmap -n dev -- bash
root@pod-configmap:/# ls /configmap/config
root@pod
-configmap:/# cat /configmap/config/info
# 可以看到對映已經成功,每個configmap都對映成了一個目錄
# key--->檔案      value---->檔案中的內容
# 此時如果更新configmap的內容, 容器中的值也會動態更新
測試動態更新
#修改密碼為666666
[root@master ~]# kubectl edit cm configmap -n dev

再次檢視內容(同步資料需要點時間)
[root@master ~]# kubectl exec -it pod-configmap -n dev -- cat /configmap/config/info
注:使用kubectl create configmap 命令可直接生成一個configmap
kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]

kubectl create configmap nginx-conf --from-file=/var/webconf/nginx.conf
也可使用--dry-run生成yaml檔案
也可自己vim建立一個yaml檔案,使用:r/配置檔案路徑(如 :r /var/webconf/ nginx.conf)
將配置檔案的內容匯入,然後調整格式間距即可
Secret

在kubernetes中,還存在一種和ConfigMap非常類似的物件,稱為Secret物件。它主要用於儲存敏感資訊,例如密碼、祕鑰、證書等等。

1) 首先使用base64對資料進行編碼

注:base64非常容易被破解,防君子而已

[root@master ~]# echo -n 'admin' | base64 #準備username
YWRtaW4=

[root@master ~]# echo -n '123456' | base64 #準備password
MTIzNDU2

2) 接下來編寫secret.yaml,並建立Secret

apiVersion: v1
kind: Secret
metadata:
  name: secret
  namespace: dev
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2

建立並檢視

# 建立secret
[root@master ~]# kubectl create -f secret.yaml

# 檢視secret詳情
[root@master ~]# kubectl describe secret secret -n dev

3) 建立pod-secret.yaml,將上面建立的secret掛載進去:

apiVersion: v1
kind: Pod
metadata:
  name: pod-secret
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    volumeMounts: # 將secret掛載到目錄
    - name: config
      mountPath: /secret/config
  volumes:
  - name: config
    secret:
      secretName: secret

建立並檢視

# 建立pod
[root@master ~]# kubectl create -f pod-secret.yaml

# 檢視pod
[root@master ~]# kubectl get pod pod-secret -n dev

# 進入容器,檢視secret資訊,發現已經自動解碼了
[root@master ~]# kubectl exec -it pod-secret -n dev -- bash
root@pod-secret:/# ls /secret/config/
root@pod-secret:/# cat /secret/config/password
root@pod-secret:/# cat /secret/config/username

至此,已經實現了利用secret實現了資訊的編碼。

參考

黑馬B站k8s課程https://www.bilibili.com/video/BV1Qv41167ck/
https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md
https://www.yuque.com/fairy-era/yg511q/xyqxge