0Pricing
DevOps Bootcamp · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 ConfigMaps 管理配置
  2. 用于敏感数据的密钥
  3. 持久卷与持久卷声明
  4. StorageClasses 与动态供给
← 返回 DevOps Bootcamp