K8s em Exemplos: Classes de Armazenamento

StorageClasses definem “tiers” de storage com diferentes performance, custo e políticas de backup. Elas habilitam provisionamento dinâmico: PVs são criados automaticamente quando PVCs solicitam aquela classe. Sem necessidade de pré-provisionamento.

storageclass.yaml

StorageClass define como provisionar volumes. provisioner é o driver CSI. parameters configuram o tipo de storage. volumeBindingMode controla quando volumes são criados.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "3000"
  throughput: "125"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
storageclass-provisioners.yaml

Provisioners criam o storage real. Exemplos: AWS EBS CSI (tipos: gp2, gp3, io1, io2), Azure Disk CSI (Standard_LRS, Premium_LRS, StandardSSD_LRS), GCE PD CSI (pd-standard, pd-ssd, pd-balanced), NFS CSI. CSI (Container Storage Interface) é o padrão moderno.

provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  encrypted: "true"
---
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_LRS
---
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
---
provisioner: nfs.csi.k8s.io
parameters:
  server: nfs-server.example.com
  share: /exports
storageclass-binding.yaml

Modos de binding de volume controlam quando PVs são criados. Immediate: PV criado quando PVC é criado (pode ser zone errada). WaitForFirstConsumer: PV criado quando Pod é agendado, garantindo mesma zone que Pod, evita problemas cross-zone, necessário para volumes locais, recomendado para storage cloud.

volumeBindingMode: Immediate
---
volumeBindingMode: WaitForFirstConsumer
storageclass-params.yaml

Parameters são passados para o provisioner. Primeiro exemplo: AWS EBS com criptografia e IOPS customizado. Segundo exemplo: Azure com tier específico. Terceiro exemplo: GCE com replicação multi-zone. Verifique documentação do seu driver CSI para opções disponíveis.

parameters:
  type: io2
  iops: "10000"
  encrypted: "true"
  kmsKeyId: arn:aws:kms:us-west-2:123456789:key/abcd-1234
  fsType: ext4
---
parameters:
  skuName: Premium_LRS
  cachingMode: ReadOnly
  fsType: ext4
---
parameters:
  type: pd-ssd
  replication-type: regional-pd
storageclass-reclaim.yaml

Reclaim policy na StorageClass define padrão para PVs criados dinamicamente. Delete: PV removido quando PVC deletado (padrão, use para dev/test). Retain: PV mantido (use para dados de produção que não pode perder). Políticas de reclaim de PV individual podem ser alteradas após criação.

reclaimPolicy: Delete
---
reclaimPolicy: Retain
storageclass-default.yaml

StorageClass padrão é usada quando PVC não especifica storageClassName. Marque uma StorageClass como padrão. Apenas uma deve ser padrão por cluster para evitar confusão.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
storageclass-topology.yaml

Topologias permitidas restringem onde volumes podem ser provisionados. Volumes só criados em zones especificadas; Pods usando esta classe agendados nessas zones. Funciona com WaitForFirstConsumer para garantir que Pod e volume estejam co-localizados.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: zone-a-storage
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
  - matchLabelExpressions:
      - key: topology.kubernetes.io/zone
        values:
          - us-west-2a
          - us-west-2b
terminal

Debug problemas de storage verificando configuração de StorageClass e logs do provisioner. Mount options são passadas para o comando mount ao anexar o volume.

$ kubectl get storageclass
NAME                 PROVISIONER             RECLAIMPOLICY
standard (default)   ebs.csi.aws.com         Delete
fast-ssd             ebs.csi.aws.com         Retain
nfs-storage          nfs.csi.k8s.io          Delete

$ kubectl describe storageclass fast-ssd
Name:            fast-ssd
Provisioner:     ebs.csi.aws.com
Parameters:      iops=3000,throughput=125,type=gp3
ReclaimPolicy:   Retain
VolumeBindingMode: WaitForFirstConsumer

$ kubectl patch pv pv-data \
    -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
persistentvolume/pv-data patched

$ kubectl logs -n kube-system -l app=ebs-csi-controller

Índice | GitHub | Use as setas do teclado para navegar |