Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
ConfigMap 是 configMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将您的环境配置信息和 容器镜像容器是可移植、可执行的轻量级的镜像,镜像中包含软件及其相关依赖。 解耦,便于应用配置的修改。当您需要储存机密信息时可以使用 Secret 对象。
警告:ConfigMap 并不提供保密或者加密功能。如果你想存储的数据是机密的,请使用 SecretSecret 用于存储敏感信息,如密码、OAuth 令牌和 SSH 密钥。 ,或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
使用 ConfigMap 来将你的配置数据和应用程序代码分开。
比如,假设你正在开发一个应用,它可以在你自己的电脑上(用于开发)和在云上(用于实际流量)运行。你的代码里有一段是用于查看环境变量 DATABASE_HOST
,在本地运行时,你将这个变量设置为 localhost
,在云上,你将其设置为引用 Kubernetes 集群中的公开数据库 Service将运行在一组 {{< glossary_tooltip text="Pods" term_id="pod" >}} 上的应用程序公开为网络服务的抽象方法。
中的组件。
这让您可以获取在云中运行的容器镜像,并且如果有需要的话,在本地调试完全相同的代码。
ConfigMap 是一个 API 对象,让你可以存储其他对象所需要使用的配置。和其他 Kubernetes 对象都有一个 spec
不同的是,ConfigMap 使用 data
块来存储元素(键名)和它们的值。
ConfigMap 的名字必须是一个合法的 DNS 子域名。
您可以写一个引用 ConfigMap 的 Pod 的 spec
,并根据 ConfigMap 中的数据在该 Pod 中配置容器。这个 Pod 和 ConfigMap 必须要在同一个 命名空间命名空间是 Kubernetes 为了在同一物理集群上支持多个虚拟集群而使用的一种抽象。
中。
这是一个 ConfigMap 的示例,它的一些键只有一个值,其他键的值看起来像是配置的片段格式。
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
您可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:
这些不同的方法适用于不同的数据使用方式。对前三个方法,kubelet一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。 使用 ConfigMap 中的数据在 Pod 中启动容器。
第四种方法意味着你必须编写代码才能读取 ConfigMap 和它的数据。然而,由于您是直接使用 Kubernetes API,因此只要 ConfigMap 发生更改,您的应用就能够通过订阅来获取更新,并且在这样的情况发生的时候做出反应。通过直接进入 Kubernetes API,这个技术也可以让你能够获取到不同的命名空间里的 ConfigMap。
这是一个 Pod 的示例,它通过使用 game-demo
中的值来配置一个 Pod:
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 来调整其行为的 插件Resources that extend the functionality of Kubernetes. 或者 operator一种用于管理自定义资源的专用控制器 。