O GKE on AWS implementa automaticamente a interface de armazenamento de contentores (CSI) Amazon Elastic Block Store (EBS) e Amazon Elastic File Store (EFS).
As versões do controlador CSI do EBS e do controlador CSI do EFS estão associadas a uma versão do Kubernetes do GKE no AWS. Normalmente, a versão do controlador é a mais recente disponível quando é lançada uma versão do GKE. Quando o cluster é atualizado, os controladores são atualizados automaticamente.
Use a StorageClass predefinida
A criação de um PersistentVolumeClaim sem o campo spec.storageClassName
aprovisiona um
volume de SSD de uso geral (gp2)
através da StorageClass do controlador CSI de EBS do GKE no AWS predefinido.
O YAML seguinte cria um PersistentVolumeClaim (PVC) denominado mypvc
com um tamanho de 30 gibibytes.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Use uma StorageClass pré-instalada diferente
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 a StorageClass predefinida nem a premium-rwo
StorageClass satisfizerem as suas necessidades, pode criar StorageClasses adicionais para volumes EBS ou usar controladores da interface de armazenamento de contentores (CSI).
Escolha se está a usar um volume EBS ou outro controlador CSI.
Volume do EBS
Este separador descreve como criar a sua própria StorageClass personalizada que especifica um tipo de volume EBS, um tipo de sistema de ficheiros e outros parâmetros. Pode encontrar parâmetros StorageClass adicionais na página do GitHub do controlador CSI do EBS do GKE no AWS.
Para configurar uma StorageClass personalizada, copie o seguinte manifesto YAML para um ficheiro denominado
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 nova StorageClass.Por exemplo, o YAML seguinte cria uma nova StorageClass que aprovisiona volumes EBS HDD otimizados para débito formatados com o sistema de ficheiros 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
StorageClass EFS personalizado
Este separador descreve como criar uma StorageClass personalizada para o aprovisionador do controlador CSI do EFS. Consulte o artigo Use um recurso do EFS para ver uma lista dos pré-requisitos desta StorageClass. A página do controlador CSI do EFS apresenta parâmetros StorageClass adicionais além dos que constam no manifesto seguinte.
Copie o seguinte manifesto YAML para um ficheiro com o nome
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"
Substituição:
- EFS_STORAGE_CLASS_NAME com o nome do
StorageClass
. - EFS_ID com o ID do sistema de ficheiros EFS, por exemplo, fs-12345678a.
Controlador CSI
Pode especificar um controlador CSI diferente no campo
provisioner
.Para criar uma StorageClass com outro controlador CSI, pode usar o exemplo de YAML 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 controlador 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 o seu controlador CSI.- EFS_STORAGE_CLASS_NAME com o nome do
Aplique o YAML ao seu cluster.
kubectl apply -f my-custom-class.yaml
Crie um PersistentVolumeClaim com uma StorageClass personalizada
Depois de criar uma StorageClass personalizada, pode especificá-la num PVC. O exemplo abaixo cria um PVC denominado
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 predefinida
O GKE no AWS usa uma StorageClass predefinida denominada
standard-rwo
que aprovisiona
volumes EBS gp2. Pode alterar a predefinição para outra StorageClass.
Para alterar a StorageClass predefinida:
Atualize a anotação
is-default-class
para astandard-rwo
StorageClass comkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Crie uma nova StorageClass com a anotação
storageclass.kubernetes.io/is-default-class: true
.O exemplo seguinte de StorageClass usa o controlador
ebs.csi.aws.com
. Para instalar outro controlador de armazenamento, consulte o artigo Instale controladores CSI adicionais.Copie o seguinte YAML para um ficheiro com o nome
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 EBS da AWS que a StorageClass cria.CLASS_NAME
com o nome da sua nova StorageClass
Por exemplo, o seguinte YAML cria uma nova StorageClass predefinida que aprovisiona 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 no AWS usa a my-custom-default-class
StorageClass para novos pedidos de armazenamento.
Referencie a StorageClass num StatefulSet
Para usar a nova StorageClass, tem de fazer referência à mesma no volumeClaimTemplates
de um StatefulSet.
Quando faz referência a uma StorageClass na especificação de um StatefulSet, o Kubernetes fornece armazenamento estável através de PersistentVolumes (PVs).volumeClaimTemplates
O Kubernetes chama o aprovisionador definido na StorageClass para criar um novo volume de armazenamento. Depois de o volume ser aprovisionado, o Kubernetes cria automaticamente um PV.
O StatefulSet seguinte faz referência à my-custom-class
StorageClass e
aprovisiona 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 se segue?
Saiba mais sobre os volumes persistentes e o aprovisionamento dinâmico no GKE.
Instale controladores de CSI adicionais no GKE no AWS.
Implemente a sua primeira carga de trabalho com o Início rápido.