ConfigMap 的用法几乎与 Secret 完全相同:你可以使用 kubectl create configmap 从文件或者目录创建 ConfigMap,也可以直接编写 ConfigMap 对象的 YAML 文件。
-
创建configmap
image.png
centos-mysql:latest
kubectl create configmap mysqlcfmap --from-file=./my.cnf
-
查看configmap
image.png
kubectl get configmaps
-
get yaml文件
image.png
kubectl get configmaps mysqlcfmap -o yaml
-
my.cnf
文件中
创建一个my.cnf文件
[mysqld]
user=oyzx
port=3307
- 创建
mysql.yaml
文件
注意:(请仔细阅读如下注意事项!!!)
- 由于考虑到简单实验,并未拉取真实mysql镜像,在网络良好的状态下,可将镜像
image: busybox
改为image: mysql:5.7
类似镜像- 挂载目录
mountPath: "/mysqlcfmap"
,如果挂载的是文件夹,当该文件夹,如/mysqlcfmap
中有内容时,将会把该文件夹下所有文件覆盖,只留下my.cnf
,如果挂载的是mountPath: "/mysqlcfmap/my.cnf"
,则会自动创建一个my.cnf的文件夹,再将my.cnf文件放进去。
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-configmap-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: mysqlcfmap
mountPath: "/mysqlcfmap"
readOnly: true
volumes:
- name: mysqlcfmap
configMap:
name: mysqlcfmap
-
创建
kubectl create -f mysql.yaml
-
查看是否创建成功
image.png
kubectl get pods
-
进入容器
image.png
kubectl exec -it test-configmap sh
可看到my.cnf文件
修改挂载覆盖目录的问题
- 删除原始容器
kubectl delete -f mysql.yam
image.png - 删除configmap中的
mysqlcnf
kubectl delete configmaps mysqlcnf
image.png - 自定义key方式重新创建configmap
kubectl create configmap mysqlcnf --from-file=mysqlcnf=./my.cnf
image.png - 查看创建的configmap
kubectl get configmaps
image.png - 修改yaml文件
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-configmap-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: mysqlcfmap
mountPath: "/mysqlcfmap" # 挂载到容器中目录,这个目录会自动创建
volumes:
- name: mysqlcfmap
configMap:
name: mysqlcnf # 创建 configmap 对象的名称
items:
- key: my.cnf # 创建 configmap 对象时指定的 key
path: my.cnf # 容器 a 目录中的文件名
- 创建容器
kubectl create -f mysql.yaml
1 从普通文件创建
kubectl create configmap mysql-cnf --from-file=my-cnf=./my.cnf
2 从 yaml 文件创建
# ./kustomization.yaml
configMapGenerator:
- name: mysql-cnf
files:
- my-cnf=./my.cnf
kubectl apply -f ./kustomization.yaml
Pod使用
1. 更新
更新 Etcd 中配置数据
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-configmap-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: mysqlcfmap
mountPath: "/etc/config" # 挂载到容器中目录,这个目录会自动创建
volumes:
- name: mysqlcfmap
configMap:
name: mysql-cnf # 创建 configmap 对象的名称
items:
- key: my-cnf # 创建 configmap 对象时指定的 key
path: my.cnf # 容器 a 目录中的文件名
# /etc/config/my.cnf # 软链接
-------------------
不更新
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-configmap-volume
image: busybox
args:
- sleep
- "86400"
volumeMounts:
- name: mysqlcfmap
mountPath: "/etc/my.cnf" # 挂载到容器中目录,这个目录会自动创建
subPath: my.cnf
volumes:
- name: mysqlcfmap
configMap:
name: mysql-cnf # 创建 configmap 对象的名称
items:
- key: my-cnf # 创建 configmap 对象时指定的 key
path: my.cnf # 容器 a 目录中的文件名
# /etc/my.cnf # 普通文件
image.png
-
更新
image.png
修改配置文件my.cnf,再重新生成configmap后可自动更新在容器中得到新的my.cnf文件内容
image.png -
不更新
image.png
网友评论