你是不是也用过Kubernetes?或者正在尝试把业务迁移到容器平台?如果你的答案是“是”,那你就一定绕不开一个关键词——持久化存储。毕竟,谁也不想容器一重启,数据就全没了,对吧?

在阿里云的容器服务 Kubernetes 版(简称 ACK)里,实现数据持久化的关键角色就是 PV(Persistent Volume)和 PVC(Persistent Volume Claim)。听起来有点专业?别怕!这篇文章我就用大白话,从零开始带你一步步搞懂怎么在 ACK 上配置 PV 和 PVC,让你的数据稳如老狗,再也不怕 Pod 挂了、重启了、迁移了。
先搞明白:PV 和 PVC 到底是啥?
我们先打个比方。想象一下你在租房,房子是你租的(Pod),但你家里的冰箱、洗衣机这些大件电器是你自己买的,不会因为搬家就丢掉。这些“不会丢”的东西,就相当于你的数据。而 PV 就像是小区里已经安装好的洗衣机房——它是集群级别的资源,提前准备好了,等着被使用。PVC 呢,则是你去物业申请使用洗衣机的“申请单”。
换句话说:
- PV:是实际的存储资源,比如阿里云的云盘(Cloud Disk)、NAS 文件系统等,由管理员创建或自动动态供给。
- PVC:是用户对存储资源的“请求”。你告诉系统:“我需要10GB的存储空间,读写速度快一点”,系统就会自动给你匹配一个合适的 PV。
这种设计的好处是解耦——开发人员不用关心底层存储细节,只需要提需求;运维人员则可以统一管理存储资源。完美!
为什么要在 ACK 上用 PV/PVC?
很多人刚开始用容器,可能图省事直接用本地临时存储。结果呢?Pod 一重建,数据全飞了。尤其是像 MySQL、Redis 这类有状态服务,数据丢了可是要出大事的。
而在 ACK 上,通过 PV/PVC 结合阿里云的块存储或文件存储服务,你可以做到:
- 数据持久保存,即使节点故障也不丢;
- 支持多 Pod 共享访问(比如用 NAS);
- 动态扩容,按需申请,成本更可控;
- 自动化管理,减少手动挂载磁盘的麻烦。
所以说,PV/PVC 不是“可选项”,而是生产环境下的“必选项”。
实战演示:在 ACK 中创建 PV 和 PVC
接下来咱们来实操一波。假设你现在要在 ACK 集群里部署一个 WordPress 应用,需要为它的 wp-content 目录挂载持久化存储,防止上传的图片、主题等文件丢失。
第一步:确认存储插件是否就绪
阿里云 ACK 默认集成了多种存储插件,比如:
- disk-plugin:用于挂载云盘(适合单节点读写)
- flexvolume-plugin 或 CSI 插件:支持 NAS、OSS 等
你可以在集群详情页的“组件管理”中查看是否已启用这些插件。一般新创建的集群都默认开启,不用额外操作。
第二步:创建 StorageClass(可选但推荐)
StorageClass 是用来定义存储“类型”的,比如你是想要 SSD 云盘还是高效云盘?要不要自动创建?
举个例子,创建一个名为 alicloud-disk-ssd 的 StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-ssd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_ssd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
把这个 YAML 文件保存为 sc-ssd.yaml,然后执行:
kubectl apply -f sc-ssd.yaml
这样,后续你创建 PVC 的时候,就可以指定使用这个 StorageClass,系统会自动帮你创建对应的云盘。
第三步:创建 PVC
现在我们来创建一个 20GB 的 PVC,用于 WordPress 的数据存储。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-ssd
解释一下关键字段:
accessModes: ReadWriteOnce表示这块存储只能被一个节点以读写方式挂载,适用于大多数数据库场景。storage: 20Gi就是你申请的空间大小。storageClassName指定了使用哪种存储类型,这里我们用了刚才创建的 SSD 类型。
保存为 pvc-wordpress.yaml,然后运行:
kubectl apply -f pvc-wordpress.yaml
稍等几秒,执行 kubectl get pvc,如果看到状态是 Bound,说明 PV 已经自动创建并绑定成功了!
第四步:在 Deployment 中使用 PVC
接下来,我们要让 WordPress 的 Pod 挂载这个 PVC。修改你的 Deployment 配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
ports:
- containerPort: 80
volumeMounts:
- name: web-data
mountPath: /var/www/html
volumes:
- name: web-data
persistentVolumeClaim:
claimName: wordpress-pvc
重点看 volumes 和 volumeMounts 这两部分:
- 我们定义了一个叫
web-data的卷; - 它实际关联的是前面创建的
wordpress-pvc; - 然后在容器里挂载到
/var/www/html,也就是 WordPress 存放文件的目录。
执行 kubectl apply -f deployment.yaml,等 Pod 启动后,你上传的所有图片、插件都会被保存在这个持久化磁盘上,哪怕删掉 Pod 重建,数据也不会丢!
常见问题 & 最佳实践
虽然流程看起来挺顺,但在实际使用中,大家常遇到几个坑,我来帮你避一避。
1. PVC 一直处于 Pending 状态?
最常见的原因是 StorageClass 配置错误,或者集群没有可用的存储资源。你可以通过以下命令排查:
kubectl describe pvc wordpress-pvc
看 Events 部分有没有报错信息,比如“no such storage class”或者“insufficient disk”。如果是前者,检查名字拼写;如果是后者,可能需要换一种存储类型,或者联系管理员扩容。
2. 多个 Pod 要共享数据怎么办?
云盘(Disk)不支持多节点同时挂载,这时候就得上 NAS(文件存储)了。你可以创建一个基于 NAS 的 PVC,设置 accessModes: ReadWriteMany,多个 Pod 就能同时读写同一份数据了,特别适合日志收集、静态资源托管等场景。
3. 数据安全怎么保障?
光有 PV/PVC 还不够,建议你定期做快照备份。阿里云云盘支持自动快照策略,可以在控制台设置每天凌晨自动备份,万一出问题还能快速恢复。
省钱小技巧:别忘了领阿里云优惠券!
说到这儿,你可能已经跃跃欲试想动手试试了。不过等等——用云资源,成本也是要考虑的。尤其是你打算长期跑服务,存储费用积少成多也是一笔开销。
告诉你个好消息:阿里云经常有活动,新用户和老用户都能领到实实在在的优惠券!不管是买云服务器、容器服务,还是挂载云盘、NAS,都能用得上。趁着现在还有额度,赶紧去领一张,能省一点是一点嘛!
👉 点击这里领取阿里云专属优惠券,注册/登录就能领,部分还能叠加使用,超划算!
PV/PVC 是你玩转 ACK 的必备技能
今天我们从 PV/PVC 的基本概念讲起,一步步演示了如何在阿里云 ACK 上创建 StorageClass、PVC,并将其挂载到应用中。整个过程其实并不复杂,关键是理解“请求”和“供给”的关系。
记住这几句话:
- PVC 是你要的,PV 是系统给你的;
- StorageClass 决定“给什么样的”;
- 数据不持久 = 生产环境找死。
只要你掌握了这套组合拳,不管是部署数据库、文件服务,还是搭建 CI/CD 流水线,都能游刃有余。而且随着业务增长,你还可以结合 HPA 自动扩缩容 + 持久化存储,真正做到弹性又可靠。
最后再提醒一次:动手之前,先领张阿里云优惠券,既能练手又不心疼钱,何乐而不为?
好了,今天的分享就到这里。如果你觉得有用,不妨收藏+转发,让更多小伙伴少走弯路。
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/149249.html