Use uma StorageClass personalizada com suas cargas de trabalho

O GKE no Azure implanta automaticamente o driver CSI do Azure Disk e o driver CSI do Azure File .

As versões do driver CSI do Azure Disk e do driver CSI do Azure File estão vinculadas a uma versão do GKE no Azure Kubernetes. A versão do driver normalmente é a mais recente disponível quando uma versão do GKE é lançada. Quando o cluster é atualizado, os drivers são atualizados automaticamente.

Use uma StorageClass personalizada

Você pode criar StorageClasses adicionais para volumes ou usar drivers de interface de armazenamento de contêiner (CSI).

  1. Escolha se você está usando um volume de disco do Azure ou outro driver CSI.

    Volume de disco do Azure

    Você pode criar sua própria StorageClass personalizada que especifica um tipo de volume do Azure Disk, um tipo de sistema de arquivos e outros parâmetros. Você pode encontrar parâmetros adicionais da StorageClass na página do GKE no Azure sobre o driver CSI do Azure Disk no GitHub .

    Para configurar um StorageClass personalizado, copie o seguinte manifesto YAML em um arquivo chamado my-custom-class.yaml .

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    Substitua CLASS_NAME pelo nome da sua nova StorageClass.

    Por exemplo, o YAML a seguir cria uma nova StorageClass que provisiona volumes em uma conta de armazenamento específica e aplica uma tag de group=dev a cada novo volume.

    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
    

    Motorista CSI

    Você pode especificar um driver CSI diferente no campo provisioner .

    Para criar uma StorageClass com outro driver CSI, você pode usar o YAML de exemplo abaixo.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    

    Substitua os seguintes valores:

    • CLASS_NAME : o nome da StorageClass (por exemplo, my-custom-class ).
    • CSI_DRIVER_NAME : o nome do driver CSI (por exemplo, csi.example.com ).

    Em seguida, configure os subcampos em parameters de acordo com a documentação do seu driver CSI.

  2. Aplique o YAML ao seu cluster.

    kubectl apply -f my-custom-class.yaml
    
  3. Crie um PersistentVolumeClaim com uma StorageClass personalizada.

    Após criar uma StorageClass personalizada, você pode especificá-la em uma PVC. O exemplo a seguir cria uma PVC chamada my-pvc que faz referência à StorageClass my-custom-class .

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

Defina a StorageClass padrão

O GKE no Azure usa uma StorageClass padrão chamada standard-rwo que provisiona discos SSD padrão do Azure com LRS . Você pode alterar a StorageClass padrão para outra.

Para alterar o StorageClass padrão:

  1. Atualize a anotação is-default-class para o StorageClass standard-rwo com kubectl patch .

    kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Crie uma nova StorageClass que tenha a anotação storageclass.kubernetes.io/is-default-class: true .

    O exemplo StorageClass a seguir usa o driver disk.csi.azure.com . Para instalar outro driver de armazenamento, consulte Instalando um driver CSI .

    Copie o seguinte YAML em um arquivo chamado 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
    

    Substitua o seguinte:

    • CLASS_NAME : o nome da sua nova StorageClass.
    • VOLUME_TYPE : o tipo de volume do Azure Disk que o StorageClass cria.

    Por exemplo, o YAML a seguir cria uma nova StorageClass padrão que provisiona volumes Premium SSD Azure Disk.

    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
    
  3. Aplique a nova classe personalizada ao seu cluster.

    kubectl apply -f my-custom-class.yaml
    

Depois de aplicar este manifesto, o GKE no Azure usa o my-custom-default-class StorageClass para novas solicitações de armazenamento.

Referenciar a StorageClass em um StatefulSet

Para usar seu novo StorageClass, você pode referenciá-lo em volumeClaimTemplates de um StatefulSet.

Ao referenciar uma StorageClass na especificação volumeClaimTemplates de um StatefulSet, o Kubernetes fornece armazenamento estável usando PersistentVolumes (PVs). O Kubernetes chama o provisionador definido na StorageClass para criar um novo volume de armazenamento. Após o provisionamento do volume, o Kubernetes cria automaticamente um PV.

O StatefulSet a seguir faz referência ao StorageClass my-custom-class e provisiona um volume de 1 gibibyte:

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

O que vem a seguir