zoukankan      html  css  js  c++  java
  • Kubernetes之ConfigMap

    1、何为configMap

    kubernetes中提供了一个叫configMap的概念,为的就是让镜像和配置文件之间解耦,不需要在镜像中打包配置文件,实现了镜像的灵活性,因为一个configMap就是一系列配置信息的集合,将来是可以直接注入到Pod中的容器供其使用。

    2、创建configMap

    你可以通过使用kubectl create configmap或者yaml方式来创建configMap。

    2.1、通过--from-literal创建

    命令格式:

    $ kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] 
    

    示例:

    1.创建命令

    $ kubectl create configmap test-config --from-literal=Username=root --from-literal=Password=123456
    

    2.结果如下data内容:

    [root@hdss7-21 ~]# kubectl get configmap test-config -o yaml
    apiVersion: v1
    data:
      Password: "123456"
      Username: root
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-03-27T12:25:59Z"
      name: test-config
      namespace: default
      resourceVersion: "98418"
      selfLink: /api/v1/namespaces/default/configmaps/test-config
      uid: 7ce2d3dd-6b0d-4fa2-bb09-0a353a3a137a
    

    2.2、通过文件创建

    我们可以指定文件创建configmap,系统会自动将文件的内容写入到configmap的data字段里。

    命令格式:

    $ kubectl create configmap NAME [--from-file=[key=]source]
    

    示例:

    1.db.properties文件内容

    db.user = root
    db.pwd  = 123456
    db.host = 10.4.7.11
    db.port = 3306
    db.lib  = devops
    

    2.创建命令

    $ kubectl create configmap db-config --from-file=./db.properties
    

    --from-file 可以有多个

    3.结果如下data内容:

    [root@hdss7-21 ~]# kubectl get configmap db-config -o yaml
    apiVersion: v1
    data:
      db.properties: |
        db.user = root
        db.pwd  = 123456
        db.host = 10.4.7.11
        db.port = 3306
        db.lib  = devops
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-03-27T12:33:57Z"
      name: db-config
      namespace: default
      resourceVersion: "99103"
      selfLink: /api/v1/namespaces/default/configmaps/db-config
      uid: a3b76fd8-bf2d-483b-a455-eb4fb48450cb
    

    注意:我们可以看到指定文件创建时ConfigMap会创建一个key/value键值对,key是文件名,value是文件内容。

    如果我们不想configmap中的key为默认的文件名,还可以在创建时自己指定key名字:

    $ kubectl create configmap db-config --from-file=<key-name>=<path-to-file>
    

    2.3、通过目录创建

    我们可以指定目录创建configmap,系统会自动将指定目录下的所有文件的内容写入到configmap的data字段里。

    命令格式:

    $ kubectl create configmap NAME [--from-file=[key=]source]
    

    示例:

    1.查看文件内容

    [root@hdss7-21 ~]# echo "123" >config/a.ini
    [root@hdss7-21 ~]# echo "456" >config/b.ini
    

    2.创建命令

    $ kubectl create configmap ab-config --from-file=./config
    

    --from-file 可以有多个。

    3.结果如下data内容:

    [root@hdss7-21 ~]# kubectl get configmap ab-config -o yaml
    apiVersion: v1
    data:
      a.ini: |
        123
      b.ini: |
        456
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-03-27T12:45:15Z"
      name: ab-config
      namespace: default
      resourceVersion: "100073"
      selfLink: /api/v1/namespaces/default/configmaps/ab-config
      uid: 0988dda0-c8b5-4944-ad16-cffba1d41bb3
    

    注意:我们可以看到指定目录创建时ConfigMap内容中的各个文件会创建一个key/value键值对,key是文件名,value是文件内容。

    指定目录时只会识别该目录下的文件,而忽略子目录。

    2.4、yaml文件创建

    1.创建cache-db-config.yaml文件

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cache-db-config
      namespace: default
    data:
      redis.cnf: |
        redis.db = 3
        redis.host = 127.0.0.1
        redis.user = admin
        redis.pwd  = admin123
        redis.port = 2379
      mysql.cnf: |
        mysql.db = devops
        mysql.host = 127.0.0.1
        mysql.user = root
        mysql.pwd  = root123
        mysql.port = 3306
    

    2.应用yaml

    $ kubectl apply -f cache-db-config.yaml
    

    3、使用ConfigMap

    那么前面介绍如何创建ConfigMap,但是怎么使用尼?下面讲解

    使用ConfigMap三种方式:

    • 第一种是通过环境变量的方式,直接传递给pod
      • 使用configmap中指定的key
      • 使用configmap中所有的key
    • 第二种是通过在pod的命令行下运行的方式(启动命令中)
    • 第三种是作为volume的方式挂载到pod内

    3.1、valueFrom方式

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.11
            ports:
            - containerPort: 80
            env: 
            - name: User  # pod容器中的环境变量名字
              valueFrom:
                configMapKeyRef:
                  name: test-config       # configmap的名字
                  key: Username           # configmap中定义的key    
            - name: Pwd
              valueFrom:
                configMapKeyRef:
                  name: test-config  
                  key: Password
    

    验证:

    [root@hdss7-21 ~]# kubectl exec nginx-7cd5cbd997-zv6f4  printenv | egrep "User|Pwd"
    User=root
    Pwd=123456
    

    3.2、挂载方式

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.11
            ports:
            - containerPort: 80
            volumeMounts:            
            - name: ab           
              mountPath: /etc/nginx/conf.d/
              readOnly: true   
          volumes:                
          - name: ab 
            configMap:        # 存储卷类型   
              name: ab-config
    

    验证:

    [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/a.ini
    123
    [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/b.ini
    456
    
  • 相关阅读:
    微信支付
    设计模式
    微信,根据经纬度获取当前城市
    移动端下拉刷新
    angular-seed — AngularJS种子项目
    Send Email
    angularjs 控制器
    ajax 图片上传
    Jpeg-Baseline和Progressive JPEG的区别
    QT启动一个工程
  • 原文地址:https://www.cnblogs.com/jasonminghao/p/12584561.html
Copyright © 2011-2022 走看看