Kubernetes存储卷的使用
在Kubernetes
中, 有这不同方式的内容挂载, 简单记录一下他们的配置方式.
ConfigMap
配置内容
内容配置#
apiVersion: v1
kind: ConfigMap
metadata:
name: test-config
data:
# 添加配置的 key-value 内容
test-key: test-value
引入#
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
env:
# 场景1: 可以用来配置环境变量
- name: ENV_NAME
valueFrom:
# 指定某一个 configMap 中的某个 key 作为 value
configMapKeyRef:
name: test-config
key: test-key
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
envFrom:
# 场景2: 将其整个导入作为 env
- configMapRef:
name: test-config
volumes:
- name: config-volume
# 场景3: 将 ConfigMap 作为数据进行导入
# 导入后, key作为文件名, value 作为文件内容
configMap:
name: test-config
Secret
存放一些加密信息, 当前加密就是base64
...
配置挂载#
其使用方式基本和ConfigMap
相同, 就是单纯的换个字段名
内容配置#
apiVersion: v1
kind: Secret
metadata:
name: test-secret
type: Opaque
data:
# 这里存放的是 base64 编码的内容
password: cGFzc3dvcmQ=
引入#
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
env:
# 场景1: 可以用来配置环境变量
- name: ENV_NAME
valueFrom:
# 指定某一个 configMap 中的某个 key 作为 value
secretKeyRef:
name: test-secret
key: password
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
envFrom:
# 场景2: 将其整个导入作为 env
- secretRef:
name: test-secret
volumes:
- name: config-volume
# 场景3: 将 Secret 作为数据进行导入
# 导入后, key作为文件名, value 作为文件内容
secret:
secretName: test-secret
镜像仓库鉴权#
当拉取的镜像仓库是私有仓库时, 需要增加鉴权内容
内容配置#
apiVersion: v1
kind: Secret
metadata:
name: test-register-secret
type: kubernetes.io/dockerconfigjson
data:
# 文件 ~/.docker/config.json 的 base64 编码内容
# 其内容就是个 json: {"auths":{"test.pull.com":{"username":"admin","password":"123456","email":"hujingnb@qq.com","auth":"YWRtaW46MTIzNDU2"}}}
.dockerconfigjson: eyJhdXRocyI6eyJ0ZXN0LnB1bGwuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IjEyMzQ1NiIsImVtYWlsIjoiaHVqaW5nbmJAcXEuY29tIiwiYXV0aCI6IllXUnRhVzQ2TVRJek5EVTIifX19
这玩意通过配置文件生成费点劲, 所有可以通过命令行直接生成:
kubectl create secret docker-registry test-register-secret \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
可以通过命令查看现有 secret 鉴权内容:
kubectl get secret test-register-secret --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
引入#
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
# 指定拉取镜像是使用的配置信息
imagePullSecrets:
- name: test-register-secret
Volume
直白的说, 就是磁盘的挂载.
举个简单的使用例子
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
# 定义进行挂在的数据卷
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
hostPath:
path: /usr/etc/nginx/config
上面将本地的目录 /usr/etc/nginx/config
挂在到的容器的 /etc/config
上.
注意看其中的hostPath
参数, 还可以替换成其他的, k8s
支持很多类型的挂载卷, 这里就不一一举例了, 具体可通过kubectl explain pod.spec.volumes
查看. 简单列举几个感觉比较常用的:
- emptyDir: 在 Node 上开一个空的目录用于共享.
- hostPath: 指定挂载 Node 本地路径
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-12-19 PHP为什么empty可以访问不存在的索引