在现代容器化应用程序的开发和部署过程中,环境变量扮演着重要的角色。它们能够为应用程序提供灵活性和可配置性,使我们能够轻松地针对不同的环境(如开发、测试和生产)进行调整。
当您将应用程序部署在 Kubernetes 集群上时,您可以在 Kubernetes 资源定义中声明环境变量,并让您的 Python 应用程序访问这些变量。
在 Kubernetes 中定义环境变量
让我们来看一个示例,演示如何在 Kubernetes 中定义环境变量,并在 Python 代码中使用它们。
首先,让我们看一下 Kubernetes 部署清单中的环境变量定义:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-image-ai
namespace: default
spec:
template:
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/name: test-image-ai
spec:
containers:
- name: test-image-ai
image: 820600610568.dkr.ecr.us-east-1.amazonaws.com/ai/image:20240509070645
imagePullPolicy: IfNotPresent
command:
- python3
- run.py
env:
- name: ENV_NAME
value: "test"
在此 Kubernetes 部署清单中,我们定义了一个名为 ENV_NAME
的环境变量,并将其值设置为 "test"
。这个环境变量将在容器启动时注入到 Python 应用程序中。
在 Python 中使用环境变量
现在让我们看看如何在 Python 代码中使用这个环境变量:
import os
# 获取环境变量的值
env_name = os.getenv("ENV_NAME", "dev")
print(f"Environment name: {env_name}")
在此 Python 代码中,我们使用 os.getenv()
函数来获取环境变量 ENV_NAME
的值。如果环境变量不存在,我们将使用默认值 "dev"
。
最后,我们打印出环境变量的值,以确认它已被正确地读取。
在 Kubernetes 中部署应用程序
当您在 Kubernetes 中部署这个 Python 应用程序时,它将使用 Kubernetes 中定义的环境变量 ENV_NAME
的值。如果环境变量不存在,则使用默认值 "dev"
。
您可以根据需要,在 Python 代码中使用这个环境变量来执行不同的逻辑,例如:
- 根据环境切换不同的配置
- 调用不同的 API 或服务
- 记录不同的日志消息
import os
import logging
# 获取环境变量的值
env_name = os.getenv("ENV_NAME", "dev")
# 根据环境切换不同的配置
if env_name == "dev":
config = {
"database_url": "mongodb://dev-db:27017/myapp",
"log_level": logging.DEBUG
}
elif env_name == "prod":
config = {
"database_url": "mongodb://prod-db:27017/myapp",
"log_level": logging.INFO
}
else:
config = {
"database_url": "mongodb://localhost:27017/myapp",
"log_level": logging.WARNING
}
# 根据配置设置日志级别
logging.basicConfig(level=config["log_level"])
# 根据环境调用不同的 API 或服务
if env_name == "dev":
from dev_apis import get_data
data = get_data()
elif env_name == "prod":
from prod_apis import get_data
data = get_data()
else:
from local_apis import get_data
data = get_data()
# 根据环境记录不同的日志消息
logging.info(f"Fetched data: {data}")
logging.debug(f"Environment name: {env_name}")
这样可以使您的应用程序更加灵活和可配置。
通过将环境变量定义为 Kubernetes 资源的一部分,并在 Python 代码中使用它们,您可以轻松地管理应用程序的环境依赖关系,并确保应用程序在不同的环境中正常运行。