微信公众号搜索 DevOps和k8s全栈技术 ,即可关注,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~
前言
使用 ConfigMap 来将你的配置数据和应用程序代码分开。比如,假设你正在开发一个应用,它可以在你自己的电脑上(用于开发)和在云上(用于实际流量)运行。你的代码里有一段是用于查看环境变量 DATABASE_HOST
,在本地运行时,你将这个变量设置为 localhost
,在云上,你将其设置为引用 Kubernetes 集群中的公开数据库 Service 中的组件。这让你可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
ConfigMap 对象
ConfigMap 是一个 API 对象,让你可以存储其他对象所需要使用的配置。和其他 Kubernetes 对象都有一个 spec 不同的是,ConfigMap 使用 data 块来存储元素(键名)和它们的值。ConfigMap 的名字必须是一个合法的 DNS 子域名。
ConfigMaps 和 Pods
你可以写一个引用 ConfigMap 的 Pod 的 spec
,并根据 ConfigMap 中的数据在该 Pod 中配置容器。这个 Pod 和 ConfigMap 必须要在同一个 命名空间 中。这是一个 ConfigMap 的示例,它的一些键只有一个值,其他键的值看起来像是配置的片段格式。
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: demo
image: game.example/demo-game
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 不会区分单行属性值和多行类似文件的值,重要的是 Pods 和其他对象如何使用这些值。比如,定义一个卷,并将它作为 /config
文件夹安装到 demo
容器内,并创建四个文件:
-
/config/player_initial_lives
-
/config/ui_properties_file_name
-
/config/game.properties
-
/config/user-interface.properties
如果你要确保 /config
只包含带有 .properties
扩展名的文件,可以使用两个不同的 ConfigMaps,并在 spec
中同时引用这两个 ConfigMaps 来创建 Pod。第一个 ConfigMap 定义了 player_initial_lives
和 ui_properties_file_name
,第二个 ConfigMap 定义了 kubelet 放进 /config
的文件。
注意:ConfigMap 最常见的用法是为同一命名空间里某 Pod 中运行的容器执行配置。您也可以单独使用 ConfigMap。比如,您可能会遇到基于 ConfigMap 来调整其行为的 插件 或者 operator。
学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按如下方式进入技术交流群
微信公众号
长按指纹关注公众号????
您的关注是我的动力~~~