将自定义 StorageClass 用于您的工作负载
GKE on Azure 会自动部署 Azure Disk CSI 驱动程序和 Azure File CSI 驱动程序。
Azure Disk CSI 驱动程序和 Azure File CSI 驱动程序版本与 GKE on Azure 的 Kubernetes 版本相关联。此驱动程序版本通常是发布 GKE 版本时可用的最新版本。集群升级后,驱动程序会自动更新。
使用自定义 StorageClass
您可以为卷创建额外的 StorageClass,或者使用容器存储接口 (CSI) 驱动程序。
选择您使用的是 Azure 磁盘卷还是其他 CSI 驱动程序。
Azure 磁盘卷
您可以创建自己的自定义 StorageClass,用于指定 Azure 磁盘卷类型、文件系统类型和其他参数。您可以在 GKE on Azure 的 Azure Disk CSI 驱动程序 GitHub 页面上找到更多 StorageClass 参数。
如需配置自定义 StorageClass,请将以下 YAML 清单复制到名为
my-custom-class.yaml
的文件中。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true
将 CLASS_NAME 替换为新 StorageClass 的名称。
例如,以下 YAML 会创建一个新的 StorageClass,用于在特定存储账号中预配卷,并将
group=dev
的标记应用于新卷。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: storageAccount: my-storage-account tags: group=dev
CSI 驱动程序
您可以在
provisioner
字段中指定其他 CSI 驱动程序。如需使用其他 CSI 驱动程序创建 StorageClass,您可以使用以下 YAML 示例。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...
替换以下值:
- CLASS_NAME:StorageClass 的名称(例如
my-custom-class
)。 - CSI_DRIVER_NAME:CSI 驱动程序的名称(例如
csi.example.com
)。
接下来,根据 CSI 驱动程序的文档配置
parameters
下的子字段。- CLASS_NAME:StorageClass 的名称(例如
将 YAML 应用到您的集群。
kubectl apply -f my-custom-class.yaml
使用自定义 StorageClass 创建 PersistentVolumeClaim
创建自定义 StorageClass 后,您可以在 PVC 中指定它。以下示例将创建一个名为
my-pvc
且引用 StorageClassmy-custom-class
的 PVC。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
设置默认 StorageClass
GKE on Azure 使用名为 standard-rwo
的默认 StorageClass,用于预配具有 LRS 的标准 SSD Azure 磁盘。您可以将默认 StorageClass 更改为另一个 StorageClass。
要更改默认 StorageClass,请执行以下操作:
使用
kubectl patch
更新standard-rwo
StorageClass 的is-default-class
注释。kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
创建一个具有注释
storageclass.kubernetes.io/is-default-class: true
的新 StorageClass。以下示例 StorageClass 使用
disk.csi.azure.com
驱动程序。如需安装其他存储驱动程序,请参阅安装 CSI 驱动程序。将以下 YAML 复制到名为
my-custom-class.yaml
的文件中。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: VOLUME_TYPE
请替换以下内容:
- CLASS_NAME:新 StorageClass 的名称。
- VOLUME_TYPE:StorageClass 创建的 Azure 磁盘卷类型。
例如,以下 YAML 会创建一个新的默认 StorageClass,用于预配 高级 SSD Azure 磁盘卷。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: Premium_LRS
将新的自定义类应用于您的集群。
kubectl apply -f my-custom-class.yaml
应用此清单后,GKE on Azure 会使用 my-custom-default-class
StorageClass 处理新的存储请求。
在 StatefulSet 中引用 StorageClass
要使用新的 StorageClass,您可以在 StatefulSet 的 volumeClaimTemplates
中引用它。
当您在 StatefulSet 的 volumeClaimTemplates
规范中引用 StorageClass 时,Kubernetes 会使用 PersistentVolume (PV) 提供稳定的存储。Kubernetes 会调用在 StorageClass 中定义的预配工具以创建新的存储卷。预配了卷之后,Kubernetes 会自动创建一个 PV。
以下 StatefulSet 引用 my-custom-class
StorageClass,并预配 1 GiB 的卷:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: my-custom-class # This field references the existing StorageClass
后续步骤
了解 GKE 中的永久性卷。
在 GKE on Azure 集群上安装存储驱动程序。
参考快速入门,部署您的第一个工作负载。