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