zoukankan      html  css  js  c++  java
  • kubernetes系列(十一)

    1. configMap简介

    应用部署的一个最佳实践就是将应用所需的配置信息与程序分离,这样可以使应用更好地进行复用,通过不同的配置也可以实现更灵活的功能。
    所以从v1.2开始,kubernetes提供了一种统一的应用配置管理方案-configMap

    1.1 configMap的典型用法

    1. 生成为容器内的环境变量
    2. 设置容器启动命令的启动参数(需设置为环境变量)
    3. volume形式挂载为容器内部的文件或目录

    1.2 configMap的表现形式

    configMap以一个或者多个key:value的形式保存,其中:

    • 既可以是loglevel=info的形式
    • 也可以表示一个完整的配置文件内容
      • 如:server.xml=<?xml...>...

    2. configMap的创建方式

    2.1 kubectl create命令行创建

    2.1.1 从文件创建

    1. 创建一个测试的配置文件test.json
    echo "{ "id": "emm", "name": "tom"}" >> test.json
    
    1. 从文件创建configmap

    key=文件名,value=文件内容

    kubectl create cm map2 --from-file=test.json
    
    1. 查看创建的configmap
    kubectl describe cm map2
    

    2.1.2 从目录创建

    1. 准备文件夹和文件夹内容
    mkdir cmtest && 
    echo "{ "id": "emm", "name": "tom"}" >> cmtest/test.json &&
    echo "{ "id": "emm", "name": "tom"}" >> cmtest/test2.json
    
    1. 从文件创建configmap

    key=文件夹下的每个文件名,value=文件内容

    kubectl create cm map2 --from-file=cmtest/
    

    2.1.3 使用字面值创建

    使用文字值创建,利用--from-literal参数传递配置信息

    • 该参数可以使用多次
    kubectl create cm testname --from-literal=key1=value1 --from-literal=key2=value2
    

    2.2 使用yaml资源清单创建

    下图分别演示了

    • key对应一个value
    • key对应一整个配置文件
    apiVersion: v1 
    kind: ConfigMap 
    metadata:
      name: cm-name-1
      namespace: default 
    data:
      key1: "hahah"
      key2: |
        {
          "property1": "value1",
          "property2": true
        }
    

    3. configMap的使用

    3.1 使用configMap来替代环境变量

    共有两种使用方式:

    1. 自己指定环境变量名字,使用configmap的值
    2. 将整个configmap里面的k/v映射成环境变量
    apiVersion: v1 
    kind: Pod 
    metadata:
      name: dapi-test-pod 
    spec:
      containers:
        - name: test-container 
          image: hub.coreqi.cn/library/myapp:v1 
          command: [ "/bin/sh", "-c", "env" ]
          # 自己指定环境变量名字,使用configmap的值
          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 
          
          # 将整个configmap里面的`k/v`映射成环境变量
        envFrom:
          - configMapRef:
            name: env-config 
      restartPolicy: Never
    

    3.2 使用configMap设置容器启动命令的启动参数(需设置为环境变量)

    导入方式和环境变量一样的,这里主要体现的是一种思想,如下

    • 能直接echo输出环境变量,说明也能直接作为启动命令的参数使用
    apiVersion: v1 
    kind: Pod 
    metadata:
      name: dapi-test-pod 
    spec:
      containers: 
        - name: test-container 
          image: hub.coreqi.cn/library/myapp:v1 
          # 这里输出使用环境变量,说明也能当启动参数
          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.3 通过数据卷插件volume使用ConfigMap

    3.3.1 把整个configmap挂载到路径下

    • 此时这个路径下的
      • 文件名=key
      • 文件内容=value
    apiVersion: v1 
    kind: Pod 
    metadata:
      name: dapi-test-pod 
    spec:
      containers:
        - name: test-container 
          image: hub.coreqi.cn/library/myapp:v1 
          command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
          # 把config-volume挂载到下面的路径下
          volumeMounts:
          - name: config-volume 
            mountPath: /etc/config 
      # 导入“special-config”的configmap,并命名为config-volume
      volumes:
        - name: config-volume 
          configMap:
            name: special-config 
      restartPolicy: Never
    

    3.3.2 把configmap某个key的值,挂载到具体的文件

    apiVersion: v1 
    kind: Pod 
    metadata:
      name: dapi-test-pod 
    spec:
      containers:
        - name: test-container 
          image: hub.coreqi.cn/library/myapp:v1 
          command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
          # 把config-volume下的key1的值。完整地赋值给appsettings.Production.json
          volumeMounts:
          - name: config-volume 
            mountPath: /app/appsettings.Production.json
            subPath: key1
      # 导入“special-config”的configmap,并命名为config-volume
      volumes:
        - name: config-volume
          configMap:
            name: special-config
      restartPolicy: Never
    

    4. configMap的热更新

    4.1 热更新的局限

    1. 热更新只有对volume挂载文件的使用方式有效
    2. 对该ConfigMap挂载的Env不会同步更新

    4.2 修改configmap

    kubectl edit configmap log-config
    

    假如有资源挂载了这个configmap,等待大约十秒后就能热更新

  • 相关阅读:
    简单区分Vmware的三种网络连接模式(bridged、NAT、host-only)
    linux创建账户并自动生成主目录和主目录下的文件
    EF 通用数据层类
    html在线美化网站
    图片在页面中居中显示
    __dopostback的用法
    rdlc报表集锦
    .NET开源免费的功能强大控件库
    使用webclient上传下载实例
    消息队列将并发变串行
  • 原文地址:https://www.cnblogs.com/baoshu/p/13258291.html
Copyright © 2011-2022 走看看