Úložisko v Kubernetes

Udržanie stavu aplikácie

Aplikácie využívajú disky z rôznych príčin:

  • konfigurácia
  • dáta v databáze
  • dočasná vyrovnávacia pamäť (cache)

Udržanie stavu aplikácie

Stav aplikácie musí byť oddelený od procesu

  • pomocou aplikačného protokolu.
  • pomocu mapovania zväzkov alebo virtuálnych blokových zariadení
  • využitím lokálnych diskov alebo lokálneho súborového systému
  • využitím RAM disku

Manažment úložiska na úrovni aplikácie

  • object storage (minio)
  • relational database (postgres, mariadb)

Kubernetes "nevie" o diskovom priestore

Manažment stavu na úrovni klastra

  • lokálny adresár alebo disk
  • distributed fs (ceph, gluster)
  • networked fs (nfs, smb)

Manažment stavu na úrovni Kubernetes

https://docs.microsoft.com/en-us/azure/aks/concepts-storage

Kuberntes "obalí" úložisko do svojho objektu.

  • Volumes
  • StorageClasse
  • PersistentVolumes
  • PersistentVolumeClaims
  • StatefulSet

PersistentVolume

  • Deklarujeme zväzky k dispozícii
  • "Obalí" konkrétnu zložku alebo blokové zariadenie

Prístup k zložke je:

  • lokálny
  • NFS, SMB
  • iSCSI
  • Iný sieťový protokol

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#raw-block-volume-support,

Druhy PersistentVolume

  • csi - Container Storage Interface (CSI)
  • fc - Fibre Channel (FC) storage
  • hostPath - HostPath volume (for single node testing only; WILL NOT WORK in a multi-node cluster; consider using local volume instead)
  • iscsi - iSCSI (SCSI over IP) storage
  • local - local storage devices mounted on nodes.
  • nfs - Network File System (NFS) storage

Vytváranie trvalých zväzkov

Statické mapovanie.

  • PersistentVolume vytvorí administrátor (kubectl apply).

Dynamické mapovanie.

  • Pomenovaný zväzok vytvorí aplikácia na požiadanie pomocou objektu PersistentVolumeClaim.

Afinita: Zväzok bude naviazaný na konkrétny uzol.

Dynamické mapovanie

Potrebujeme:

  • StorageClass: Oznámi, že máme k disspozícii priestor na požiadanie
  • Provisioner: Vykoná požiadavku na pridelenie úložiska

PersistentVolumeClaim

Objekt ktorý patrí k aplikácii, vytvárame ho spolu s Deployment alebo StatefulSet

  • deklarujeme požiadavku na nejaký PersistentVolume
  • definuje väzbu medzi aplikáciou a úložiskom

Prístup k lokálnemu alebo distribuovanému súborovému systému

Vytváranie väzby na úložisko

+------------+ Binding +--------------+
| Persistent |<--------| Persistent   |
| Volume     |         | Volume Claim |
+------------+         +--------------+
 Hardware                  Container

StatefulSet

(podobné ako Deployment)

Deklarujeme PODy ktoré aplikácia potrebuje

Deklarujeme nároky aplikácie na zväzky

StatefulSet je závislý na PersistentVolume.

StatefulSet

  • riadi POD pomocou ReplicaSet
  • Stará sa aj o PersistentVolume pomocou PersistentVolumeClaim
        Storage
  +------------------+
  | PersistentVolume |     LoadBalancer
  +------------------+
     ^ P.V.Claim               ^
     |                         |
  +--------------+ Port  +-----------+
  | POD Template |------>| Service   |
  |  ReplicaSet  |       +-----------+
  |  StatefulSet |
  +--------------+
        node

Manažment úložiska je komplikovaný

Najhoršia úloha je "uvoľniť" 2 TB disk plný rôznych dát

Reload?