1. ConfigMap
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
- ConfigMap 的名字必须是一个合法的 DNS 子域名。

ConfigMap 创建的4种方式
注意:此处我们用到的例子中的 cm1, cm2, cm3, cm4 后续例子中也会引用到。
这里先给出几个查看 configmap 的命令:
# 查看 configmap 列表
kubectl get cm
# 查看某个 configmap 内容
kubectl describe cm cm1
复制代码
- 通过直接在命令行中指定configmap参数创建,即(--from-literal=key=value):
kubectl create configmap cm1 --from-literal=host=127.0.0.1 --from-literal=port=3306
复制代码
- 通过指定文件创建,即(--from-file=file):
echo -n 127.0.0.1 > host
echo -n 3306 > port
复制代码
kubectl create configmap cm2 --from-file=./host --from-file=./port
复制代码
- 通过一个文件内多个键值对,即(--from-env-file=file):
vim env.txt
复制代码
host=127.0.0.1
port=3306
复制代码
kubectl create configmap cm3 --from-env-file=env.txt
复制代码
- 通过 YMAL 文件创建(推荐使用):
vim cm4.yml
复制代码
apiVersion: v1
kind: ConfigMap
metadata:
name: cm4
data:
host: 127.0.0.1
port: "3306"
复制代码
kubectl apply -f cm4.yml
复制代码
ConfigMap 的2种使用方式
- 通过环境变量的方式传递给 pod:
vim pod-cm1.yml
复制代码
apiVersion: v1
kind: Pod
metadata:
name: pod-cm1
spec:
containers:
- name: mysql-pod
image: mysql:5.7
args: [ "/bin/sh", "-c", "sleep 10000" ]
envFrom: # env方式
- configMapRef:
name: cm1 # configmap名称
复制代码
kubectl apply -f pod-cm1.yml
kubectl exec pod-cm1 --env
复制代码
- 通过 volume 的方式挂载到 pod 内:
vim pod-cm2.yml
复制代码
apiVersion: v1
kind: Pod
metadata:
name: pod-cm2
spec:
containers:
- name: mysql-pod
image: mysql:5.7
args: [ "/bin/sh", "-c", "sleep 10000" ]
volumeMounts: # 用volume挂载方式
- name: vol-cm # 对应下面的volume名
mountPath: "/etc/mysql" # 挂载到容器内部的路径
readOnly: true # 只读
volumes:
- name: vol-cm # 卷名称
configMap:
name: cm2 # configmap的名称
复制代码
kubectl apply -f pod-cm2.yml
kubectl exec pod-cm2 – cat /etc/mysql/host
kubectl exec pod-cm2 – cat /etc/mysql/port
复制代码
使用 subpath 参数覆盖文件:
cat index.html(内容是 ABCDEFG)
复制代码
kubectl create configmap nginx-index --from-file=index.html
复制代码
vim subpath-cm.yaml
复制代码
apiVersion: v1
kind: Pod
metadata:
name: subpath-cm
spec:
containers:
- name: c1
image: nginx:1.17.1-alpine
volumeMounts:
- name: nginx-config
mountPath: /usr/share/nginx/html/index.html # configmap要挂载并覆盖的绝对路径
subPath: index.html # 这里要写相对路径
volumes:
- name: nginx-config
configMap:
name: nginx-index # 对应上面创建的configmap
复制代码
kubectl apply -f subpath-cm.yaml
复制代码
此时 nginx 的首页内容就已经被覆盖成了“ABCDEFG”。
ConfigMap 的热更新
- 通过环境变量的方式传递给 pod,这种方式不会热更新。
- 通过 volume 的方式挂载到 pod 内。这种方式会热更新, 大概需要半分钟左右。
- 但是使用 subpath 挂载文件,这种方式也不能热更新。
我们现在就来验证这种方式:
kubectl edit cm cm2
复制代码
apiVersion: v1
da

本文介绍Kubernetes中的存储管理,涵盖ConfigMap与Secret的创建及使用、Volume类型详解,包括emptyDir、hostPath与NFS存储卷,以及PV、PVC的概念和使用案例。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



