使用注意

只有通过 Kubernetes API 创建的 Pod 才能使用 ConfigMap,其他方式创建的(比如静态 Pod)不能使用;ConfigMap 文件大小限制为 1MB(ETCD 的要求)
image.png

创建

基于文件或目录

kubectl create cm my-config —from-file=path/to/bar
kubectl create cm my-config —from-file=key1=/path/to/bar/file1.txt —from-file=key2=/path/to/bar/file2.txt

from-file 可以是单个文件,文件名为 key ,内容为 value
也可以是目录,表示在该目录下面的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容

cm/redis.conf
host=127.0.0.1
port=6379
cm/mysql.conf
host=127.0.0.1
port=3306

基于字面值

kubectl create cm my-config —from-literal=key1=config1 —from-literal=key2=config2
kubectl create cm redis-cm —from-literal=host=1.1.1.1 —from-literal=port=6379
image.png

基于 yml

apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-cm
data:
my.cnf: |
port=3306
datadir=/data/mysql/data
bin-log=bin
slow-log=slow

使用

pod env

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: pod-env
  5. spec:
  6. containers:
  7. - name: pod-env-bb
  8. image: busybox
  9. command: ["/bin/sh","-c","sleep 3600"]
  10. env:
  11. - name: mysql_info
  12. valueFrom:
  13. configMapKeyRef:
  14. name: mysql-cm
  15. key: my.cnf

image.png

pod 卷挂载

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol
spec:
  volumes:
  - name: mysql
    configMap:
      name: mysql-cm
  containers:
    - name: pod-vol-bb
      image: busybox
      command: ["/bin/sh","-c","sleep 3600"]
      volumeMounts:
      - name: mysql
        mountPath: /mysql

image.png