Configuração de Armazenamento no Kubernetes

Testando PV e PVC em Ambiente Local

Exemplo básico de PersistentVolume (PV) e PersistentVolumeClaim (PVC):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: volume-dados
spec:
  capacity: 
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /dados/armazenamento

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pedido-volume 
spec:
  resources:
    requests:
      storage: 2Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: ""  # Impede vinculação automática a StorageClasses

---
apiVersion: v1
kind: Pod
metadata:
  name: app-mongo 
spec:
  containers:
  - image: mongo
    name: contêiner-mongo
    volumeMounts:
    - name: dados-mongo
      mountPath: /db/dados
  volumes:
  - name: dados-mongo
    persistentVolumeClaim:
      claimName: pedido-volume

PVCs com storageClassName: "" vinculam-se apenas a PVs sem classe definida. PVs sem classe não são removidos automaticaemnte para evitar perda de dados.

Vinculação com StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rapido
provisioner: docker.io/hostpath
parameters:
  tipo: ssd

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pedido-rapido 
spec:
  storageClassName: rapido
  resources:
    requests:
      storage: 200Mi
  accessModes:
    - ReadWriteOnce

---
apiVersion: v1
kind: Pod
metadata:
  name: app-banco 
spec:
  containers:
  - image: mongo
    name: contêiner-banco
    volumeMounts:
    - name: volume-ssd
      mountPath: /dados
  volumes:
  - name: volume-ssd
    persistentVolumeClaim:
      claimName: pedido-rapido

StatefulSets com Armazenamento

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: app-stateful
spec:
  serviceName: servico-stateful
  replicas: 2
  selector:
    matchLabels:
      app: stateful-app
  template:
    metadata:
      labels:
        app: stateful-app
    spec:
      containers:
      - name: contêiner-app
        image: nginx
        volumeMounts:
        - name: dados-estado
          mountPath: /dados
  volumeClaimTemplates:
  - metadata:
      name: dados-estado
    spec:
      storageClassName: ""
      resources:
        requests:
          storage: 1Gi
      accessModes:
      - ReadWriteOnce

Saída típica de verificação:

kubectl get pv
NAME   CAPACITY ACCESS MODES STATUS     CLAIM
pv-1   1Gi      RWO          Bound      default/dados-estado-app-stateful-0
pv-2   1Gi      RWO          Bound      default/dados-estado-app-stateful-1
pv-3   1Gi      RWO          Available

kubectl get pvc
NAME                          STATUS VOLUME CAPACITY
dados-estado-app-stateful-0   Bound  pv-1   1Gi
dados-estado-app-stateful-1   Bound  pv-2   1Gi

Tags: kubernetes persistentvolume persistentvolumeclaim StorageClass statefulset

Publicado em 7-19 03:13