使用 ConfigMap 配置应用程序

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何在 Kubernetes 中使用 ConfigMaps 来配置你的应用程序。ConfigMaps 提供了一种将配置数据与应用程序代码分离的方式,使得在不修改应用程序本身的情况下,轻松管理和更新应用程序配置成为可能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedDeploymentGroup(["`Advanced Deployment`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("`Edit`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/rollout("`Rollout`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") subgraph Lab Skills kubernetes/initialization -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/get -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/create -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/edit -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/apply -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/rollout -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/describe -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} kubernetes/exec -.-> lab-9689{{"`使用 ConfigMap 配置应用程序`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 来重置环境(如有需要)。

创建 ConfigMap

在本步骤中,你将创建一个包含应用程序配置数据的 ConfigMap。

/home/labex/project/ 目录下创建一个名为 configmap.yaml 的文件,内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  DATABASE_URL: postgres://user:password@host:port/dbname

此 ConfigMap 包含一个键值对,其中键为 DATABASE_URL,值为 PostgreSQL 数据库连接字符串。

要创建 ConfigMap,请运行以下命令:

kubectl apply -f configmap.yaml

在应用程序中使用 ConfigMap

在本步骤中,你将在应用程序中使用 ConfigMap。

/home/labex/project/ 目录下创建一个名为 deployment.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_URL
              valueFrom:
                configMapKeyRef:
                  name: my-config
                  key: DATABASE_URL

此部署指定了一个运行应用程序的容器,该容器使用 DATABASE_URL 环境变量连接到 PostgreSQL 数据库。DATABASE_URL 的值从 my-config ConfigMap 中获取。

要创建部署,请运行以下命令:

kubectl apply -f deployment.yaml

验证配置

在本步骤中,你将验证配置是否已应用到你的应用程序中。

首先,通过运行以下命令查找运行应用程序的 Pod 名称:

kubectl get pods -l app=my-app

你应该会看到一个运行应用程序的 Pod。记下该 Pod 的名称。

接下来,运行以下命令以在运行应用程序的容器中打开一个 shell 会话:

kubectl exec -it pod-name -- /bin/sh

<pod-name> 替换为你之前记下的 Pod 名称。

进入 shell 会话后,运行以下命令以打印 DATABASE_URL 环境变量的值:

echo $DATABASE_URL

你应该会看到在 ConfigMap 中设置的数据库连接字符串。

更新 ConfigMap

在本步骤中,你将更新 ConfigMap 并观察其对应用程序的影响。

更新 configmap.yaml 文件中的 DATABASE_URL 键值为新值:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  DATABASE_URL: postgres://newuser:newpassword@newhost:newport/newdbname

这将 DATABASE_URL 键更新为一个新值。

要更新 ConfigMap,请运行以下命令:

kubectl apply -f configmap.yaml

验证更新

在本步骤中,你将验证 ConfigMap 的更新是否已应用到你的应用程序中。

首先,通过运行以下命令查找运行应用程序的 Pod 名称:

kubectl get pods -l app=my-app

你应该会看到一个运行应用程序的 Pod。记下该 Pod 的名称。

接下来,运行以下命令以在运行应用程序的容器中打开一个 shell 会话:

kubectl exec -it pod-name -- /bin/sh

<pod-name> 替换为你之前记下的 Pod 名称。

进入 shell 会话后,运行以下命令以打印 DATABASE_URL 环境变量的值:

echo $DATABASE_URL

你会发现配置并未生效,仍然是之前的数据。你需要通过以下命令重启 Deployment:

kubectl rollout restart deployment my-app

当重启完成后,再次进入容器并使用上述命令检查配置。

你应该会看到更新后的数据库连接字符串。

总结

在本实验中,你学习了如何在 Kubernetes 中使用 ConfigMaps 来配置你的应用程序。你创建了一个包含配置数据的 ConfigMap,在应用程序中使用了该 ConfigMap,并更新了 ConfigMap 以观察其对应用程序的影响。你还学习了如何验证配置是否已应用到应用程序中,以及如何清理实验中创建的资源。

您可能感兴趣的其他 Kubernetes 教程