Kubernetes 中容器如何使用环境变量?

阅读时长 5 分钟读完

Kubernetes 是一种用于管理容器化应用程序的开源容器编排工具。在构建分布式应用程序时,使用环境变量是一种常见的技术。在本文中,我们将讨论 Kubernetes 中容器如何使用环境变量,并提供实用的示例代码和指导意义。

环境变量的优点

使用环境变量的主要优点是,它们使您能够轻松地配置应用程序的行为,而无需重新构建代码或重新打包容器。例如,您可以通过环境变量来配置应用程序连接数据库的主机名或端口号,或者指定应用程序的日志级别或调试模式。

Kubernetes 中容器使用的环境变量可以通过以下三种方式设置:

  • 通过容器的命令行参数
  • 通过 Kubernetes 的环境变量配置
  • 通过 Kubernetes 的 ConfigMap 和 Secret 对象

通过容器的命令行参数设置环境变量

您可以通过容器的命令行参数设置环境变量,这些参数以 --env-e 标志的形式传递给容器。以下示例演示了如何使用 Docker 命令行参数来设置环境变量:

在 Kubernetes 中,您可以通过以下 pod 定义文件中的 spec.containers[].env[] 字段设置容器的环境变量:

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

在这个例子中,我们为容器设置了 MYSQL_PASSWORD 环境变量,并将其值设置为 "my-secret-pw"。我们还可以通过valueFrom 将环境变量的值从 ConfigMap 或 Secret 中引用。

通过 Kubernetes 的环境变量配置

除了通过容器的命令行参数设置环境变量外,您还可以使用 Kubernetes 的 env 属性配置全局的环境变量,并在所有容器中使用。

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

在这个 YAML 文件中,我们定义了一个名为 ENVIRONMENT 的全局环境变量,并在 pod 中的所有容器中都使用它。在这里,my-container1my-container2 中的所有进程都可以使用 ENVIRONMENT 变量。

通过 Kubernetes 的 ConfigMap 和 Secret 对象

Kubernetes 允许您存储和管理配置文件和机密信息,这些信息可以在环境变量中使用。ConfigMap 对象用于存储配置文件,而 Secret 对象用于存储机密信息。在 Kubernetes 中,您可以在 pod 定义文件或 Deployment 的模板中引用 ConfigMap 和 Secret 对象,并在容器中使用环境变量。

以下示例演示了如何在 Kubernetes 中使用 ConfigMap 和 Secret 对象:

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

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

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

在这个例子中,我们定义了一个名为 my-config 的 ConfigMap,并将 database.urllogging.level 的值分别设置为 my-database-urlERROR。我们还定义了一个名为 my-secret 的 Secret,并将 usernamepassword 的值设置为 BASE64 编码后的值。

my-pod 中,我们通过 valueFrom 引用了 DATABASE_URLLOGGING_LEVELDB_USERNAMEDB_PASSWORD 环境变量,并分别从 ConfigMap 和 Secret 对象中获取它们的值。

结论

在本文中,我们深入探讨了 Kubernetes 中容器如何使用环境变量。我们讨论了三种设置环境变量的方式,并提供了示例代码。通过使用环境变量,您可以轻松地配置和管理分布式应用程序的行为,而无需重新构建代码或重新打包容器。如果您还没有使用环境变量来管理应用程序,请考虑开始使用它们,以提高您的应用程序的灵活性和生产力。

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

纠错
反馈