k8s
Configmap基础

Configmap基础

作为环境变量

apiVersion: v1
kind: Pod
metadata:
  name: pod-env-config-demo
spec:
  containers:
  - name: demo-container
    image: busybox
    command: ["/bin/sh", "-c", "env | grep APP_ && sleep 3600"]  # 打印环境变量并休眠
    env:
      # 单个环境变量:直接引用 ConfigMap 的某个键值对
      - name: APP_ENV  # 容器内的环境变量名
        valueFrom:
          configMapKeyRef:
            name: app-yaml-config  # 引用的 ConfigMap 名称
            key: app.env  # 引用的 ConfigMap 中的键
      - name: APP_VERSION  # 另一个环境变量
        valueFrom:
          configMapKeyRef:
            name: app-yaml-config
            key: app.version
    # (可选)批量注入环境变量:将 ConfigMap 所有键值对作为环境变量注入
    envFrom:
    - configMapRef:
        name: app-simple-config  # 引用的 ConfigMap 名称(方式 1 创建的)
  restartPolicy: Never

作为命令行参数(通过环境变量中转)

apiVersion: v1
kind: Pod
metadata:
  name: pod-command-config-demo
spec:
  containers:
  - name: demo-container
    image: busybox
    # 命令行参数引用环境变量(环境变量来自 ConfigMap)
    command: ["/bin/sh", "-c", "echo '当前环境:$(APP_ENV),版本:$(APP_VERSION)' && sleep 3600"]
    env:
      - name: APP_ENV
        valueFrom:
          configMapKeyRef:
            name: app-yaml-config
            key: app.env
      - name: APP_VERSION
        valueFrom:
          configMapKeyRef:
            name: app-yaml-config
            key: app.version
  restartPolicy: Never

挂载为目录(支持热更新)

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-dir-config-demo
spec:
  containers:
  - name: demo-container
    image: busybox
    command: ["/bin/sh", "-c", "ls /app/config && cat /app/config/app.conf && sleep 3600"]
    volumeMounts:
    - name: config-volume  # 与 volumes 中定义的卷名对应
      mountPath: /app/config  # 容器内的挂载目录(该目录下原有文件会被覆盖)
  volumes:
  - name: config-volume  # 定义卷名称
    configMap:
      name: app-yaml-config  # 引用的 ConfigMap 名称
  restartPolicy: Never

挂载为文件

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-file-config-demo
spec:
  containers:
  - name: demo-container
    image: busybox
    command: ["/bin/sh", "-c", "cat /app/db.properties && sleep 3600"]
    volumeMounts:
    - name: config-volume  # 与 volumes 中定义的卷名对应
      mountPath: /app/db.properties  # 容器内的单个文件路径
      subPath: db.properties  # 引用 ConfigMap 中的某个键(对应生成的文件名)
  volumes:
  - name: config-volume
    configMap:
      name: app-yaml-config  # 引用的 ConfigMap 名称
      items:  # 可选:筛选需要挂载的键(不写则挂载所有)
      - key: db.properties
        path: db.properties  # 卷内的文件路径(与 subPath 对应)
  restartPolicy: Never