CSI 企业持久卷与拓扑运维
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ARN | Amazon Resource Name | AWS 资源名称,用于唯一标识资源 |
| AZ | Availability Zone | 可用区 |
| CMK | Customer Master Key | AWS KMS 旧称,现称 KMS key;其他云须按产品定义理解 |
| CSI | Container Storage Interface | 容器存储接口 |
| EBS | Elastic Block Store | AWS 块存储服务 |
| EC2 | Elastic Compute Cloud | AWS 云服务器服务 |
| EFS | Elastic File System | AWS 弹性文件存储服务 |
| EKS | Elastic Kubernetes Service | AWS 托管 Kubernetes 服务 |
| GID | Group Identifier | 用户组标识 |
| GKE | Google Kubernetes Engine | Google 托管 Kubernetes 服务 |
| HA | High Availability | 高可用 |
| I/O | Input/Output | 输入/输出 |
| IOPS | Input/Output Operations Per Second | 每秒输入输出操作数 |
| IRSA | IAM Roles for Service Accounts | 通过 Kubernetes 服务账号关联 AWS IAM 角色 |
| KMS | Key Management Service | 密钥管理服务 |
| PD | Persistent Disk | Google 持久性磁盘 |
| PV | Persistent Volume | 持久卷 |
| PVC | Persistent Volume Claim | 持久卷申领 |
| RWO | ReadWriteOnce | 卷访问模式:由一个节点以读写方式挂载 |
| RWX | ReadWriteMany | 卷访问模式:由多个节点以读写方式挂载 |
| SHA | Secure Hash Algorithm | 安全散列算法 |
| UID | Unique Identifier | 唯一标识符;Linux 权限语境中为 User ID(用户标识) |
场景:订单对账任务把待归档文件写入持久卷,完成扩容、节点迁移和恢复演练。前置:基线、存储性能/容量预算、云 KMS 权限。数据库优先沿用其原生 HA/备份体系;PVC 不自动赋予数据库高可用。
选型与身份#
| 需求 | 选择与限制 |
|---|---|
| EKS 单写块存储 | EBS CSI;EBS 卷受 AZ 约束,RWO 不是跨节点 RWX |
| GKE 块存储 | 托管 PD CSI;regional PD 的复制不替代应用一致性/备份 |
| 多节点共享文件 | EFS/Filestore 或已运营的文件 CSI,单独评估权限、锁语义和吞吐 |
| 自建 | 对接企业存储 CSI;Rook/Ceph、Longhorn 是额外存储系统,需要磁盘/故障域和容量运维方案 |
Hands-on A:EKS EBS CSI#
仅适用标准 EC2 节点,EKS Auto Mode 的 provisioner 是另一条路径,Fargate 不按本例挂 EBS。先确认未安装同一驱动,按 IRSA为 kube-system/ebs-csi-controller-sa 建立角色,使用与版本匹配的 EBS CSI policy;CMK 还需限定 key 的加解密/Grant 权限。
export CLUSTER='REPLACE_CLUSTER'
export AWS_REGION='REPLACE_REGION'
export K8S_MINOR='1.N'
aws eks describe-addon-versions --addon-name aws-ebs-csi-driver --kubernetes-version "$K8S_MINOR" --region "$AWS_REGION"
export CSI_ADDON_VERSION='REPLACE_ADDON_VERSION'
export CSI_ROLE_ARN='REPLACE_CSI_ROLE_ARN'
# 仅首次安装;已托管的驱动用 update-addon,保留原配置。
aws eks create-addon --cluster-name "$CLUSTER" --addon-name aws-ebs-csi-driver --addon-version "$CSI_ADDON_VERSION" --service-account-role-arn "$CSI_ROLE_ARN" --region "$AWS_REGION"
aws eks describe-addon --cluster-name "$CLUSTER" --addon-name aws-ebs-csi-driver --region "$AWS_REGION"
kubectl get csidrivers,csinodes等 add-on ACTIVE、controller 和每台所需节点上的 CSI Pod Ready。不要并存 Helm 与 EKS add-on 管理同一驱动。EBS CSI
保存 orders-storage.yaml,替换 KMS ARN;Retain 防误删,但删除 PVC 后仍需人工回收卷和费用:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: {name: orders-gp3}
provisioner: ebs.csi.aws.com
parameters:
type: gp3
encrypted: "true"
kmsKeyId: REPLACE_KMS_KEY_ARN
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
reclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata: {name: orders-reports, namespace: orders}
spec:
accessModes: [ReadWriteOnce]
storageClassName: orders-gp3
resources:
requests: {storage: 100Gi}kubectl apply -f orders-storage.yaml
kubectl -n orders get pvc orders-reports此时 Pending 可能是正常等待消费者。将真实对账 Job 的 spec.template.spec.volumes 引用该 PVC,并挂载到应用的报告输出目录;串行任务不得通过 replicas=3 共享一个需要独占写入的卷。企业文件权限应与容器 UID/GID/fsGroup 匹配,不能靠 chmod 777 修复。
Hands-on B:GKE 托管 PD CSI#
Autopilot 已启用,Standard 核对后启用;不再 Helm 安装另一个 PD driver:
gcloud container clusters update "$CLUSTER" --project="$PROJECT_ID" --location="$LOCATION" --update-addons=GcePersistentDiskCsiDriver=ENABLED
kubectl get csidriver pd.csi.storage.gke.io
kubectl get storageclass使用平台提供或专门创建的 StorageClass,provisioner 为 pd.csi.storage.gke.io;选定磁盘类型、zonal/regional、KMS、Retain、WaitForFirstConsumer、扩容策略。不能把 EBS 的 type: gp3 原样搬到 GKE。GKE PD CSI
企业验收与恢复#
真实任务写出一批可重算的对账文件,保存业务批次号、文件数/金额总数和 SHA-256 清单到独立证据库;不是只写一个 test.txt。再执行:
kubectl -n orders get pvc orders-reports -o wide
kubectl get pv,volumeattachments
kubectl -n orders patch pvc orders-reports --type=merge -p '{"spec":{"resources":{"requests":{"storage":"150Gi"}}}}'
kubectl -n orders describe pvc orders-reports验收卷和文件系统都扩到目标、业务继续写入、IOPS/吞吐/延迟符合预算;卷一般不能原地缩小。排空当前消费者节点,确认在可访问该卷的 AZ 重调度且旧附件释放,文件校验一致;跨 AZ 恢复走快照/复制方案,不能强行绕过 PV nodeAffinity。
告警覆盖 PVC Pending、attach/mount 错误、磁盘使用率、I/O、KMS 拒绝、节点卷数量上限。异常先查调度拓扑、CSI 日志和云卷状态;不要手工强制 detach 正在写入的卷。回收前完成 VolumeSnapshot 和 Velero 恢复,确认 Retain 卷已独立纳入资产台账。