一、Volume 存储卷类型
| 类型 | 特点 | 生命周期 | 典型场景 |
|---|---|---|---|
| emptyDir | 临时空目录,Pod 内多容器共享 | Pod 删除即清除 | 缓存、临时数据交换 |
| hostPath | 挂载宿主机目录 | Pod 删除数据保留(节点级) | 单节点测试、访问宿主机文件 |
| NFS | 挂载网络共享存储 | Pod 删除数据保留 | 多 Pod 共享持久数据 |
关键参数:
volumeMounts.mountPath:容器内挂载路径volumeMounts.readOnly:是否只读(默认 false)hostPath.path:宿主机目录路径nfs.server/nfs.path:NFS 服务端地址和共享目录
二、PersistentVolume(PV)与 PersistentVolumeClaim(PVC)
架构关系
- PV:集群级存储资源(由管理员创建)
- PVC:命名空间级存储请求(由用户创建)
- 绑定:PVC 根据accessModes、容量、storageClassName匹配 PV,一一绑定
关键属性
| 属性 | 说明 |
|---|---|
accessModes | RWO(单节点读写)、ROX(多节点只读)、RWX(多节点读写) |
volumeMode | Filesystem(文件系统,默认) / Block(原始块设备) |
persistentVolumeReclaimPolicy | Retain(保留,默认)、Recycle(已弃用)、Delete(删除后端存储) |
storageClassName | 用于动态供给或分类匹配 |
常用操作
# 查看 PV/PVCkubectl getpvkubectl get pvc# 删除 PVC 后,PV 状态变为 Released,需手动清理 claimRef 才能复用(Retain 策略下)kubectl editpv<pv-name># 删除 claimRef 字段注意事项
- 访问模式互斥:同一时刻只能以一种模式挂载(即使支持多种)。
- 默认回收策略为 Retain,数据不会自动删除。
- NFS 等常见存储支持 RWX,适合多 Pod 共享。
三、ConfigMap(非敏感配置)
创建方式
| 方式 | 命令示例 |
|---|---|
| 键值对 | kubectl create configmap mysql --from-literal=password=redhat |
| 单个文件 | kubectl create configmap web1 --from-file=./index.html |
| 目录 | kubectl create configmap web2 --from-file=./web2 |
引用方式
- 环境变量(容器级)
env:-name:MYSQL_ROOT_PASSWORDvalueFrom:configMapKeyRef:name:mysqlkey:password- Volume 挂载(Pod 级)
- 挂载全部键:
mountPath: /dir,每个键变为文件 - 挂载特定键:使用
items或subPath
动态更新
- 以 Volume 方式挂载的 ConfigMap 内容会自动更新(kubelet 周期性同步),但需应用自行感知(如重载配置)。
容量限制
- 单个 ConfigMap 上限1 MiB,不适合存大文件。
四、Secret(敏感信息)
与 ConfigMap 区别
- Secret 对数据做Base64 编码(非加密),ConfigMap 明文。
- Secret 适合密码、令牌、证书等敏感数据。
常用类型
| 类型 | 用途 |
|---|---|
generic(Opaque) | 通用键值对 |
docker-registry | 镜像仓库认证凭据 |
tls | TLS 证书/私钥对 |
创建示例
# generic 键值对kubectl create secret generic mysecret --from-literal=user=tom --from-literal=password=redhat# docker-registrykubectl create secret docker-registry regcred --docker-username=user --docker-password=pass --docker-email=email@example.com# tlskubectl create secret tls tls-secret--cert=path/to/cert.crt--key=path/to/key.key引用方式(同 ConfigMap)
- 环境变量:
secretKeyRef - Volume 挂载:
secret.secretName,支持items和subPath - 默认文件权限 644,可通过
defaultMode或mode调整
动态更新
- Volume 挂载的 Secret 内容也会自动更新,但需应用支持热加载。
五、综合案例参考(haproxy + nginx)
- 使用 ConfigMap 保存 haproxy.cfg
- 使用 ConfigMap 保存各 webapp 的静态页面
- 通过 Volume 挂载到对应容器,实现配置与镜像分离
六、环境清理
kubectl delete ns<namespace># 删除实验命名空间,释放资源总结:Volume 解决容器数据持久化与共享问题;PV/PVC 提供存储资源抽象与解耦;ConfigMap/Secret 实现配置与敏感信息的分离管理,是 Kubernetes 云原生应用配置的标准实践。