本文将介绍 Kubernetes 中的 ConfigMap / Secret。
一、什么是 ConfigMap / Secret?
应用往往无法直接运行,而是需要配置文件做各种配置,我们容易想到的配置文件处理方式是:
这两个做法都有各自的问题,Kubernetes 提供了 ConfigMap / Secret 作为解决方案,其中:
二、ConfigMap 的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: v1
kind: ConfigMap
metadata: name: test-configMap
data: count: '10' debug: 'on' path: '/etc/systemd'
|
三、Secret 的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: v1
kind: Secret
metadata: name: test-secret
data: name: cm9vdA== pwd: MTIzNDU2 db: bXlzcWw=
|
四、ConfigMap / Secret 的使用
1. 环境变量
可以在配置 Pod 时,可以通过 pod.spec.containers.env.valueFrom
关联单个 KV,也可以通过 envFrom 一次性关联整个 ConfigMap / Secret。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| apiVersion: v1
kind: Pod
metadata: name: test-pod labels: owner: chrono env: demo region: north tier: back
spec: containers: - name: busy ··· env: - name: debug valueFrom: configMapKeyRef: name: test-configMap key: debug - name: pwd valueFrom: secretKeyRef: name: test-secret key: pwd envFrom: - configMapRef: name: test-configMap prefix: 'test-configMap-' - secretRef: name: test-secret prefix: 'test-secret-' ···
|
2. Volume
可以将 ConfigMap / Secret 作为存储卷挂载。
通过 Volumes 将配置文件挂载在 Pod 中,再通过 volumeMounts 将 Pod 中的配置文件挂载到容器中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| apiVersion: v1
kind: Pod
metadata: name: test-pod labels: owner: chrono env: demo region: north tier: back
spec: volumes: - name: my-configMap configMap: name: test-configMap - name: my-secret secret: secretName: test-secret containers: - name: busy - volumeMounts: /tmp name: my-configMap
|
参考