跳到主要内容

构建

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

一、认识


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

二、作为环境变量


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

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

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

kubectl apply -f configmap.yaml

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;'"]

三、作为挂载文件


你有一个应用程序需要多个配置文件(如数据库配置、日志配置等)。你可以将这些文件存储为 ConfigMap,并在 Pod 中挂载它们:

apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
db-config.yaml: |
host: database.example.com
port: 5432
user: app_user
log-config.yaml: |
level: debug
path: /logs/app.log

Pod 中挂载这两个配置文件:

apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app-container
image: my-app-image
volumeMounts:
- name: config-volume
mountPath: /etc/app/config
volumes:
- name: config-volume
configMap:
name: app-config # 挂载 ConfigMap 中的所有文件

这样,Pod 中的 /etc/app/config 目录会包含 db-config.yamllog-config.yaml 配置文件,应用程序可以直接读取这些文件。