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 卷已独立纳入资产台账。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭