CentOS K8s持久化卷使用指南
导读:CentOS 上搭建与验证 Kubernetes 持久化卷 一 核心概念与访问模式 PV(PersistentVolume) 是集群级别的存储资源,由管理员预先制备或基于 StorageClass 动态制备;PVC(PersistentV...
CentOS 上搭建与验证 Kubernetes 持久化卷
一 核心概念与访问模式
- PV(PersistentVolume) 是集群级别的存储资源,由管理员预先制备或基于 StorageClass 动态制备;PVC(PersistentVolumeClaim) 是用户对存储的请求,二者按容量与访问模式匹配后进入 Bound 状态,供 Pod 使用。PV 不属于任何命名空间,PVC 属于命名空间。支持的典型访问模式包括:ReadWriteOnce(RWO)、ReadOnlyMany(ROX)、ReadWriteMany(RWX),以及 ReadWriteOncePod(RWOP,Kubernetes 1.22+,仅 CSI)。PV 常见状态:Available、Bound、Released、Failed。回收策略包括:Retain(保留数据与 PV,需人工清理)、Delete(删除 PV 及后端存储,动态制备时常用)、Recycle(清空数据,已弃用)。动态制备依赖 StorageClass 与 API Server 的准入控制(如启用 DefaultStorageClass 准入插件)。
二 在 CentOS 上快速落地 NFS 静态供给
- 准备 NFS 服务器(示例网段 192.168.10.0/24)
- 安装组件并共享目录:
- 安装:
yum -y install nfs-utils rpcbind - 共享:
mkdir -p /data/k8s_data - 配置:
cat > > /etc/exports < < 'EOF' /data/k8s_data 192.168.10.0/24(rw,sync,no_root_squash) EOF - 启动:
systemctl enable --now rpcbind nfs-server - 权限:
chown -R nfsnobody:nfsnobody /data/k8s_data - 验证:
showmount -e < NFS_IP>
- 安装:
- 安装组件并共享目录:
- 所有节点安装 NFS 客户端工具(用于挂载)
yum install -y nfs-utils(无需启动 nfs-server)
- 创建静态 PV(示例 500Mi,RWX)
- 文件:pv-nfs.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 500Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: < NFS_IP> path: /data/k8s_data - 应用:
kubectl apply -f pv-nfs.yaml
- 文件:pv-nfs.yaml
- 创建 PVC 绑定 PV
- 文件:pvc-nfs.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs namespace: default spec: resources: requests: storage: 500Mi accessModes: - ReadWriteMany storageClassName: "" - 应用:
kubectl apply -f pvc-nfs.yaml
- 文件:pvc-nfs.yaml
- 在 Pod 中使用 PVC(示例 Nginx 日志目录)
- 文件:deploy-nginx-pvc.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nginx-nfs namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-nfs template: metadata: labels: app: nginx-nfs spec: containers: - image: nginx:1.7.9 name: nginx-container ports: - name: http containerPort: 80 volumeMounts: - name: pvc-volume mountPath: /var/log/nginx volumes: - name: pvc-volume persistentVolumeClaim: claimName: pvc-nfs - 应用:
kubectl apply -f deploy-nginx-pvc.yaml
- 文件:deploy-nginx-pvc.yaml
- 验证
kubectl get pv,pvc应见 STATUS=Boundkubectl logs deployment/nginx-nfs正常输出,或进入容器检查挂载点
- 清理(注意 Retain 策略)
kubectl delete deploy deployment-nginx-nfskubectl delete pvc pvc-nfs(PV 变为 Released,数据仍在 NFS 服务器)- 如需复用:手动清理 NFS 目录数据后,再创建同名/同规格 PV;或调整回收策略为 Delete(动态制备时更常见)。
三 动态供给与 StorageClass 要点
- 作用与机制
- StorageClass 定义“如何动态创建 PV”,包含 provisioner、parameters、reclaimPolicy 等;当 PVC 请求某 StorageClass 且无匹配静态 PV 时,控制平面会调用 provisioner 动态创建 PV 并绑定 PVC。
- 启用与默认类
- 需在 API Server 启用准入控制插件 DefaultStorageClass,使集群具备“默认存储类”能力;PVC 若显式设置
storageClassName: ""则禁用动态供给。
- 需在 API Server 启用准入控制插件 DefaultStorageClass,使集群具备“默认存储类”能力;PVC 若显式设置
- 示例 StorageClass(以 NFS 动态供给为例,需部署 NFS 外部制备器)
- 思路:部署 NFS Client Provisioner(RBAC、Deployment、StorageClass),创建 StorageClass 指向该 provisioner;随后创建 PVC 请求该 StorageClass 即可自动获得 PV。
- 回收策略联动
- 动态制备的 PV 常见 reclaimPolicy=Delete(删除 PVC 时连同后端存储一起删除);静态 PV 可按需设为 Retain 以避免误删数据。
四 常用场景与注意事项
- 访问模式选择
- 单节点读写:选 RWO(如多数块存储、单实例数据库)。
- 多节点只读共享:选 ROX(如静态内容分发)。
- 多节点读写共享:选 RWX(如 NFS、CephFS 等支持多挂的文件系统;注意应用对并发写入的兼容性)。
- 本地开发/测试可用 HostPath,但不具备节点迁移能力,生产慎用;emptyDir 为临时目录,随 Pod 删除而清空,非持久化。
- 生产建议
- 优先选择具备高可用与快照/克隆能力的分布式或云 NAS(如 CephFS、公有云 NAS);NFS 简单但存在单点故障风险,生产环境需加固高可用与备份策略。
- 安全与权限
- NFS 建议避免使用 no_root_squash;按需使用 root_squash 或更严格的权限映射,结合目录所属用户/组与权限位控制访问。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS K8s持久化卷使用指南
本文地址: https://pptw.com/jishu/770691.html
