zoukankan      html  css  js  c++  java
  • 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 ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # Before you set out to tweak and tune the configuration, make sure you # 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

    注:修改后不会触发容器的滚动更新,得需要手动滚动更新控制器
  • 相关阅读:
    HTTP客户端识别与Cookie机制
    javascript模式之模块模式
    js类式继承模式学习心得
    关于html自闭合标签要不要加空格和斜杠的问题?
    分享两件有趣的事情
    PS Web切图界面设置
    这是什么
    关于前后端分离我的理解
    模块化方案esl以及amd的依赖方式
    node 内存管理相关
  • 原文地址:https://www.cnblogs.com/chimeiwangliang/p/8796133.html
Copyright © 2011-2022 走看看