ConfigMap 笔记
文章目录
概述
- ConfigMap 通常用于设置环境变量、设置命令行参数、创建配置文件
- Pod 使用 ConfigMap 前,ConfigMap 必须存在,否则 pod 不能启动
- ConfigMap 只能被在同一一个命名空间中的Pod所引用
创建 ConfigMap
- 命令如下
1 2 3
kubectl create configmap <map-name> <data-source> # 或者 kubectl apply -f <configmap-file.yml>
- map-name: ConfigMap 名称
- data-source: 目录、文件或具体值
通过目录创建 ConfigMaps
- 命令如下
1 2
kubectl create configmap game-config \ --from-file=https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl
- docs/tasks/configure-pod-container/configmap/kubectl/目录下的文件包括
1
ls docs/tasks/configure-pod-container/configmap/kubectl/
- 输出如下
1 2
game.properties ui.properties
- 输出如下
- 查看 game-config 信息
1 2 3
kubectl describe configmaps game-config # 或者 kubectl get configmaps game-config -o yaml
通过文件创建 ConfigMaps
- 通过单个文件创建
1 2
kubectl create configmap game-config-2 \ --from-file=https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/game.properties
- 通过多个文件创建
1 2 3
kubectl create configmap game-config-3 \ --from-file=https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/game.properties \ --from-file=https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/ui.properties
- 通过文件创建ConfigMap时可以定义文件的键
1 2 3 4
kubectl create configmap game-config-4 \ --from-file=game-special-key=https://k8s.io/docs/tasks/configure-pod-container/configmap/kubectl/game.properties # key 是 "game-special-key" # value 是 game.properties 文件的内容
通过具体值创建 ConfigMaps
- 使用 –from-literal 参数定义具体值
1 2 3
kubectl create configmap special-config \ --from-literal=special.how=very \ --from-literal=special.type=charm
使用 ConfigMap
定义 pod 环境变量
Pod 环境变量的值来自于单一 ConfigMap
- 在ConfigMap中定义一个环境变量作为键值对
1
kubectl create configmap special-config --from-literal=special.how=very
- 指派ConfigMap中定义的special.how的值给Pod中SPECIAL_LEVEL_KEY环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
apiVersion:v1 kind:Pod metadata: name:dapi-test-pod spec: containers: - name:test-container image:k8s.gcr.io/busybox command:["/bin/sh","-c","env"] env: # Define the environment variable - name:SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: # The ConfigMap containing the value you want to assign to SPECIAL_LEVEL_KEY name:special-config # Specify the key associated with the value key:special.how restartPolicy:Never
- 保存Pod规格的变化,Pod将输出SPECIAL_LEVEL_KEY=very
Pod 环境变量的值来自于多个 ConfigMap
- 创建两个 ConfigMap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
--- apiVersion:v1 kind:ConfigMap metadata: name:special-config namespace:default data: special.how:very --- apiVersion:v1 kind:ConfigMap metadata: name:env-config namespace:default data: log_level:INFO
- 在Pod规格中定义环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
apiVersion:v1 kind:Pod metadata: name:dapi-test-pod spec: containers: - name:test-container image:k8s.gcr.io/busybox command:["/bin/sh","-c","env"] env: - name:SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name:special-config key:special.how - name:LOG_LEVEL valueFrom: configMapKeyRef: name:env-config key:log_level restartPolicy:Neverv
- 保存变更后的Pod,Pod将会输出SPECIAL_LEVEL_KEY=very和LOG_LEVEL=info
在一个ConfigMap中配置的键值对都作为一个Pod的环境变量
- Kubernetes v1.6+可用
- 创建包含多个键-值对的ConfigMap
1 2 3 4 5 6 7 8
apiVersion:v1 kind:ConfigMap metadata: name:special-config namespace:default data: SPECIAL_LEVEL:very SPECIAL_TYPE:charm
- 使用envFrom定义所有的ConfigMap数据作为Pod的环境变量。来自于Config的键成为Pod中环境变量的名
1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion:v1 kind:Pod metadata: name:dapi-test-pod spec: containers: - name:test-container image:k8s.gcr.io/busybox command:["/bin/sh","-c","env"] envFrom: - configMapRef: name:special-config restartPolicy:Never
- Pod的输出包括: SPECIAL_LEVEL=very 和 SPECIAL_TYPE=charm
在Pod命令行中使用ConfigMap定义的环境变量
- 在Pod规范的command 中使用$(VAR_NAME) ,获取ConfigMap定义的环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
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:Never
- test-container容器的输出: very charm
添加ConfigMap数据至存储卷
- 当通过–from-file创建的ConfigMap时,文件将作为一个键保存在ConfigMap中,而此文件的内容将作为值
1 2 3 4 5 6 7 8
apiVersion:v1 kind:ConfigMap metadata: name:special-config namespace:default data: special.level:very special.type:charm
将ConfigMap中的数据传播到指定目录
- 在Pod的存储卷区域添加ConfigMap的名称
- 这将添加ConfigMap数据到volumeMounts.mountPath指定的目录下(此例为/etc/config)
- command区域将引用保存在ConfigMap中的special.level条目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
apiVersion:v1 kind:Pod metadata: name:dapi-test-pod spec: containers: - name:test-container image:k8s.gcr.io/busybox command:["/bin/sh","-c","ls /etc/config/"] volumeMounts: - name:config-volume mountPath:/etc/config volumes: - name:config-volume configMap: # Provide the name of the ConfigMap containing the files you want # to add to the container name:special-config restartPolicy:Never
- Pod运行时,command (“ls /etc/config/”)将输出: special.level special.type
- 如果在/etc/config/目录下存在文件,将不会删除
添加ConfigMap数据至存储卷指定的目录
- 为ConfigMap条目,使用path指定文件路径
- 此例中,special.level将在config-volume存储卷中被挂接至/etc/config/keys
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
apiVersion:v1 kind:Pod metadata: name:dapi-test-pod spec: containers: - name:test-container image:k8s.gcr.io/busybox command:["/bin/sh","-c","cat /etc/config/keys"] volumeMounts: - name:config-volume mountPath:/etc/config volumes: - name:config-volume configMap: name:special-config items: - key:special.level path:keys restartPolicy:Never
- Pod运行时,(“cat /etc/config/keys”) 将输出: very
参考
文章作者 Colben
上次更新 2019-12-22