如何在 Kubernetes 中正确使用 ConfigMap

阅读时长 8 分钟读完

在 Kubernetes 中,ConfigMap 是一种集中式管理应用程序配置信息的机制,可以将应用程序的配置信息从镜像中隔离出来,使得更容易在不同环境中进行部署和管理。在这篇文章中,我们将学习如何在 Kubernetes 中使用 ConfigMap。

创建 ConfigMap

首先,让我们创建一个 ConfigMap 对象。我们可以使用 kubectl create configmap 命令来创建一个 ConfigMap。以下是一个示例:

-- -------------------- ---- -------
----------- --
----- ---------
---------
  ----- ---------
  -------
    ---- ------
-----
  --------------- --
    -------
      ----- -------------
      ----- ----
    ---------
      ----- ----------------
      ----- ----
      --------- --------
      --------- ------------

在这个示例中,我们定义了一个名为 my-config 的 ConfigMap,它包含了一个名为 app_config.yml 的配置文件。你也可以使用 kubectl create configmap 命令来创建 ConfigMap。例如,以下命令将创建与上面 YAML 文件相同的 ConfigMap:

在应用程序中使用 ConfigMap

一旦我们有了一个 ConfigMap 对象,我们就可以在应用程序中使用这个对象。在 Kubernetes 应用程序中使用 ConfigMap 的方法有多种。以下是两种典型的方法:

方法一:作为环境变量

我们可以将 ConfigMap 中的配置数据转换为环境变量,并将其注入到容器中。

在 Kubernetes 的 Pod 定义中,我们可以将环境变量定义为以下格式:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ----------------
    ------ ------------
    ----
    - ----- -----------
      ----------
        ----------------
          ----- ---------
          ---- --------------
    - ----- -----------
      ----------
        ----------------
          ----- ---------
          ---- --------------

在这个示例中,我们使用 configMapKeyRef 指定了 ConfigMap 的名称与我们要引用的键。如果我们要使用 my-config ConfigMap 中的另一个键,我们只需要将 key 字段替换为相应的键即可。

方法二:作为卷

使用卷来挂载 ConfigMap 是另一种常见的方法。

在 Kubernetes 1.9 之前,我们可以使用如下的 Pod 定义来创建 ConfigMap 卷:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ----------------
    ------ ------------
    -------------
    - ----- -------------
      ---------- -----------
      --------- ----
  --------
  - ----- -------------
    ----------
      ----- ---------

在 Kubernetes 1.9 及以后的版本中,我们可以使用更加简洁的 YAML 格式:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ------
-----
  -----------
  - ----- ----------------
    ------ ------------
    -------------
    - ----- -------------
      ---------- -----------
      --------- ----
  --------
  - ----- -------------
    ----------
      ----- ---------
      ------
      - ---- --------------
        ----- --------------

更新 ConfigMap

如果我们需要更新 ConfigMap 中的配置信息,我们可以通过以下方法之一来更新它:

方法一:直接更新 ConfigMap 对象

我们可以使用 kubectl edit configmap 命令来编辑 ConfigMap 对象。例如,以下命令将打开 my-config ConfigMap 的编辑器:

在 my-config 编辑器中,我们可以直接编辑 ConfigMap 的数据。一旦保存更改,Kubernetes 会自动更新所有依赖于这个 ConfigMap 的 Pod。

方法二:使用 ConfigMap 配置控制器

Kubernetes 还提供了一个 ConfigMap 配置控制器,可以用于管理 ConfigMap 中的配置信息。使用该控制器可以轻松同步多个 ConfigMap,同时确保所有 Pod 都能得到正确的配置信息。

下面是一个使用 ConfigMap 配置控制器来更新 my-config ConfigMap 的示例:

-- -------------------- ---- -------
----------- --
----- ---------
---------
  ----- ---------
  -------
    ---- ------
-----
  --------------- --
    -------
      ----- -----------------
      ----- ----
    ---------
      ----- ----------------
      ----- ----
      --------- --------
      --------- ------------
---
----------- -------
----- ----------
---------
  ----- -----------------
-----
  --------- -
  ---------
    ---------
      -------
        ---- ------
    -----
      -----------
      - ----- ----------------
        ------ ------------
        ----
        - ----- -----------
          ----------
            ----------------
              ----- ---------
              ---- --------------
        - ----- -----------
          ----------
            ----------------
              ----- ---------
              ---- --------------
      --------
      - ----- -------------
        ----------
          ----- ---------
          ------
          - ---- --------------
            ----- --------------
---
----------- --
----- -------
---------
  ----- --------------
-----
  ------
  - ----- ----
    ----- --
  ---------
    ---- ------

在这个示例中,我们定义了一个名为 my-config 的 ConfigMap 对象,其中包含了新的配置信息。然后,我们定义了一个名为 my-app-deployment 的 Deployment 对象,它引用了 my-config ConfigMap,并创建了三个 Pod。最后,我们定义了一个名为 my-app-service 的 Service 对象,该服务将 Pod 中的应用程序暴露给集群内外的客户端。

当我们需要更新 my-config 的配置信息时,我们只需要更新 ConfigMap 对象,并使用 kubectl apply 命令将新的配置应用到 Deployment 和 Service。例如,以下命令将使用上面 YAML 文件中的代码来更新 my-config 对象:

这个命令将更新 ConfigMap 对象,然后 Kubernetes 自动更新与该 ConfigMap 相关联的 Deployment 和 Service。

总结

在使用 Kubernetes 管理应用程序时,ConfigMap 是一种重要的工具。ConfigMap 允许我们集中管理应用程序的配置信息,并确保这些配置信息在不同的环境中正确工作。在本文中,我们介绍了如何创建 ConfigMap 对象,并在应用程序中使用它。最后,我们还提供了一些关于更新 ConfigMap 的建议。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6485284a48841e9894412dbd

纠错
反馈