1. 使用环境变量

环境变量是在容器运行环境中设定的一个变量,它为应用程序提供了极大的灵活性。通过环境变量,可以在不修改应用程序代码的前提下动态调整其行为,容器在运行时会读取这些环境变量的值。

使用环境变量的具体方式

在Kubernetes的Pod中,可以通过spec.containers.env字段来配置环境变量。例如,以下示例中为名为nginx的容器配置了一个环境变量env_key,其值为env_value

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
    env:                        # 环境变量
    - name: env_key
      value: env_value
    imagePullSecrets:
    - name: default-secret       # 拉取镜像使用的凭证

查看容器中的环境变量

在Pod创建后,可以通过以下命令查看容器中的环境变量,验证是否正确配置:

kubectl exec -it nginx -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx
env_key=env_value

2.使用ConfigMap管理配置

ConfigMap 是Kubernetes中的一种资源,用于存储键值对形式的配置信息。它的主要用途是将应用程序的配置信息从容器镜像中解耦出来,这样可以在不同的环境中复用相同的应用镜像,而仅需修改配置信息。

创建ConfigMap

以下是一个创建ConfigMap的示例,名为configmap-test,其中包含两个配置信息property_1property_2

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-test
data:                        # 配置数据
  property_1: Hello
  property_2: World

在环境变量中引用ConfigMap

可以在Pod的环境变量中直接引用ConfigMap的键值。以下是一个引用configmap-test中的property_1作为环境变量的示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
    env:                        # 环境变量
    - name: EXAMPLE_PROPERTY_1
      valueFrom:
        configMapKeyRef:         # 引用ConfigMap
          name: configmap-test
          key: property_1
    imagePullSecrets:
    - name: default-secret

在这个示例中,EXAMPLE_PROPERTY_1的值将会是Hello,它来自于configmap-test中的property_1键。

在Volume中引用ConfigMap

除了通过环境变量引用ConfigMap,还可以将ConfigMap以Volume的形式挂载到容器中,每个键将作为文件名,每个键对应的值将作为文件内容。以下是一个示例,将ConfigMap挂载到/tmp目录下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
    resources:
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
    volumeMounts:                # 挂载卷
    - name: vol-configmap
      mountPath: "/tmp"
    imagePullSecrets:
    - name: default-secret
  volumes:
  - name: vol-configmap          # 定义卷
    configMap:
      name: configmap-test       # 引用ConfigMap

在容器启动后,/tmp目录下将会有两个文件:property_1property_2,它们的内容分别为HelloWorld

详细举例

有一个Web应用程序,应用程序需要从环境变量中读取数据库连接信息,例如数据库主机地址、端口、用户名和密码等。为了实现这个需求,我们会使用Kubernetes的ConfigMap来管理这些配置信息,并通过环境变量将这些信息注入到容器中。

1. 创建ConfigMap存储数据库配置信息

首先,我们创建一个ConfigMap来存储Web应用程序所需的数据库配置信息。ConfigMap包含数据库主机地址、端口号、用户名和密码。

apiVersion: v1
kind: ConfigMap
metadata:
  name: db-config                # ConfigMap名称
data:
  DB_HOST: "db.example.com"       # 数据库主机地址
  DB_PORT: "5432"                 # 数据库端口
  DB_USER: "admin"                # 数据库用户名
  DB_PASSWORD: "password123"      # 数据库密码

这个ConfigMap名为db-config,它存储了数据库连接所需的四个关键配置信息:主机地址(DB_HOST)、端口(DB_PORT)、用户名(DB_USER)和密码(DB_PASSWORD)。

2. 创建Pod并通过环境变量引用ConfigMap

接下来,创建一个Pod,该Pod中的容器运行Web应用程序,并通过环境变量将ConfigMap中的数据库配置信息注入到容器中。

apiVersion: v1
kind: Pod
metadata:
  name: web-app-pod              # Pod的名称
spec:
  containers:
  - name: web-app-container      # 容器的名称
    image: nginx:alpine          # 使用nginx:alpine镜像
    env:                         # 配置环境变量
    - name: DB_HOST
      valueFrom:
        configMapKeyRef:
          name: db-config        # 引用ConfigMap db-config
          key: DB_HOST           # 获取DB_HOST的值
    - name: DB_PORT
      valueFrom:
        configMapKeyRef:
          name: db-config
          key: DB_PORT           # 获取DB_PORT的值
    - name: DB_USER
      valueFrom:
        configMapKeyRef:
          name: db-config
          key: DB_USER           # 获取DB_USER的值
    - name: DB_PASSWORD
      valueFrom:
        configMapKeyRef:
          name: db-config
          key: DB_PASSWORD       # 获取DB_PASSWORD的值
    ports:
    - containerPort: 80          # 暴露容器端口

在这个Pod的配置中,容器通过env字段定义了四个环境变量,分别对应数据库的主机地址、端口号、用户名和密码。每个环境变量都通过configMapKeyRef字段引用了db-config中的键值对。

3. 检查Pod中环境变量的值

Pod创建成功后,可以通过以下命令进入容器并查看环境变量的值,以确保ConfigMap中的配置信息已经正确注入到容器中。

kubectl exec -it web-app-pod -- env

运行该命令后,将会看到以下输出:

DB_HOST=db.example.com
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=password123

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。

学习成功人士的经验,提供全面的学习资源和社群支持,多种副业选择,总有一个适合你。

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝