ConfigMap
创建ConfigMap后,数据实际会存储在K8s中Etcd,然后通过创建Pod时引用该数据。
应用场景:应用程序配置
Pod使用configmap数据有两种方式:
两种数据类型:
#解释
apiVersion: v1 kind: Pod metadata: name: configmap-demo-pod spec: containers: - name: demo image: alpine command: ["sleep", "3600"] env: - name: ABC valueFrom: configMapKeyRef: name: configmap-demo key: abc - name: CDE valueFrom: configMapKeyRef: name: configmap-demo key: cde volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: - name: config configMap: name: configmap-demo items: - key: "redis.properties" path: "redis.properties"
|
vim configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: configmap-demo data: abc: "123" cde: "456"
redis.properties: | port: 6379 host: 192.168.0.11
|
vim configmap-demo-pod.yaml
apiVersion: v1 kind: Pod metadata: name: configmap-demo-pod spec: containers: - name: demo image: nginx env: - name: ABC valueFrom: configMapKeyRef: name: configmap-demo key: abc - name: CDE valueFrom: configMapKeyRef: name: configmap-demo key: cde volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: - name: config configMap: name: configmap-demo items: - key: "redis.properties" path: "redis.properties"
|
验证查看
kubectl apply -f configmap.yaml kubectl apply -f configmap-demo-pod.yaml kubectl get configmaps kubectl exec -it configmap-demo-pod -- bash
|
参考链接:https://kubernetes.io/zh/docs/concepts/configuration/configmap/
Secret
与ConfigMap类似,区别在于Secret主要存储敏感数据,所有的数据要经过base64编码。
应用场景:凭据
kubectl create secret 支持三种数据类型:
Pod使用Secret数据与ConfigMap方式一样。
第一步:将用户名密码进行编码
[root@k8s-node1 ~] YWRtaW4= [root@k8s-node1 ~] MTIzLmNvbQ==
|
第二步:将编码后值放到Secret
vim secret.yaml
apiVersion: v1 kind: Secret metadata: name: db-user-pass type: Opaque data: username: YWRtaW4= password: MTIzLmNvbQ==
|
vim secret-demo-pod.yaml
apiVersion: v1 kind: Pod metadata: name: secret-demo-pod spec: containers: - name: demo image: nginx env: - name: USER valueFrom: secretKeyRef: name: db-user-pass key: username - name: PASS valueFrom: secretKeyRef: name: db-user-pass key: password volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: - name: config secret: secretName: db-user-pass items: - key: username path: my-username - key: password path: my-password
|
验证查看
kubectl apply -f secret.yaml kubectl apply -f secret-demo-pod.yaml kubectl get secrets kubectl exec -it secret-demo-pod -- bash
|
参考链接:https://kubernetes.io/zh/docs/concepts/configuration/secret/
应用程序如何动态更新配置
应用程序动态更新配置方案: