3.5 Pod的配置管理

应用所需的配置信息与程序进行分离,这样可以使应用程序被更好地复用,通过不同的配置也能实现更灵活的功能

ConfigMap概述

(1) 什么是ConfigMap

ConfigMap 是以Key-Value的形式存储在Kubernetes中,用于描述一个变量的值或者是完整配置文件内容。
通常用Yaml文件,或者kubectl create configmap命令行的方式创建。

(2) ConfigMap的应用

ConfigMap供容器使用的典型用法如下。
a. 生成为容器内的环境变量。
b. 设置容器启动命令的启动参数(需设置为环境变量)。
c. 以Volume的形式挂载为容器内部的文件或目录。

创建ConfigMap资源对象

1.通过YAML配置文件方式创建

apiVersion: v1
kind: ConfigMap
metadata: 
  name: cm-appvers
data:
  apploglevel: info
  appdatadir: /var/data

创建命令:

kubectl create -f cm-appvars.yaml

2.通过kubectl命令行方式创建

不使用YAML文件,直接通过kubectl create configmap也可以创建ConfigMap,可以使用参数--from-file或--from-literal指定内容,并且可以在一行命令中指定多个参数。
(1)通过--from-file参数从文件中进行创建,可以指定key的名称,也可以在一个命令行中创建包含多个key的ConfigMap,语法为:

kubectl create configmap Name --from-file=[key=]source --from-file=[key=]source

(2)通过--from-file参数从目录中进行创建,该目录下的每个配置文件名都被设置为key,文件的内容被设置为value,语法为:

kubectl create configmap Name --from-file=config-files-dir

(3)使用--from-literal时会从文本中进行创建,直接将指定的key#=value#创建为ConfigMap的内容,语法为:

kubectl create configmap --from-literal=key=value  ...

在Pod中使用ConfigMap

容器应用对ConfigMap的使用有以下两种方法。

1.通过环境变量方式使用ConfigMap

env:
-name: APPLOGLEVEL   #定义变量名称
  valuefrom:
  configmapkeyref:
      name: cm-appvars          #环境变量取自的configmap名称
      key: apploglevel            # 变量的key

Kubernetes从1.6版本开始,引入了一个新的字段envFrom,实现了在Pod环境中将ConfigMap(也可用于Secret资源对象)中所有定义的key=value自动生成为环境变量:

envFrom:
- configMapRef:
      name: cm-appvars           #加载所有cm-appvars的kv到自动生成环境变量
  • 注意:环境变量的名称受POSIX命名规范([a-zA-Z_][a-zA-Z0-9_]*)约束,不能以数字开头。如果包含非法字符,则系统将跳过该条环境变量的创建,并记录一个Event来提示环境变量无法生成,但并不阻止Pod的启动。

2.通过volumeMount使用ConfigMap

Containers:
-   name: testabc
...
     volumeMounts:
     -  name: serverxml                  #挂载的volume名称
         mountPath:  /configfiles      #挂载到容器内的目录
Volumes:
-   name: serverxml                             #volume 名称
     configMap:
         name: cm-appconfigfiles           #使用的configmap

使用ConfigMap的限制条件

  • ConfigMap必须在Pod之前创建。
  • ConfigMap受Namespace限制,只有处于相同Namespace中的Pod才可以引用它。
  • ConfigMap中的配额管理还未能实现。
  • 静态Pod无法饮用ConfigMap
  • a. 用挂载,内部只能为目录,无法挂载为文件
    b. 目录原先有文件会被覆盖
    c. 如果需要保留目录下其他文件,可以cm挂载到临时目录,然后用文件肤质或者链接到实际配置目录下。

TODO 什么是配额管理,后边在资源管理会讲。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容