使用 ConfigMaps 管理配置
使用 ConfigMaps 将应用配置从容器镜像中分离出来。
使用 ConfigMaps 管理配置 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
ConfigMaps 简介
应用通常需要配置数据,例如数据库连接字符串或功能开关。
将这些信息直接硬编码到容器镜像中,会使镜像变得僵化且难以更新。
ConfigMaps 提供了一种将应用的非敏感配置外置并集中管理的方法,使镜像保持灵活。
什么是 ConfigMap?
ConfigMap 是 Kubernetes 对象,用于以键值对的形式存储非敏感数据。
您可以把它理解为集中存放应用设置的位置,Pod 可以访问其中的设置。
- 解耦配置:将配置与应用代码分离。
- 灵活性:无需重新构建镜像即可轻松更改设置。
- 可移植性:可以使用不同的配置将应用迁移到不同环境。
创建 ConfigMaps:命令式方式
您可以使用 kubectl create configmap 在命令行中直接快速创建 ConfigMap。
这种方法非常适合简单的一次性配置或快速测试。
让我们创建一个名为 my-app-config 的 ConfigMap,并设置日志级别。
kubectl create configmap my-app-config \
--from-literal=log_level=INFO检查您的 ConfigMap
创建 ConfigMap 后,您可以查看其详细信息并验证其中的内容。
将 kubectl get 与 -o yaml 标志结合使用,可以查看完整的 YAML 定义,包括其中存储的数据。
kubectl get configmap my-app-config -o yaml声明式 ConfigMap(YAML)
在生产环境和版本控制中,使用 YAML 清单定义 ConfigMaps 是标准做法。
这种方式可以让配置可重复创建,并便于与应用代码一起管理。
下面是一个游戏配置的 YAML 示例:
apiVersion: v1
kind: ConfigMap
metadata:
name: game-config
data:
game.properties: |
level=easy
player_limit=10
ui.properties: |
theme=dark
language=en从 YAML 应用 ConfigMap
要创建 game-config ConfigMap,请将上一场景中的 YAML 内容保存到文件中(例如 game-config.yaml)。
然后使用 kubectl apply -f 将其部署到集群中。
# Save the YAML to game-config.yaml
kubectl apply -f game-config.yaml
kubectl get configmap game-config -o yaml将 ConfigMaps 作为环境变量
Pod 使用 ConfigMap 数据的一种常见方式,是将数据注入为环境变量。
您可以指定要暴露的单个键,也可以使用 envFrom 暴露 ConfigMap 中的所有键值对。
这非常适合简单的应用设置。
apiVersion: v1
kind: Pod
metadata:
name: my-env-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Log Level: $LOG_LEVEL && sleep 3600"]
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-app-config
key: log_level演示:带有环境配置的 Pod
让我们运行 Pod 定义,查看 LOG_LEVEL 环境变量的实际效果。
将 Pod YAML 保存到 env-pod.yaml,应用它,然后检查 Pod 的日志。
# Save Pod YAML to env-pod.yaml
kubectl apply -f env-pod.yaml
kubectl logs my-env-pod
# Clean up
kubeclt delete pod my-env-pod将 ConfigMaps 作为挂载卷
对于需要配置文件的应用(例如 nginx.conf、application.properties),您可以将 ConfigMap 挂载为卷。
ConfigMap 中的每个键值对都会在容器内指定的挂载路径中成为一个文件。
apiVersion: v1
kind: Pod
metadata:
name: my-volume-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Contents of game.properties:' && cat /etc/config/game.properties && sleep 3600"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: game-config演示:带有挂载配置的 Pod
现在,让我们部署一个 Pod,将 game-config ConfigMap 作为卷挂载。
将 Pod YAML 保存到 volume-pod.yaml,应用它,然后检查日志以查看所挂载文件的内容。
# Save Pod YAML to volume-pod.yaml
kubectl apply -f volume-pod.yaml
kubectl logs my-volume-pod
# Clean up
kubeclt delete pod my-volume-pod快速检查:ConfigMaps
关于 Kubernetes ConfigMaps,以下哪项说法是正确的?
回顾:ConfigMaps
做得很好!您已经了解了 ConfigMaps 如何帮助管理 Kubernetes 中的配置:
- 用途:以键值对的形式存储非敏感配置数据。
- 创建:可以使用
kubectl create以命令式方式创建,也可以使用 YAML 以声明式方式创建。 - 使用:作为环境变量,或作为 Pod 中挂载的文件。
- 优势:将配置与应用代码解耦,增强灵活性。
接下来,我们将学习如何使用 Kubernetes Secrets 安全地处理敏感信息!
常见问题解答
「使用 ConfigMaps 管理配置」课时是免费的吗?
是的 — 「使用 ConfigMaps 管理配置」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「使用 ConfigMaps 管理配置」这节课中我会学到什么?
使用 ConfigMaps 将应用配置从容器镜像中分离出来。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 ConfigMaps 管理配置」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 ConfigMaps 管理配置
- 用于敏感数据的密钥
- 持久卷与持久卷声明
- StorageClasses 与动态供给