O GKE on AWS implementa automaticamente o controlador da interface de armazenamento de contentores (CSI) para o Amazon Elastic Block Store (EBS) para aprovisionar e gerir volumes do Amazon EBS nos seus clusters.
A versão do controlador CSI do EBS do GKE no AWS está associada a uma versão do Kubernetes do GKE no AWS. Normalmente, a versão do controlador é a mais recente disponível quando a versão do GKE é lançada. Quando o cluster é atualizado, os controladores são atualizados automaticamente.
Como usar a StorageClass predefinida
A criação de um PersistentVolumeClaim sem o campo spec.storageClassName
definido
aprovisiona um
volume
com a StorageClass do controlador CSI do EBS do GKE on AWS predefinida.gp2
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
Como usar uma StorageClass pré-instalada diferente
O controlador CSI do EBS do GKE on AWS também inclui a premium-rwo
StorageClass, que
aprovisiona volumes
io1
com maior débito.
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
Como usar uma StorageClass personalizada
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 um controlador CSI específico.
Volume do EBS
Pode 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 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 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
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 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.Aplique o YAML ao seu cluster.
kubectl apply -f my-custom-class.yaml
Como criar 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
Como definir 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 Instalar um controlador CSI.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 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 YAML seguinte cria uma nova StorageClass predefinida que aprovisiona volumes de HDD otimizados para débito EBS formatados com o sistema de ficheiros XFS.
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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
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 no GKE.
Instale controladores de armazenamento no cluster do GKE on AWS.
Implemente a sua primeira carga de trabalho com o Início rápido.