ConfigMap(Kubernetes简称cm)作为Kubernetes 提供的一种资源,可以将配置信息,跟业务镜像解耦开来,提高业务镜像的移植性。
2. 使用场景其内部核心数据结构,可以理解为一个key-value 映射。
key 为配置名称,限定为string 类型,有语法约束;value 为配置值,限定为string 类型。参照官方文档,其用法有以下四种:
用作环境变量用作镜像CMD参数用作Pod卷挂载kubernetes API 调用使用说明:
1. ConfigMap 对象,须在Pod 启动前创建,才能被Pod引入使用。
2. ConfigMap 对象,需要和业务Pod 在同一个NameSpace,才可以被Pod 引入使用(如果是Pod 内部,使用kubernetes API 调用,则无该限制)。
3. ConfigMap 对象,不适宜存储敏感数据,如数据库密码,访问密钥等。如有安全性要求,请参考Secret 资源。
3. 举例说明这里,首先在集群develop namespace 下,创建一个cm 对象:cm-001
其主要信息如下:核心数据data, 包含4个配置key:dbhost,dbport,env,redis.conf
root@VM-128-4-ubuntu:~# kubectl get cm cm-001 -n develop -o yaml apiVersion: v1 data: dbhost: 10.2.33.4 dbport: "3306" env: develop redis.conf: port 6380 kind: ConfigMap metadata: creationTimestamp: "2020-05-17T05:47:13Z" name: cm-001 namespace: develop resourceVersion: "1499686372" selfLink: /api/v1/namespaces/develop/configmaps/cm-001 uid: ab12fc40-ac57-41da-8e42-252a07e864ee root@VM-128-4-ubuntu:~# 3.1 用作环境变量创建一个Pod:cm-001-pod
root@VM-128-4-ubuntu:~# cat redis-pod.yaml apiVersion: v1 kind: Pod metadata: name: cm-001-pod namespace: develop spec: containers: - name: demo image: redis env: - name: env valueFrom: configMapKeyRef: name: cm-001 key: env root@VM-128-4-ubuntu:~# root@VM-128-4-ubuntu:~# root@VM-128-4-ubuntu:~# kubectl get pod -n develop NAME READY STATUS RESTARTS AGE cm-001-pod 1/1 Running 0 17s验证结果如下:环境变量 env=develop ,在pod 内生效:
root@VM-128-4-ubuntu:~# kubectl exec -it cm-001-pod /bin/bash -n develop root@cm-001-pod:/data# env KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_SERVICE_PORT=443 env=develop HOSTNAME=cm-001-pod * *3.2 用作镜像CMD 启动参数这里,本质上还是先以env环境变量形式,引入到Pod 内部。然后,CMD 启动命令使用环境变量,参考官方例子:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: k8s.gcr.io/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: SPECIAL_LEVEL - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: SPECIAL_TYPE restartPolicy: Never3.3 用作Pod 卷挂载config map 对象,用作Pod 内部卷挂载时,对应的key,会自动生成为同名文件,供业务使用。
apiVersion: v1 kind: Pod metadata: name: cm-001-pod namespace: develop spec: containers: - name: demo image: redis volumeMounts: - name: config mountPath: "/tmp/conf" readOnly: true volumes: - name: config configMap: name: cm-001验证挂载结果:
root@VM-128-4-ubuntu:~# kubectl exec -it cm-001-pod -n develop bash root@cm-001-pod:/data# ls root@cm-001-pod:/data# ls /tmp/ conf root@cm-001-pod:/data# ls /tmp/conf dbhost dbport env redis.conf root@cm-001-pod:/data# cat /tmp/conf/redis.conf port 6380root@cm-001-pod:/data# cat /tmp/conf/dbhost 10.2.33.4root@cm-001-pod:/data# 3.4 kubernetes API 调用API 调用时,使用的ConfigMap 对象不再局限于当前namespace。这里不再举例。
4. TKE平台使用结合腾讯云容器服务TKE:
4.1 创建deploy,配置cm 挂载,env 使用添加数据卷+使用全部key配置挂载点+环境变量4.2 运行效果环境变量,配置文件挂载均生效。
env+volume挂载效果5. 参考文档https://kubernetes.io/docs/concepts/configuration/configmap/
https://cloud.tencent.com/document/product/457/31717
---来自腾讯云社区的---jackiebai
微信扫一扫打赏
支付宝扫一扫打赏