• configmap


    1.作用

    对于应用的可变配置在 Kubernetes 中是通过一个 ConfigMap 资源对象来实现的,我们知道许多应用经常会有从配置文件、命令行参数或者环境变量中读取一些配置信息的需求,这些配置信息我们肯定不会直接写死到应用程序中去的,比如你一个应用连接一个 redis 服务,下一次想更换一个了的,还得重新去修改代码,重新制作一个镜像,这肯定是不可取的,而ConfigMap 就给我们提供了向容器中注入配置信息的能力,不仅可以用来保存单个属性,还可以用来保存整个配置文件,比如我们可以用来配置一个 redis 服务的访问地址,也可以用来保存整个 redis 的配置文件。接下来我们就来了解下 ConfigMap 这种资源对象的使用方法。
    

    2.创建一个configmap

    [root@k8s-master01 configmap]# cat cm-demo1.yaml 
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: cm-demo
      namespace: default
    data:
      data.1: hello
      data.2: world
      config: |
        property.1=value-1
        property.2=value-2
        property.3=value-3
    
    [root@k8s-master01 configmap]# kubectl get configmaps 
    NAME               DATA   AGE
    cm-demo            3      7m26s
    
    
    [root@k8s-master01 configmap]# kubectl describe configmaps  cm-demo 
    Name:         cm-demo
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    config:
    ----
    property.1=value-1
    property.2=value-2
    property.3=value-3
    
    data.1:
    ----
    hello
    data.2:
    ----
    world
    Events:  <none>
    

    3.我们可以可以从一个给定的目录来创建一个 ConfigMap 对象,比如我们有一个 testcm 的目录,该目录下面包含一些配置文件,redis 和 mysql 的连接信息

    [root@k8s-master01 testcm]# cat redis.conf 
    host=127.0.0.1
    port=6379
    [root@k8s-master01 testcm]# cat mysql.conf 
    host=127.0.0.1
    port=3306
    [root@k8s-master01 configmap]# kubectl create configmap cm-demo2 --from-file=testcm/
    configmap/cm-demo2 created
    [root@k8s-master01 configmap]# kubectl get configmaps 
    NAME               DATA   AGE
    cm-demo            3      13m
    cm-demo2           2      25s
    game-config        2      22d
    kube-root-ca.crt   1      71d
    [root@k8s-master01 configmap]# kubectl  describe configmaps cm-demo2 
    Name:         cm-demo2
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    redis.conf:
    ----
    host=127.0.0.1
    port=6379
    
    mysql.conf:
    ----
    host=127.0.0.1
    port=3306
    
    Events:  <none>
    [root@k8s-master01 configmap]# kubectl get configmaps cm-demo2 -oyaml
    apiVersion: v1
    data:
      mysql.conf: |
        host=127.0.0.1
        port=3306
      redis.conf: |
        host=127.0.0.1
        port=6379
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-04-11T05:30:28Z"
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:data:
            .: {}
            f:mysql.conf: {}
            f:redis.conf: {}
        manager: kubectl-create
        operation: Update
        time: "2021-04-11T05:30:28Z"
      name: cm-demo2
      namespace: default
      resourceVersion: "2856094"
      uid: 93937b91-6488-4a6f-8277-7e15a486b0ef
    

    4.指定文件来创建

    [root@k8s-master01 configmap]# kubectl create configmap  cm-demo3 --from-file=testcm/redis.conf 
    configmap/cm-demo3 created
    [root@k8s-master01 configmap]# kubectl get configmaps cm-demo3 -oyaml
    apiVersion: v1
    data:
      redis.conf: |
        host=127.0.0.1
        port=6379
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-04-11T05:33:09Z"
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:data:
            .: {}
            f:redis.conf: {}
        manager: kubectl-create
        operation: Update
        time: "2021-04-11T05:33:09Z"
      name: cm-demo3
      namespace: default
      resourceVersion: "2856476"
      uid: 26b0b246-606c-4077-aea5-494954787e1c
    

    5.通过帮助文档我们可以看到我们还可以直接使用字符串进行创建,通过 --from-literal 参数传递配置信息,同样的,这个参数可以使用多次,格式如下:

    [root@k8s-master01 configmap]# kubectl create configmap cm-demo4 --from-literal=db.host=localhost --from-literal=db.port=3306
    configmap/cm-demo4 created
    [root@k8s-master01 configmap]# kubectl get configmaps cm-demo4 -oyaml
    apiVersion: v1
    data:
      db.host: localhost
      db.port: "3306"
    kind: ConfigMap
    metadata:
      creationTimestamp: "2021-04-11T05:35:39Z"
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:data:
            .: {}
            f:db.host: {}
            f:db.port: {}
        manager: kubectl-create
        operation: Update
        time: "2021-04-11T05:35:39Z"
      name: cm-demo4
      namespace: default
      resourceVersion: "2856827"
      uid: 43285a9c-d1ea-48b1-a311-1f630ea764d3
    

    6.使用

    ConfigMap 创建成功了,那么我们应该怎么在 Pod 中来使用呢?我们说 ConfigMap 这些配置数据可以通过很多种方式在 Pod 里使用,主要有以下几种方式:
    
    设置环境变量的值
    在容器里设置命令行参数
    在数据卷里面挂载配置文件
    

    非常常见的使用 ConfigMap 的方式:通过数据卷使用,在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容,如下资源对象所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: testcm3-pod
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: cm-demo2
      containers:
        - name: testcm3
          image: busybox
          command: [ "/bin/sh", "-c", "cat /etc/config/redis.conf" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
    [root@k8s-master01 configmap]# kubectl apply -f cmtest3-pod.yaml 
    pod/testcm3-pod created
    [root@k8s-master01 configmap]# kubectl logs testcm3-pod 
    host=127.0.0.1
    port=6379
    

    当然我们也可以在 ConfigMap 值被映射的数据卷里去控制路径,如下 Pod 定义:

    apiVersion: v1
    kind: Pod
    metadata:
      name: testcm4-pod
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: cm-demo1
            items:
            - key: mysql.conf
              path: path/to/msyql.conf
      containers:
        - name: testcm4
          image: busybox
          command: [ "/bin/sh","-c","cat /etc/config/path/to/msyql.conf" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
    [root@k8s-master01 configmap]# kubectl create -f cmtest4-pod.yaml 
    pod/testcm4-pod created
    [root@k8s-master01 configmap]# kubectl logs cmtest4
    host=127.0.0.1
    port=3306
    
  • 相关阅读:
    AIX下的ha高可用集群cluster
    触发redo写的几个条件
    Oracle Internals Notes Redo Write Triggers
    触发写Redo&nbsp;Log的条件
    [Oracle]理解undo表空间
    MySQL数据备份之mysqldump使用
    Orabbix无法获取Oracle DB Size和DB Files Size的解决方法
    ES5和ES6那些你必须知道的事儿(三)
    ES5和ES6那些你必须知道的事儿(二)
    ES5和ES6那些你必须知道的事儿(一)
  • 原文地址:https://www.cnblogs.com/Applogize/p/14643673.html
Copyright © 2020-2023  润新知