什么是 Kubernetes ConfigMap?

ConfigMap 是 Kubernetes 中用来存储配置数据的对象。它可以被用来保存单个属性,也可以用来保存整个配置文件或 JSON 二进制大对象。

ConfigMap 有以下主要用途:

  1. 设置环境变量:可以将 ConfigMap 中的键值对设置为 Pod 中的环境变量。
  2. 配置文件:可以将 ConfigMap 用作卷中的配置文件。
  3. 设置命令行参数:可以在 Pod 的命令行中使用 ConfigMap。

例如,我们可以创建一个 ConfigMap 来配置 Nginx 的默认首页:

yaml
apiVersion: v1
kind: ConfigMap 
metadata:
  name: nginx-config
data:
  index.html: |
    <h1>Hello from ConfigMap!</h1>

然后在 Nginx Pod 中使用这个 ConfigMap:

yaml
apiVersion: v1 
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: config-volume
      mountPath: /usr/share/nginx/html
  volumes:
  - name: config-volume
    configMap:
      name: nginx-config 

这里我们将 ConfigMap 挂载为 Pod 的卷,然后将 Nginx 容器的默认首页目录挂载到这个卷上。这样 Nginx 就会使用 ConfigMap 中的 index.html 作为默认页了。

我们也可以将 ConfigMap 用作环境变量:

yaml
apiVersion: v1 
kind: Pod
metadata: 
  name: env-example
spec:
  containers:
  - name: env-example
    image: busybox
    command: [ "sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
    env:
    - name: SPECIAL_LEVEL_KEY
      valueFrom:
        configMapKeyRef:
          name: special-config
          key: SPECIAL_LEVEL
    - name: SPECIAL_TYPE_KEY
      valueFrom:
        configMapKeyRef:
          name: special-config
          key: SPECIAL_TYPE

这里我们从名为 special-config 的 ConfigMap 中获取 SPECIAL_LEVEL 和 SPECIAL_TYPE 这两个键,并设置为 Pod 中的环境变量。

所以总结来说,ConfigMap 有以下主要用途:

  1. 设置环境变量:可以将 ConfigMap 中的键值对设置为 Pod 环境变量。
  2. 配置文件:可以将 ConfigMap 作为卷中的配置文件使用。
  3. 设置命令行参数:可以在 Pod 的命令行中使用 ConfigMap。