O GKE na AWS implanta automaticamente o driver da Container Storage Interface (CSI) para o Amazon Elastic Block Store (EBS) para provisionar e gerenciar volumes do Amazon EBS em seus clusters.
A versão do driver CSI do GKE no AWS EBS está vinculada a uma versão do GKE no AWS Kubernetes. A versão do driver normalmente é a mais recente disponível quando a versão do GKE é lançada. Quando o cluster é atualizado, os drivers são atualizados automaticamente.
Como usar o StorageClass padrão
A criação de um PersistentVolumeClaim sem o campo spec.storageClassName
define o provisionamento de um volume 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
Como usar um StorageClass pré-instalado diferente
O driver GKE no AWS EBS CSI também inclui o StorageClass premium-rwo
, que provisiona volumes 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
Como usar uma StorageClass personalizada
Você pode 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 um driver CSI específico.
Volume EBS
Você pode criar sua própria StorageClass personalizada que especifica um tipo de volume do EBS, um tipo de sistema de arquivos e outros parâmetros. Você pode encontrar parâmetros adicionais da StorageClass na página do driver CSI do GKE no AWS EBS 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 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
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 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.-
Aplique o YAML ao seu cluster.
kubectl apply -f my-custom-class.yaml
Como criar 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
Como definir o 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 Instalando um driver CSI .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 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 EBS de HDD otimizados para throughput formatados com o sistema de arquivos 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 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 no GKE .
Instale drivers de armazenamento no seu cluster GKE na AWS.
Implante sua primeira carga de trabalho com o Início rápido .