K8S 设定容器环境变量

Kubernetes(简称 K8S)是一个用于自动部署、扩展和管理容器化应用程序的开源平台。在 K8S 中,我们可以轻松地设置容器环境变量,以便在应用程序中动态地加载配置信息,提高灵活性和可扩展性。本文将为你介绍如何在 K8S 中设定容器环境变量,以及相关的代码示例。

### 一、设定容器环境变量的流程

在 K8S 中,设定容器环境变量的流程如下所示:

| 步骤 | 动作 |
| ---- | ---- |
| 1 | 创建一个包含环境变量的 ConfigMap 对象 |
| 2 | 将 ConfigMap 对象与 Pod 关联起来 |
| 3 | 在容器中引用环境变量 |

接下来,我们将详细介绍每一步需要做什么,并提供相应的代码示例。

### 二、创建包含环境变量的 ConfigMap 对象

ConfigMap 是 K8S 中用于存储非敏感数据的对象,我们可以将环境变量存储在 ConfigMap 中,之后再将其挂载到 Pod 中。

首先,我们需要创建一个包含环境变量的 ConfigMap 对象。以下是一个示例 ConfigMap 的 yaml 文件(configmap.yaml):

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
ENV_VAR_ONE: "value1"
ENV_VAR_TWO: "value2"
```

上述 ConfigMap 对象中定义了两个环境变量 `ENV_VAR_ONE` 和 `ENV_VAR_TWO`,它们的值分别为 `"value1"` 和 `"value2"`。你可以根据实际需求添加更多的环境变量。

使用以下命令来创建 ConfigMap 对象:

```shell
kubectl apply -f configmap.yaml
```

这样,我们就成功创建了一个名为 `my-configmap` 的 ConfigMap 对象,并在其中定义了两个环境变量。

### 三、将 ConfigMap 对象与 Pod 关联起来

接下来,我们需要将 ConfigMap 对象与 Pod 关联起来,以便在容器中使用这些环境变量。

以下是一个示例 Pod 的 yaml 文件(pod.yaml),展示了如何将 ConfigMap 对象挂载到 Pod 中:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: my-configmap
```

上述 Pod 中的 `envFrom` 字段表示从 ConfigMap 中获取环境变量,并将其传递给容器。这样,我们就将 ConfigMap 对象 `my-configmap` 关联到了 Pod `my-pod`。

使用以下命令来创建 Pod 对象:

```shell
kubectl apply -f pod.yaml
```

此时,我们已经将 ConfigMap 对象与 Pod 关联起来了。

### 四、在容器中引用环境变量

最后一步是在容器中引用环境变量。在容器中,我们可以通过环境变量的名称访问其对应的值。

以下是一个示例应用程序(app.py),展示了如何在 Python 应用程序中读取环境变量:

```python
import os

env_var_one = os.environ.get('ENV_VAR_ONE')
env_var_two = os.environ.get('ENV_VAR_TWO')

print(env_var_one)
print(env_var_two)
```

上述示例应用程序通过 `os.environ.get()` 方法从环境变量中获取 `ENV_VAR_ONE` 和 `ENV_VAR_TWO` 的值,并进行打印输出。

使用以下命令来在容器中执行应用程序:

```shell
python app.py
```

在控制台中,你将看到环境变量的值被输出。

### 总结

通过上述流程,我们可以在 K8S 中设定容器环境变量。首先,我们创建了一个包含环境变量的 ConfigMap 对象,并将其与 Pod 关联起来。然后,在容器中引用环境变量的值。这样,我们就可以轻松地在应用程序中动态地加载配置信息。希望本文对你理解和使用 K8S 设定容器环境变量有所帮助。