kubernetes实践之三十五:Pod配置管理ConfigMap

一:简介
很多生产环境中的应用程序配置较为复杂,可能需要多个config文件、命令行参数和环境变量的组合。使用容器部署时,把配置应该从应用程序镜像中解耦出来,以保证镜像的可移植性。

ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。ConfigMap让我们能够从容器镜像中把配置的详细信息给解耦出来。通过ConfigMap我们能够把配置以key-value对的形式传递到container或者别的系统组件(比如Controller)里面。
二:ConfigMap的创建方式
1.From Literal Values   可以用kubectl create来创建一个ConfigMap,然后通过kubectl get来获取

点击(此处)折叠或打开

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了南沙免费建站欢迎大家使用!

  1. # Create the ConfigMap
  2. $ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
  3. configmap"my-config" created

  4. # Get the ConfigMap Details for my-config
  5. $ kubectl get configmaps my-config -o yaml
  6. apiVersion: v1
  7. data:
  8.   key1: value1
  9.   key2: value2
  10. kind: ConfigMap
  11. metadata:
  12.   creationTimestamp: 2017-05-31T07:21:55Z
  13.   name: my-config
  14.   namespace: default
  15.   resourceVersion: "241345"
  16.   selfLink: /api/v1/namespaces/default/configmaps/my-config
  17.   uid: d35f0a3d-45d1-11e7-9e62-080027a46057
2.From Configuration File 直接通过配置文件来创建

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: special-config
  5.   namespace: default
  6. data:
  7.   special.how: very

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: env-config
  5.   namespace: default
  6. data:
  7.   log_level: INFO
3. 当前目录下包含如果有配置文件donkey.properties   可以通过kubectl命令创建一个包含该文件内容的ConfigMap

kubectl  create configmap donkey.properties --from-file=donkey.properties

三:ConfigMap的使用方式

1.Pod 通过env使用ConfigMap定义环境变量

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: dapi-test-pod
  5. spec:
  6.   containers:
  7.     - name: test-container
  8.       image: gcr.io/google_containers/busybox
  9.       command: ["/bin/sh", "-c", "env" ]
  10.       env:
  11.         - name: SPECIAL_LEVEL_KEY
  12.           valueFrom:
  13.             configMapKeyRef:
  14.               name: special-config
  15.               key: special.how
  16.         - name: LOG_LEVEL
  17.           valueFrom:
  18.             configMapKeyRef:
  19.               name: env-config
  20.               key: log_level
  21.   restartPolicy: Never
从Kubernetes V1.6 开始,引入一个新的字段envFrom,实现在Pod环境内将ConfigMap中所以定义的key=value自动生成环境变量:

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: dapi-test-pod
  5. spec:
  6.   containers:
  7.     - name: test-container
  8.       image: gcr.io/google_containers/busybox
  9.       command: [ "/bin/sh", "-c", "env" ]
  10.       envFrom:
  11.       - configMapRef:
  12.          name: special-config
  13.   restartPolicy: Never


2.使用ConfigMap设置容器启动命令的启动参数

点击(此处)折叠或打开

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: dapi-test-pod
  5. spec:
  6.   containers:
  7.     - name: test-container
  8.       image: k8s.gcr.io/busybox
  9.       command: ["/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
  10.       env:
  11.         - name: SPECIAL_LEVEL_KEY
  12.           valueFrom:
  13.             configMapKeyRef:
  14.               name: special-config
  15.               key: SPECIAL_LEVEL
  16.         - name: SPECIAL_TYPE_KEY
  17.           valueFrom:
  18.             configMapKeyRef:
  19.               name: special-config
  20.               key: SPECIAL_TYPE
  21.   restartPolicy: Never
3.在存储卷中使用ConfigMap

点击(此处)折叠或打开

  1. apiVersion: v1
    kind: Pod
    metadata:
      name: busybox
      namespace: default
    spec:
      containers:
      - image: 120.79.156.135/desktop/busybox:latest
        command:
          - sleep
          - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
        volumeMounts:
        -  name: donkeyconfig
           mountPath: /configfiles
      volumes: 
      -  name: donkeyconfig
         configMap:
            name: donkey.properties
            items: 
            -  key: donkey.properties
               path: donkey.properties
      restartPolicy: Always
      imagePullSecrets:
      - name: registry-secret
四:使用ConfigMap的限制条件
1.ConfigMap必须在Pod之前创建
2.ConfigMap受Namespace限制,只有处于相同Namespaces中的Pod可以引用它
3.ConfigMap 中的配额管理还未能实现
4.kubelet只支持可以被API Server管理的Pod使用ConfigMap

本文名称:kubernetes实践之三十五:Pod配置管理ConfigMap
浏览地址:http://myzitong.com/article/pepghp.html