K8s PV / PVC / StorageClass 有状态应用持久化

关系

```

StorageClass → 定义存储类型

PVC → Pod 申请存储

PV → 实际存储卷

```

PVC + Deployment 示例

```yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-data-pvc

namespace: prod

spec:

accessModes: ReadWriteOnce

storageClassName: nfs-client # 改成你的 SC

resources:

requests:

storage: 20Gi


apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql

namespace: prod

spec:

replicas: 1 # RWO 只能单副本

selector:

matchLabels:

app: mysql

template:

metadata:

labels:

app: mysql

spec:

containers:

  • name: mysql

image: mysql:8.0

volumeMounts:

  • name: data

mountPath: /var/lib/mysql

volumes:

  • name: data

persistentVolumeClaim:

claimName: mysql-data-pvc

```

StatefulSet(推荐有状态应用)

```yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: redis

namespace: cache

spec:

serviceName: redis

replicas: 1

selector:

matchLabels:

app: redis

template:

metadata:

labels:

app: redis

spec:

containers:

  • name: redis

image: redis:7.2

command: "redis-server", "--appendonly", "yes"

volumeMounts:

  • name: data

mountPath: /data

volumeClaimTemplates:

  • metadata:

name: data

spec:

accessModes: ReadWriteOnce

storageClassName: nfs-client

resources:

requests:

storage: 5Gi

```

自动生成 `data-redis-0` PVC。

accessModes

| 模式 | 说明 |

|------|------|

| ReadWriteOnce | 单节点读写(最常用) |

| ReadWriteMany | 多节点读写(NFS 支持) |

PVC Pending 排查

```bash

kubectl describe pvc <name> -n <ns>

kubectl get storageclass

```

| Events | 处理 |

|--------|------|

| storageclass not found | SC 名称写错 |

| no persistent volumes | 检查 Provisioner / NFS |

| waiting for first consumer | 先创建使用 PVC 的 Pod |

踩坑

  1. **Deployment replicas>1 + RWO** → 多 Pod 抢一个卷,用 StatefulSet

  2. **删 PVC 数据丢** → 生产用 `reclaimPolicy: Retain`

  3. **hostPath 别上生产** → 用 NFS / 云盘

  4. **NFS 权限不足** → exports 加 `no_root_squash`,或 initContainer chown

常用命令

```bash

kubectl get pv,pvc -A

kubectl patch pvc <name> -n <ns> -p '{"spec":{"resources":{"requests":{"storage":"50Gi"}}}}' # 扩容

```

相关推荐
蜡笔婧萱9 小时前
Docker介绍及其基础简介(一)
云原生·eureka
谢亮_vipxieliang11 小时前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
sbjdhjd14 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人14 小时前
1、什么是K8s
云原生·容器·kubernetes
帷幕落秋16 小时前
Docker的两种安装
运维·docker·容器
fengkai454516 小时前
十二、Redis -2
运维·数据库·redis·容器
DolitD18 小时前
3D应用多实例并发中的GPU隔离技术路径分析
容器·gru·接口隔离原则
姜鱼问生19 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
小匠石钧知1 天前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
零基础1231 天前
Docker 部署实战:从入门到精通
docker·容器