将自定义 StorageClass 用于您的工作负载
如需为 Google Kubernetes Engine (GKE) on Azure 上的容器化工作负载定义特定的存储行为,请创建并使用自定义 StorageClass。通过自定义 StorageClass,您可以为 PersistentVolume 选择不同的 Azure 磁盘类型、文件系统类型和其他参数,从而优化应用的存储性能和费用。借助此功能,您可以根据工作负载的确切需求定制存储,从而高效运行服务。
GKE on Azure 会自动部署和管理 Azure Disk CSI 驱动程序和 Azure File CSI 驱动程序,这对于处理存储预配至关重要。这些驱动程序的版本与您的 GKE on Azure Kubernetes 版本相关联,并会随着集群升级自动更新,从而确保您的自定义 StorageClass 的无缝兼容性。
使用自定义 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=devCSI 驱动程序
您可以在
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-rwoStorageClass 的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 集群上安装存储驱动程序。
参考快速入门,部署您的第一个工作负载。