主题
第三部分 存储与 CSI 进阶
存储是 Kubernetes 生产环境中最容易出问题的领域之一。本部分深入讲解 CSI 架构、存储类、快照、扩容以及 Rook-Ceph 部署。
第 11 章 CSI 架构与原理
11.1 什么是 CSI
CSI(Container Storage Interface)是容器存储接口标准,允许第三方存储厂商为 Kubernetes 提供存储插件。
11.2 CSI 组件
┌────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ CSI Driver │ │ CSI Driver │ │
│ │ Controller │ │ Node Plugin │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ External Provisioner/Attacher/... │
│ │
└────────────────────────────────────────┘11.3 CSI 生命周期
- Provision:创建卷
- Attach:挂载到节点
- Mount:挂载到 Pod
- Unmount:从 Pod 卸载
- Detach:从节点卸载
- Delete:删除卷
11.4 常见 CSI 驱动
| CSI 驱动 | 存储后端 |
|---|---|
| csi-driver-nfs | NFS |
| csi-driver-host-path | 本地测试 |
| aws-ebs-csi-driver | AWS EBS |
| alicloud-disk-csi-driver | 阿里云云盘 |
| rook-ceph-csi | Ceph |
| longhorn-csi | Longhorn |
11.5 本章练习
- 列出你集群中部署的 CSI 驱动。
- 查看一个 PVC 的 Provisioning 过程。
第 12 章 StorageClass 高级用法
12.1 允许卷扩展
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: expandable-ssd
provisioner: ebs.csi.aws.com
parameters:
type: gp3
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer12.2 延迟绑定
volumeBindingMode: WaitForFirstConsumer 让 PVC 延迟到 Pod 调度后再绑定,便于选择就近存储。
12.3 拓扑感知
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: zonal-ssd
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- us-central1-a
- us-central1-b12.4 本章练习
- 创建一个允许扩容的 StorageClass。
- 扩容一个 PVC 并观察过程。
- 配置拓扑感知的 StorageClass。
第 13 章 快照与克隆
13.1 VolumeSnapshot
yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-snapshot
spec:
volumeSnapshotClassName: csi-snapclass
source:
persistentVolumeClaimName: my-pvc13.2 从快照恢复
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restored-pvc
spec:
storageClassName: my-sc
dataSource:
name: my-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi13.3 本章练习
- 安装 snapshot-controller。
- 为 PVC 创建快照。
- 从快照恢复新 PVC。
第 14 章 Rook-Ceph 部署与实践
14.1 什么是 Rook
Rook 是 Kubernetes 原生的存储编排器,可以自动化部署 Ceph、Cassandra、NFS 等存储系统。
14.2 Ceph 核心概念
| 概念 | 说明 |
|---|---|
| OSD | 对象存储守护进程,管理磁盘 |
| MON | 监控集群状态 |
| MDS | 元数据服务器,用于 CephFS |
| RGW | 对象网关,提供 S3/Swift 接口 |
| Pool | 存储池 |
14.3 部署 Rook-Ceph
bash
# 1. 部署 Rook Operator
git clone --single-branch --branch master https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml
# 2. 部署 Ceph 集群
kubectl apply -f cluster.yaml
# 3. 部署 CSI 驱动和 StorageClass
kubectl apply -f csi/rbd/storageclass.yaml
kubectl apply -f csi/cephfs/storageclass.yaml14.4 本章练习
- 在实验集群部署 Rook-Ceph(注意资源需求)。
- 创建 RBD 和 CephFS StorageClass。
- 创建 PVC 并验证数据持久化。
第三部分总结
完成本阶段学习后,你应该能够:
- 理解 CSI 架构和生命周期
- 配置高级 StorageClass(扩容、延迟绑定、拓扑感知)
- 使用 VolumeSnapshot 进行备份恢复
- 部署 Rook-Ceph 提供分布式存储
进入第四部分:K8s 安全进阶。