背景信息
在Pod中使用配置项是一种实现配置管理的常用方式,它可以应用于多种场景,主要包括以下几个方面:
- 应用程序配置:配置项可以存储应用程序所需的所有配置信息,例如数据库连接信息、密钥、证书等。这可以使得应用程序在部署时更加简单和灵活,开发人员可以使用配置项来控制应用程序的行为。
- 环境变量:通过配置项创建的环境变量可以直接注入到容器中,例如在容器中设置数据库的连接信息等环境变量。
- 命令行参数:通过配置项定义命令行参数可以使得容器镜像更加通用,可以使用不同的参数启动不同的容器实例。
- 挂载文件:配置项还可以将配置文件存储在其中,并将其挂载到容器内部。这使得容器可以在运行时动态加载配置文件,以更好地适应不同的部署场景。
使用限制
当您在Pod中使用配置项时,为了确保配置项在Pod内正确加载和使用,需要将它们部署到相同的命名空间中。
创建配置项
本次示例配置项configmap-demo包含DATABASE_URL和LOG_LEVEL两个键值对。具体的YAML示例模板如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-demo
namespace: default
data:
DATABASE_URL: mysql://user:password@hostname/dbname
API_SECRET: big_secret_key
LOG_LEVEL: debug
使用配置项定义Pod环境变量
- 使用配置项的数据定义Pod环境变量。
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群”。
- 在集群列表页面中,点击目标集群的名称进入集群详情页面。
- 点击左侧导航栏中的“工作负载 ”,并选择“无状态” 。
- 在无状态页面中,单击左上角的“新增YAML”。
- 填写无状态应用对应的YAML配置内容,并使用valueFrom引用配置项中的Value值,从而定义Pod的环境变量。
下面是一个编排示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
labels:
app: busybox
name: busybox
source: SCE
spec:
replicas: 3
selector:
matchLabels:
app: busybox
name: busybox
template:
metadata:
labels:
app: busybox
name: busybox
source: SCE
spec:
containers:
- name: busybox
image: busybox:latest
ports:
- containerPort: 8080
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: configmap-demo
key: DATABASE_URL
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: configmap-demo
key: LOG_LEVEL
- 将配置项的所有Key/Values配置为Pod的环境变量。
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群 ”。
- 在集群列表页面中,点击目标集群的名称进入集群详情页面。
- 点击左侧导航栏中的“工作负载” ,并选择“无状态”。
- 在无状态页面中,单击左上角的“新增YAML” 。
- 填写无状态应用相应的YAML配置内容,并使用envFrom将配置项的所有Key/Values键值对配置为Pod的环境变量。
下面是一个编排示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
labels:
app: busybox
name: busybox
source: SCE
spec:
replicas: 3
selector:
matchLabels:
app: busybox
name: busybox
template:
metadata:
labels:
app: busybox
name: busybox
source: SCE
spec:
containers:
- name: busybox
image: busybox:latest
envFrom:
- configMapRef:
name: configmap-demo
-
通过配置项设置命令行参数。
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群 ”。
- 在集群列表页面中,点击目标集群的名称进入集群详情页面。
- 点击左侧导航栏中的“工作负载” ,并选择“无状态”。
- 在无状态页面中,单击左上角的“新增YAML” 。
- 填写无状态应用相应的YAML配置内容,您可以使用环境变量替换语法 $(VAR_NAME),将配置项设置为容器中的命令或参数值。
下面是一个编排示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
labels:
app: busybox
name: busybox
source: SCE
spec:
replicas: 3
selector:
matchLabels:
app: busybox
name: busybox
template:
metadata:
labels:
app: busybox
name: busybox
source: SCE
spec:
containers:
- name: busybox
image: busybox:latest
command: [ "/bin/sh", "-c", "echo $(DATABASE_URL) $(LOG_LEVEL)" ]
envFrom:
- configMapRef:
name: configmap-demo
在数据卷中使用配置项
- 登录云容器引擎控制台。
- 在控制台的左侧导航栏中点击“集群 ”。
- 在集群列表页面中,点击目标集群的名称进入集群详情页面。
- 点击左侧导航栏中的“工作负载” ,并选择“无状态”。
- 在无状态页面中,单击左上角的“新增YAML”。
- 您可以在数据卷中引用配置项。在 volumes中指定要使用的配置项名称,并设置挂载路径 mountPath。配置项中的键值对数据将被存储在指定的挂载路径下(例如 /etc/config),每个键值对作为一个文件,文件名是键的名称,文件内容是该键的值。
下面是一个编排示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: busybox
namespace: default
labels:
app: busybox
name: busybox
source: SCE
spec:
replicas: 3
selector:
matchLabels:
app: busybox
name: busybox
template:
metadata:
labels:
app: busybox
name: busybox
source: SCE
spec:
volumes:
- name: config-volume
configMap:
name: configmap-demo
containers:
- name: busybox
image: busybox:latest
volumeMounts:
- name: config-volume
mountPath: /etc/config