O GKE na AWS implanta automaticamente a Container Storage Interface (CSI), o Amazon Elastic Block Store (EBS) e o Amazon Elastic File Store (EFS)
As versões dos drivers CSI do EBS e EFS do driver CSI do EFS estão vinculadas a uma versão do GKE na AWS Kubernetes. Geralmente, a versão do driver é a mais recente disponível quando a versão do GKE é lançada. Quando o cluster é atualizado, os drivers são atualizados automaticamente.
Usar o StorageClass padrão
Criar um PersistentVolumeClaim sem o campo spec.storageClassName
definido
provisiona um
volume SSD de uso geral (gp2)
usando o GKE padrão no StorageClass do driver CSI no EBS da AWS.
O YAML a seguir cria um PersistentVolumeClaim (PDF) chamado mypvc
com um tamanho
de 30 gibibytes.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Usar um StorageClass pré-instalado diferente
O GKE no driver CSI no EBS da AWS também inclui o StorageClass premium-rwo
, que
provisiona
volumes SSD IOPS provisionado (io1
) de maior capacidade.
É possível 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
Usar um StorageClass personalizado
Se o StorageClass padrão ou premium-rwo
não atender às suas necessidades, você
pode criar StorageClasses adicionais para volumes EBS ou usar
os drivers Container Storage Interface (CSI).
Escolha se você está usando um volume EBS ou outro driver CSI.
Volume do EBS
Esta guia descreve como criar seu próprio StorageClass personalizado que especifica um tipo de volume EBS, um tipo de sistema de arquivos e outros parâmetros. É possível encontrar outros parâmetros StorageClass no GKE na página do GitHub sobre driver CSI no EBS da AWS.
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 do novo StorageClass.Por exemplo, o YAML a seguir cria um novo StorageClass que provisiona volumes EBS de HDD de capacidade otimizada 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
StorageClass do EFS personalizado
Esta guia descreve como criar um StorageClass personalizado para o provisionador de driver CSI da EFS. Consulte Usar um recurso da EFS para ver uma lista dos pré-requisitos para esse StorageClass. A página do driver CSI da EFS lista outros parâmetros StorageClass além daqueles presentes no manifesto a seguir.
Copie o seguinte manifesto do YAML para 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"
Substitua:
- EFS_STORAGE_CLASS_NAME com o nome do
StorageClass
. - EFS_ID pelo ID do sistema de arquivos da EFS, por exemplo, fs-12345678a.
Driver CSI
É possível especificar um driver CSI diferente no campo
provisioner
.Para criar um StorageClass com outro driver CSI, use 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:
CSI_DRIVER_NAME
pelo nome do driver CSI, por exemplo,csi.example.com
;CLASS_NAME
pelo nome do StorageClass, por exemplo,my-custom-class
.
Configure os subcampos em
parameters
de acordo com seu driver CSI.- EFS_STORAGE_CLASS_NAME com o nome do
Aplique o YAML ao cluster.
kubectl apply -f my-custom-class.yaml
Criar um PersistentVolumeClaim com um StorageClass personalizado
Depois que um StorageClass personalizado é criado, é possível especificá-lo em um PVC. O exemplo abaixo cria um PVC chamado
my-pvc
que referencia o StorageClassmy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
Definir o StorageClass padrão
O GKE na AWS usa um StorageClass padrão chamado
standard-rwo
que provisiona
volumes EBS do gp2. É possível alterar o padrão para outro StorageClass.
Para alterar o StorageClass padrão:
Atualize a anotação
is-default-class
do StorageClassstandard-rwo
comkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Crie um novo StorageClass que tenha a anotação
storageclass.kubernetes.io/is-default-class: true
.O StorageClass a seguir usa o driver
ebs.csi.aws.com
. Para instalar outro driver de armazenamento, consulte Instalar outros drivers CSI.Copie o seguinte YAML para 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:
EBS_VOLUME_TYPE
: o tipo de volume EBS da AWS que o StorageClass cria.CLASS_NAME
pelo nome do novo StorageClass.
Por exemplo, o YAML a seguir cria um novo 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 cluster.
kubectl apply -f my-custom-class.yaml
Depois de aplicar esse manifesto, o GKE na AWS usa o StorageClass
my-custom-default-class
para novas solicitações de armazenamento.
Referenciar o StorageClass em um StatefulSet
Para usar o novo StorageClass, refira-se a ele no volumeClaimTemplates
do
StatefulSet.
Quando você se referir a um StorageClass na especificação volumeClaimTemplates
de um StatefulSet, o Kubernetes fornecerá armazenamento estável usando PersistentVolumes (PVs).
O Kubernetes chama o provisionador definido no StorageClass para criar um novo
volume de armazenamento. Depois que o volume for provisionado, o Kubernetes criará
automaticamente um PV.
O StatefulSet a seguir referencia o 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
A seguir
Saiba mais sobre volumes permanentes e provisionamento dinâmico no GKE.
Instale outros drivers CSI no GKE na AWS.
Implante sua primeira carga de trabalho com o Guia de início rápido.