k8s-pod-ConfigMap配置管理

网友投稿 250 2022-09-12

k8s-pod-ConfigMap配置管理

一、ConfigMap创建

ConfigMap供容器使用的典型用法如下。

(1)生成为容器内的环境变量。

(2)设置容器启动命令的启动参数(需设置为环境变量)。

(3)以Volume的形式挂载为容器内部的文件或目录。

ConfigMap以一个或多个key:value的形式保存在Kubernetes系统中供应用使用 。可以通过YAML配置文件或者直接使用kubectl create configmap命令行的方式来创建ConfigMap。

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

示列1:cm-appvars.yaml

apiVersion: v1kind: ConfigMapmetadata: name: cm-appvarsdata: apploglevel: info appdatadir: /var/data

示列2: cm-appconfigfiles.yaml,包含两个配置文件server.xml和 logging.properties

apiVersion: v1kind: ConfigMapmetadata: name: cm-appconfigfilesdata: key-serverxml: | key-loggingproperties: "handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler1catalina.org.apache.juli.AsyncFileHandler.level = FINE1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.1catalina.org.apache.juli.AsyncFileHandler.maxDays = 901catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-82localhost.org.apache.juli.AsyncFileHandler.level = FINE2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.2localhost.org.apache.juli.AsyncFileHandler.maxDays = 902localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-83manager.org.apache.juli.AsyncFileHandler.level = FINE3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs3manager.org.apache.juli.AsyncFileHandler.prefix = manager.3manager.org.apache.juli.AsyncFileHandler.maxDays = 903manager.org.apache.juli.AsyncFileHandler.encoding = UTF-84host-manager.org.apache.juli.AsyncFileHandler.level = FINE4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 904host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8java.util.logging.ConsoleHandler.level = FINEjava.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatterjava.util.logging.ConsoleHandler.encoding = UTF-8org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandlerorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandlerorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler"

二、ConfigMap使用

• 通过环境变量获取ConfigMap中的内容。

• 通过Volume挂载的方式将ConfigMap中的内容挂载为容器内 部的文件或目录。

1.通过环境变量获取ConfigMap中的内容

示例1:

apiVersion: v1kind: Podmetadata: name: configmap-use-by-env-pod1spec: containers: - name: cm-test01 image: busybox command: ["/bin/sh","-c","env|grep APP"] env: - name: APPLOGLEVEL #定义环境变量的名字 valueFrom: #key"apploglevel"对应的值 configMapKeyRef: name: cm-appvars #环境变量的值取自cm-appvars key: apploglevel #key为apploglevel - name: APPDATADIR valueFrom: configMapKeyRef: name: cm-appvars key: appdatadir restartPolicy: Never #Pod重启策略,执行完后不重启

[fxltest@master1 k8s_yaml]$ kubectl logs configmap-use-by-env-pod1APPDATADIR=/var/dataAPPLOGLEVEL=info

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

apiVersion: v1kind: Podmetadata: name: configmap-use-by-env-pod2spec: containers: - name: cm-test2 image: busybox command: ["/bin/sh","-c","env|grep app"] envFrom: - configMapRef: name: cm-appvars restartPolicy: Never

[fxltest@master1 k8s_yaml]$ kubectl logs configmap-use-by-env-pod2apploglevel=infoappdatadir=/var/data

2.通过volumeMount使用ConfigMap

示例:将ConfigMap“cm-appconfigfiles”中的 内容以文件的形式mount到容器内部的/configfiles目录下。

apiVersion: v1kind: Podmetadata: name: configmap-use-by-mount-pod1spec: containers: - name: cm-configmap-mount-test image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 volumeMounts: - name: serverxml mountPath: /configfiles volumes: - name: serverxml configMap: name: cm-appconfigfiles items: - key: key-serverxml path: server.xml - key: key-loggingproperties path: logging.properties

[fxltest@master1 k8s_yaml]$ kubectl exec -it configmap-use-by-mount-pod1 -- ls /configfileslogging.properties server.xml#修改configmap文件cm-appconfigfiles.yaml后,重新替换资源,可修改pod挂载文件内容。kubectl replace -f cm-appconfigfiles.yaml

#如果在引用ConfigMap时不指定items,则使用volumeMount方式在容器内的目录下为每个item都生成一个文件名为key的文件。

apiVersion: v1kind: Podmetadata: name: configmap-use-by-mount-pod2spec: containers: - name: cm-configmap-mount-test2 image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 volumeMounts: - name: serverxml mountPath: /configfiles volumes: - name: serverxml configMap: name: cm-appconfigfiles

验证:进入容器,查看到在/configfiles目录下存在key-loggingproperties和 key-serverxml文件,文件的名称来自在ConfigMap cm-appconfigfiles中定 义的两个key的名称:

[fxltest@master1 k8s_yaml]$ kubectl exec -it configmap-use-by-mount-pod2 -- bashroot@configmap-use-by-mount-pod2:/usr/local/tomcat# ls /configfiles/key-loggingproperties key-serverxml

三、使用ConfigMap的限制条件

◎ ConfigMap必须在Pod之前创建。

◎ ConfigMap受Namespace限制,只有处于相同Namespace中的 Pod才可以引用它。 ◎ ConfigMap中的配额管理还未能实现。

◎ kubelet只支持可以被API Server管理的Pod使用ConfigMap。 kubelet在本Node上通过 --manifest-url或--config自动创建的静态Pod将无 法引用ConfigMap。

◎ 在Pod对ConfigMap进行挂载(volumeMount)操作时,在容器 内部只能挂载为“目录”,无法挂载为“文件”。在挂载到容器内部后,在 目录下将包含ConfigMap定义的每个item,如果在该目录下原来还有其 他文件,则容器内的该目录将被挂载的ConfigMap覆盖。如果应用程序 需要保留原来的其他文件,则需要进行额外的处理。可以将ConfigMap 挂载到容器内部的临时目录,再通过启动脚本将配置文件复制或者链接 到(cp或link命令)应用所用的实际配置目录下

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:玩转年轻化营销,奕炫家族“双星”上市就是这么酷盖!
下一篇:k8s-pod容器共享Volume
相关文章

 发表评论

暂时没有评论,来抢沙发吧~