跳到主要内容

构建

2024年09月24日
柏拉文
越努力,越幸运

一、认识


Kubernetes ConfigMap 是一种 API 对象,用于存储非机密的配置信息。它允许将配置数据分离出容器镜像,从而使应用程序更加灵活和可移植。通过 ConfigMap,你可以以键值对的形式存储配置,并将其注入到 Pods 中,作为环境变量、命令行参数或文件。它的主要用途是使应用的配置独立于应用程序代码,方便在不同环境中管理和更新。

二、操作


2.1 编写 ConfigMap 配置文件

创建 configmap.yaml 配置文件,内容如下

apiVersion: v1
kind: ConfigMap
metadata:
name: config-map-data
namespace: default
data:
NAME: "bolawen"
AGE: "23"

2.2 创建 ConfigMap

你可以使用以下命令创建 ConfigMap

kubectl apply -f configmap.yaml

2.3 使用 ConfigMap

使用一、ConfigMapPod 注入变量: 可以将 ConfigMap 中的值作为环境变量注入到 Pod 中。以下是 Pod 的示例 YAML 文件:

apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
ports:
- containerPort: 80
env:
- name: NAME
valueFrom:
configMapKeyRef:
name: config-map-data
key: NAME
- name: AGE
valueFrom:
configMapKeyRef:
name: config-map-data
key: AGE
command: ["sh", "-c", "echo $NAME $AGE && nginx -g 'daemon off;'"]

三、场景


3.1 Web 应用程序

假设你有一个 Web 应用程序,在开发和生产环境中需要不同的配置。你可以使用两个 ConfigMap 来管理这些环境特定的配置。通过使用不同的 ConfigMap,你可以轻松地在开发和生产环境之间切换配置,而无需修改应用镜像。这种方法不仅提高了灵活性,还使得管理和维护应用配置变得更为高效。

1. 创建开发环境的 ConfigMap: 首先,创建一个用于开发环境的 ConfigMap,名为 dev-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: dev-config
data:
APP_MODE: "development"
LOG_LEVEL: "debug"

2. 然后使用以下命令创建 ConfigMap

kubectl apply -f dev-config.yaml

3. 创建生产环境的 ConfigMap: 接下来,创建一个用于生产环境的 ConfigMap,名为 prod-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: prod-config
data:
APP_MODE: "production"
LOG_LEVEL: "info"

4. 使用以下命令创建 ConfigMap

kubectl apply -f prod-config.yaml

5. 部署 Pod 使用 ConfigMap

当你部署应用时,可以选择使用不同的 ConfigMap。例如,在开发环境中,Pod 的定义如下:

apiVersion: v1
kind: Pod
metadata:
name: web-app-dev
spec:
containers:
- name: web-app
image: my-web-app
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: dev-config
key: APP_MODE
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: dev-config
key: LOG_LEVEL

在生产环境中,Pod 的定义则会使用生产 ConfigMap

apiVersion: v1
kind: Pod
metadata:
name: web-app-prod
spec:
containers:
- name: web-app
image: my-web-app
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: prod-config
key: APP_MODE
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: prod-config
key: LOG_LEVEL