kubernetes --> ConfigMap

一、k8s ConfigMp介绍:

  许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。这些配置信息需要与docker image解耦,你总不能每修改一个配置就重做一个image吧?ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。

二、ConfigMap使用:

1、一个简单的ConfigMap.yaml文件:

kind: ConfigMap
apiVersion: v1
metadata:
creationTimestamp: 2016-02-18 19:14:38
name: example-config
namespace: default
data:
example.property.1: hello
example.property.2: world
example.property.file: |-
property.1=value-1
property.2=value-2
property.3=value-3

 data一栏包括了配置数据,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。 配置数据可以通过很多种方式在Pods里被使用。ConfigMaps可以被用来:

  1、设置环境变量的值

  2、在容器里设置命令行参数

  3、在数据卷里面创建config文件

2、使用目录创建ConfigMap:

1、查看配置文件:
$ ls config/ elasticsearch.yml
2、用目录里的文件生成configmap(使用文件创建也是一样的只不过是把目录换成文件) $ kubectl create configmap esconfig
--from-file=./config/
3、查看configmap的内容: $ kubectl describe configmap esconfig Name: esconfig Namespace: default Labels:
<none> Annotations: <none> Data ==== elasticsearch.yml: ---- # ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings.
4、以yaml文件格式输出: $ kubectl get configmap esconfig -o yaml apiVersion: v1 data: elasticsearch.yml: "# ======================== Elasticsearch Configuration =========================\n#\n# NOTE: Elasticsearch comes with reasonable defaults for most settings.\n# Before you set out to tweak and tune the configuration, make sure you\n# understand

注:使用目录创建的configmap,再挂载到容器里,会把挂载目录的所有文件替换。

3、使用字面值创建:

$ kubectl create configmap config --from-literal=name=cheng --from-literal=age=12
$ kubectl get configmaps config -o yaml

 4、在Pod中使用ConfigMap:

1)、使用ConfigMap来替代环境变量

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config  #configmap的名字
              key: special.how      #data下面的key
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.type
      envFrom:
        - configMapRef:
            name: env-config
  restartPolicy: Never

2)、用ConfigMap设置命令行参数

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.type
  restartPolicy: Never

3)、通过数据卷插件使用ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: es
  labels:
    app: elasticsaerch
spec:
  containers:
  - name: es
    image: 192.168.78.4/es/elasticsearch:2.4.6
    volumeMounts:
      - name: elasticsearch-yml
        mountPath: /usr/local/elasticsearch-2.4.6/config/elasticsearch.yml
    ports:
    - containerPort: 9200
    - containerPort: 9300
  volumes:
    - name: elasticsearch-yml
      configMap:
        name: esconfig
  imagePullSecrets:
  - name: regsecret

5、ConfigMap的热更新:

可以通过直接修改configmap
$ kubectl edit configmap esconfig

注:修改后不会触发容器的滚动更新,得需要手动滚动更新控制器

 

posted @ 2018-04-11 16:56  灬魑魅魍魉灬  阅读(620)  评论(0编辑  收藏  举报