目录
按照生命周期,我们大致可以将数据存储分为两类:注入和共享
①、注入:把数据“塞进”容器——生命周期跟 Pod 走
注入型数据:
-
ConfigMap
-
Secret
-
Downward API
②、共享:把数据“挂出来”让多个 Pod/节点同时用——生命周期独立于 Pod
共享型数据:
-
emptyDir
-
hostPath
-
PV(PVC)
-
NFS
三、配置存储
1、ConfigMap(cm)
1.1创建方式
①、命令行直接给键值
# 定义一个叫 app-cfg 的 ConfigMap
# 内含两个键值对:APP_NAME=myapp、LOG_LEVEL=info
kubectl create configmap app-cfg \
--from-literal=APP_NAME=myapp \
--from-literal=LOG_LEVEL=info
适用于键值对较简短,数量较少
②、从文件/目录导入
# 把 nginx.conf 文件导入挂成 key=nginx.conf
# 即 nginx.conf 内部所有全变为值导入,文件名做 key,内容做 value
kubectl create configmap nginx-cfg \
--from-file=nginx.conf
# 整个目录导入,文件名做 key,内容做 value
kubectl create configmap redis-cfg \
--from-file=./redis.d/
适用于键值对较多,将所有要注入的键值对编辑进同一个文件,再将文件导入即可
③、YAML 声明(最直观,可版本控制)
apiVersion: v1
kind: ConfigMap # 声明资源类型是 ConfigMap
metadata: # 元数据
name: game-config # 自定义的 ConfigMap名称
data: # 定义数据段(键值对)
# 简单键值
enemy_speed: "10"
# 多行文本
game.properties: |
enemies=aliens
lives=3
1.2使用(消费)方式
注意:Pod “消费” ConfigMap 是在你的 ConfigMap 已经创建好,存在的前提下
①、作为环境变量
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: busybox:1.36.1
# 方式 A:单个键值的注入
env:
- name: APP_NAME # 容器内部变量名
valueFrom: # 值的来源
configMapKeyRef:
name: my-configmap # 已创建的 ConfigMap 的名字
key: app_name # ConfigMap 中的键
# 即在当前命名空间找一个名为 my-configmap 的 ConfigMap,找出其中名为 app_name 的键,将其对应的值注入容器给容器内变量 APP_NAME
# 方式 B:一次性导入整个 ConfigMap
envFrom:
- configMapRef:
name: my-configmap # 已创建的 ConfigMap 的名字
# 把 app-cfg 的所有键值对一次性注入容器,变量名 = 键名,变量值 = 键值
restartPolicy: Never # 重启策略设为永不重启,方便测试
②、作为卷挂载
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: busybox:1.36.1
volumeMounts:
- name: config-volume # 必须与下面 volumes.name 一致,建立“卷 → 容器”映射
mountPath: /etc/config # 挂载到容器内的路径,原有目录内容会被完全隐藏
volumes:
- name: config-volume # 必须与上面 volumeMounts.name 一致,建立“卷 → 容器”映射
configMap:
name: my-configmap # 引用 ConfigMap
# optional: 可指定特定键或文件权限
items:
- key: config-file # 获取 ConfigMap 里叫 config-file 的那一条
path: custom-name.conf
mode: 0644 # 文件权限,默认为 0644;若要可执行,可改成 0755
# 最终容器 /etc/config/custom-name.conf 内容就是config-file 的内容
restartPolicy: Never # 重启策略设为永不重启,方便测试
③、作为命令行参数
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: busybox:1.36.1
env:
- name: APP_NAME # 容器内部变量名
valueFrom: # 值的来源
configMapKeyRef:
name: my-configmap # 已创建的 ConfigMap 的名字
key: app_name

最低0.47元/天 解锁文章
1544

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



