Kubernetes 是一种用于管理容器化应用程序的开源容器编排工具。在构建分布式应用程序时,使用环境变量是一种常见的技术。在本文中,我们将讨论 Kubernetes 中容器如何使用环境变量,并提供实用的示例代码和指导意义。
环境变量的优点
使用环境变量的主要优点是,它们使您能够轻松地配置应用程序的行为,而无需重新构建代码或重新打包容器。例如,您可以通过环境变量来配置应用程序连接数据库的主机名或端口号,或者指定应用程序的日志级别或调试模式。
Kubernetes 中容器使用的环境变量可以通过以下三种方式设置:
- 通过容器的命令行参数
- 通过 Kubernetes 的环境变量配置
- 通过 Kubernetes 的 ConfigMap 和 Secret 对象
通过容器的命令行参数设置环境变量
您可以通过容器的命令行参数设置环境变量,这些参数以 --env
或 -e
标志的形式传递给容器。以下示例演示了如何使用 Docker 命令行参数来设置环境变量:
docker run -e MYSQL_PASSWORD=my-secret-pw mysql
在 Kubernetes 中,您可以通过以下 pod
定义文件中的 spec.containers[].env[]
字段设置容器的环境变量:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- -------------- ------ --------------
在这个例子中,我们为容器设置了 MYSQL_PASSWORD
环境变量,并将其值设置为 "my-secret-pw"
。我们还可以通过valueFrom
将环境变量的值从 ConfigMap 或 Secret 中引用。
通过 Kubernetes 的环境变量配置
除了通过容器的命令行参数设置环境变量外,您还可以使用 Kubernetes 的 env
属性配置全局的环境变量,并在所有容器中使用。
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------- ------ --------- - ----- ------------- ------ --------- ---- - ----- ----------- ------ ---
在这个 YAML 文件中,我们定义了一个名为 ENVIRONMENT
的全局环境变量,并在 pod 中的所有容器中都使用它。在这里,my-container1
和 my-container2
中的所有进程都可以使用 ENVIRONMENT
变量。
通过 Kubernetes 的 ConfigMap 和 Secret 对象
Kubernetes 允许您存储和管理配置文件和机密信息,这些信息可以在环境变量中使用。ConfigMap 对象用于存储配置文件,而 Secret 对象用于存储机密信息。在 Kubernetes 中,您可以在 pod
定义文件或 Deployment
的模板中引用 ConfigMap 和 Secret 对象,并在容器中使用环境变量。
以下示例演示了如何在 Kubernetes 中使用 ConfigMap 和 Secret 对象:
-- -------------------- ---- ------- ----------- -- ----- --------- --------- ----- --------- ----- ------------- --------------- -------------- ----- ----------- -- ----- ------ --------- ----- --------- ----- ------ ----- --------- -------- - -------- --------- ------------ - -------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- ------------ ---------- ---------------- ----- --------- ---- ------------ - ----- ------------- ---------- ---------------- ----- --------- ---- ------------- - ----- ----------- ---------- ------------- ----- --------- ---- -------- - ----- ----------- ---------- ------------- ----- --------- ---- --------
在这个例子中,我们定义了一个名为 my-config
的 ConfigMap,并将 database.url
和 logging.level
的值分别设置为 my-database-url
和 ERROR
。我们还定义了一个名为 my-secret
的 Secret,并将 username
和 password
的值设置为 BASE64 编码后的值。
在 my-pod
中,我们通过 valueFrom
引用了 DATABASE_URL
、LOGGING_LEVEL
、DB_USERNAME
和 DB_PASSWORD
环境变量,并分别从 ConfigMap 和 Secret 对象中获取它们的值。
结论
在本文中,我们深入探讨了 Kubernetes 中容器如何使用环境变量。我们讨论了三种设置环境变量的方式,并提供了示例代码。通过使用环境变量,您可以轻松地配置和管理分布式应用程序的行为,而无需重新构建代码或重新打包容器。如果您还没有使用环境变量来管理应用程序,请考虑开始使用它们,以提高您的应用程序的灵活性和生产力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f4da78c5c563ced565f877