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).
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.- EFS_STORAGE_CLASS_NAME pelo nome da
Aplique o YAML ao seu cluster.
kubectl apply -f my-custom-class.yaml
Crie um PersistentVolumeClaim com uma StorageClass personalizada
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 à StorageClassmy-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:
Atualize a anotação
is-default-class
para o StorageClassstandard-rwo
comkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
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:
-
EBS_VOLUME_TYPE
: o tipo de volume do AWS EBS que o StorageClass cria. -
CLASS_NAME
com o nome da sua nova StorageClass
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
-
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
Saiba mais sobre volumes persistentes e provisionamento dinâmico no GKE.
Instale drivers CSI adicionais no seu GKE na AWS.
Implante sua primeira carga de trabalho com o Início rápido .