Use StorageClasses com suas cargas de trabalho

O GKE na AWS implanta automaticamente a Container Storage Interface (CSI) do Amazon Elastic Block Store (EBS) e do Amazon Elastic File Store (EFS) .

As versões do driver EBS CSI e do driver EFS CSI estão vinculadas a uma versão do Kubernetes do GKE na AWS. 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 o StorageClass padrão

A criação de um PersistentVolumeClaim sem o campo spec.storageClassName provisiona um volume de SSD de uso geral (gp2) usando o driver CSI StorageClass padrão do GKE no AWS EBS.

O YAML a seguir cria um PersistentVolumeClaim (PVC) chamado mypvc com um tamanho de 30 gibibytes.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Use um StorageClass pré-instalado diferente

O driver GKE no AWS EBS CSI também inclui o StorageClass premium-rwo , que provisiona volumes SSD Provisioned IOPS ( io1 ) de maior rendimento.

Você pode usá-lo especificando-o no spec.storageClassName do PVC.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageClassName: premium-rwo

Use uma StorageClass personalizada

Se nem o StorageClass padrão nem o premium-rwo atenderem às suas necessidades, você poderá criar StorageClasses adicionais para volumes EBS ou usar drivers de interface de armazenamento de contêiner (CSI).

  1. Escolha se você está usando um volume EBS ou outro driver CSI.

    Volume EBS

    Esta aba descreve como criar sua própria StorageClass personalizada que especifica um tipo de volume EBS, um tipo de sistema de arquivos e outros parâmetros. Você pode encontrar parâmetros adicionais da StorageClass na página do GKE no AWS EBS CSI Driver 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: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    

    Substitua CLASS_NAME pelo nome da sua nova StorageClass.

    Por exemplo, o YAML a seguir cria uma nova StorageClass que provisiona volumes EBS de HDD otimizados para throughput formatados com o sistema de arquivos XFS .

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    Classe de armazenamento EFS personalizada

    Esta aba descreve como criar uma StorageClass personalizada para o provisionador do driver CSI do EFS. Consulte Usar um recurso EFS para obter uma lista dos pré-requisitos para esta StorageClass. A página do driver CSI do EFS lista parâmetros StorageClass adicionais além daqueles no manifesto a seguir.

    Copie o seguinte manifesto YAML em um arquivo chamado my-custom-class.yaml .

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: <var>EFS_STORAGE_CLASS_NAME</var>
    provisioner: efs.csi.aws.com
    mountOptions:
      - tls
    parameters:
      provisioningMode: efs-ap
      fileSystemId: EFS_ID
      directoryPerms: "700"
    

    Substituir:

    • EFS_STORAGE_CLASS_NAME pelo nome da StorageClass .
    • EFS_ID com o ID do seu sistema de arquivos EFS - por exemplo, fs-12345678a.

    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
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    

    Substitua o seguinte:

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

    Configure os subcampos em parameters de acordo com seu driver CSI.

  2. Aplique o YAML ao seu cluster.

    kubectl apply -f my-custom-class.yaml
    

Crie um PersistentVolumeClaim com uma StorageClass personalizada

  1. Após criar uma StorageClass personalizada, você pode especificá-la em uma PVC. O exemplo abaixo 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 na AWS usa uma StorageClass padrão chamada standard-rwo que provisiona volumes gp2 EBS . 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 ebs.csi.aws.com . Para instalar outro driver de armazenamento, consulte Instalar drivers CSI adicionais .

    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: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Substitua o seguinte:

    Por exemplo, o YAML a seguir cria uma nova StorageClass padrão que provisiona volumes SSD de uso geral (gp3) .

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: gp3
    
  3. Aplique a nova classe personalizada ao seu cluster.

    kubectl apply -f my-custom-class.yaml
    

Depois de aplicar este manifesto, o GKE na AWS 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ê deve 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