美文网首页
kubernetes Pod的配置管理-ConfigMap

kubernetes Pod的配置管理-ConfigMap

作者: quanCN | 来源:发表于2021-09-25 20:56 被阅读0次

背景

应用打包为容器镜像后,可以通过环境变量或者外挂文件的方式在创建容器时进行配置注入,但在大规模容器集群的环境中,对多个容器进行不同的配置将变得非常复杂。k8s从1.2版本开始提供了一种统一的应用配置管理方案--ConfigMap

简介

ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。ConfigMap将环境配置信息和容器镜像解耦,便于应用配置的修改。
ConfigMap供容器使用的典型用法如下:

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

注:ConfigMap 并不提供保密或者加密功能。 如果想存储的数据是机密的,应使用Secret,或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap

创建ConfigMap资源对象

  • 例子test-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # 类属性键;每一个键都映射到一个简单的值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # 类文件键
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true   
  • 创建
    kubectl apply -f test-configmap.yaml

在pod中使用ConfigMap

  • Pod示例configmap-demo-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        # 定义环境变量
        - name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
          valueFrom:
            configMapKeyRef:
              name: game-demo           # 这个值来自 ConfigMap
              key: player_initial_lives # 需要取值的键
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
    # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
    - name: config
      configMap:
        # 提供你想要挂载的 ConfigMap 的名字
        name: game-demo
        # 来自 ConfigMap 的一组键,将被创建为文件
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"
  • 创建
    kubectl apply -f configmap-demo-pod.yaml
  • 查看详情
    kubectl describe pod configmap-demo-pod
  • 查看环境变量
    kubectl exec -it configmap-demo-pod -- /bin/sh

ConfigMap的限制条件

  • ConfigMap必须在Pod之前创建,Pod才能引用它
  • 如果Pod使用envFrom基于ConfigMap定义环境变量,则无效的环境变量名称(例如名称以数字开头)将被忽略,并在事件中被记录为InvalidVariableNames
  • ConfigMap受命名空间限制,只有处于相同命名空间的Pod才可以引用它
  • ConfigMap无法用于静态Pod

相关文章

网友评论

      本文标题:kubernetes Pod的配置管理-ConfigMap

      本文链接:https://www.haomeiwen.com/subject/akqfnltx.html