Dat lagring i en Kubernetes-kluster

Datastore för applikationer som körs i en Kubernetes-kluster kan konfigureras pĂ„ flera sĂ€tt. Vissa av dem Ă€r redan förĂ„ldrade, medan andra har dykt upp nyligen. I denna artikel kommer vi att gĂ„ igenom konceptet med tre sĂ€tt att ansluta lagringssystem, inklusive den senaste — anslutning via Container Storage Interface.

Dat lagring i en Kubernetes-kluster

SĂ€tt 1. Angivande av PV i podens manifest

Ett typiskt manifest som beskriver en pod i Kubernetes-klustret:

Dat lagring i en Kubernetes-kluster

Delarna av manifestet som beskriver vilken volym som ansluts och var, markeras med fÀrg.

I avsnittet volumeMounts anger monteringspunkterna (mountPath) — i vilken mapp inom containern den persistenta volymen kommer att monteras, samt volymens namn.

I avsnittet x anger alla volymer som anvÀnds i podden. Anger namnet pÄ varje volym samt typ (i vÄrt fall: awsElasticBlockStore) och anslutningsparametrar. Vilka specifika parametrar som anges i manifestet beror pÄ volymtypen.

Samma volym kan monteras samtidigt i flera containrar i podden. PÄ sÄ sÀtt kan olika processer av applikationen fÄ tillgÄng till samma data.

Denna anslutningsmetod uppfanns i början, nÀr Kubernetes just började utvecklas, och idag anses metoden vara förÄldrad.

Det finns flera problem med att anvÀnda det:

  1. alla volymer mÄste skapas manuellt, Kubernetes kan inte skapa nÄgot Ät oss;
  2. Ätkomlighetsparametrarna för varje volym Àr unika och mÄste anges i manifesten för alla pods som anvÀnder volymen;
  3. för att byta lagringssystem (till exempel flytta frÄn AWS till Google Cloud) mÄste instÀllningarna och typen av anslutna volymer Àndras i alla manifest.

Allt detta Àr mycket opraktiskt, sÄ i verkligheten anvÀnds denna metod endast för att ansluta vissa speciella typer av volymer: configMap, secret, emptyDir, hostPath:

  • configMap och secret — tjĂ€nstefunktioner som gör det möjligt att skapa en volym i containern med filer frĂ„n Kubernetes-manifesten.

  • emptyDir — en temporĂ€r volym som endast skapas under podens livstid. Den Ă€r praktisk att anvĂ€nda för testning eller för att lagra temporĂ€ra data. NĂ€r podden tas bort, tas Ă€ven emptyDir-volymen bort och all data gĂ„r förlorad.

  • hostPath - gör det möjligt att montera valfri katalog frĂ„n den lokala serverdisk dĂ€r applikationen körs inuti containern, inklusive /etc/kubernetes. Detta Ă€r en osĂ€ker funktion, vilket gör att sĂ€kerhetspolicyer vanligtvis förbjuder anvĂ€ndning av den hĂ€r typen av volymer. Annars kan en angripares applikation montera katalogen HTC Kubernetes inuti sin container och stjĂ€la alla klustercertifikat. Som regel tillĂ„ts hostPath-volymer endast för systemapplikationer som körs i kube-system-namnomrĂ„det.

Lagringssystem som Kubernetes arbetar med direkt ur boxen anges i dokumentationen.

Metod 2. Anslutning till poddar SC/PVC/PV

Ett alternativt sÀtt att ansluta Àr konceptet Storage class, PersistentVolumeClaim, PersistentVolume.

Storage class lagrar anslutningsparametrar till lagringssystemet.

PersistentVolumeClaim beskriver kraven för den volym som applikationen behöver.
PersistentVolume lagrar Ätkomstparametrar och status för volymen.

Huvudidén Àr att i podens manifest ange en volym av typen PersistentVolumeClaim och ange namnet pÄ denna entitet i parametern claimName.

Dat lagring i en Kubernetes-kluster

I manifestet för PersistentVolumeClaim beskriver man kraven pÄ de data som applikationen behöver. Bland annat:

  • diskstorlek;
  • Ă„tkomstmetod: ReadWriteOnce eller ReadWriteMany;
  • lĂ€nk till Storage class - i vilket lagringssystem vi vill skapa volymen.

I manifestet för Storage class lagras typen och anslutningsparametrarna till lagringssystemet. Dessa Àr nödvÀndiga för kubelet att montera volymen pÄ sin nod.

I manifesten för PersistentVolume anges Storage class och Ätkomstparametrar för en specifik volym (volymens ID, sökvÀg, etc.).

NÀr en PVC skapas, kontrollerar Kubernetes vilken storlek och vilken Storage class som behövs och vÀljer en ledig PersistentVolume.

Om det inte finns nÄgra sÄdana PV tillgÀngliga kan Kubernetes starta ett specialprogram - Provisioner (dess namn anges i Storage class). Detta program ansluter till lagringssystemet, skapar en volym av rÀtt storlek, fÄr ett ID och skapar en PersistentVolumes manifest i Kubernetes-klustret som kopplas till PersistentVolumeClaim.

Alla dessa abstraktioner gör det möjligt att eliminera information om vilket lagringssystem applikationen arbetar med frÄn nivÄn av applikationsmanifestet till nivÄ av administration.

Alla anslutningsparametrar till lagringssystemet finns i Storage class, som administratörer av klustret ansvarar för. För att flytta frÄn AWS till Google Cloud behöver man bara Àndra namnet pÄ Storage class i PVC-filerna. Persistance Volume för datalagring kommer automatiskt att skapas i klustret med hjÀlp av programmet Provisioner.

Metod 3. Container Storage Interface

All kod som interagerar med olika lagringssystem Àr en del av Kubernetes-kÀrnan. UtfÀrdande av buggfixar eller ny funktionalitet Àr kopplat till nya versioner, och koden mÄste Àndras för alla stödja versioner av Kubernetes. Allt detta Àr svÄrt att underhÄlla och lÀgga till ny funktionalitet.

För att lösa problemet skapade utvecklare frĂ„n Cloud Foundry, Kubernetes, Mesos och Docker Container Storage Interface (CSI) — ett enkelt, enhetligt grĂ€nssnitt som beskriver interaktionen mellan containerhanteringssystemet och en speciell drivrutin (CSI Driver) som arbetar med ett specifikt lagringssystem. All kod för interaktion med lagringssystemet flyttades frĂ„n Kubernetes-kĂ€rnan till ett separat system.

Dokumentation för Container Storage Interface.

Som regel bestÄr CSI Driver av tvÄ komponenter: Node Plugin och Controller plugin.

Node Plugin körs pÄ varje nod och ansvarar för att montera volymer och för operationer pÄ dem. Controller plugin interagerar med lagringssystemet: skapar eller tar bort volymer, tilldelar ÄtkomstrÀttigheter, etc.

Även om gamla drivrutiner fortfarande finns i Kubernetes-kĂ€rnan rekommenderar man inte att anvĂ€nda dem lĂ€ngre, och alla uppmanas att installera CSI Driver specifikt för det system man ska arbeta med.

Nyheten kan skrÀmma dem som redan Àr vana vid att konfigurera datalagring via Storage class, men egentligen har inget hemskt hÀnt. För programmerarna förÀndras inget; de fortsÀtter att arbeta med namnet Storage class. För administratörerna har installationen av helm chart tillkommit och strukturen för instÀllningarna har förÀndrats. Tidigare angavs instÀllningarna direkt i Storage class, men nu mÄste de först definieras i helm chart och sedan i Storage class. Om man undersöker saken har inget hemskt intrÀffat.

LÄt oss med ett exempel titta pÄ vilka fördelar man kan fÄ genom att ansluta lagringssystemet Ceph med hjÀlp av CSI-drivrutinen.

Vid arbete med Ceph ger CSI-plugin fler möjligheter för att arbeta med lagringssystemet Àn inbyggda drivrutiner.

  1. Dynamisk skapelse av diskar. Normalt anvĂ€nds RBD-diskar endast i RWO-lĂ€ge, medan CSI för Ceph gör det möjligt att anvĂ€nda dem i RWX-lĂ€ge. Flera poddar pĂ„ olika noder kan montera samma RBD-disk till sina noder och arbeta med den parallellt. För att vara rĂ€ttvis, Ă€r inte allt sĂ„ rosenskimrande — den hĂ€r disken kan endast anslutas som en blockenhet, vilket innebĂ€r att applikationen mĂ„ste anpassas för att fungera med den i lĂ€ge för multipel Ă„tkomst.
  2. Skapa ögonblicksbilder. I Kubernetes-klustret kan man skapa ett manifest som begÀr att en ögonblicksbild ska skapas. CSI-pluginet ser det och skapar en ögonblicksbild frÄn disken. UtifrÄn det kan man göra antingen en sÀkerhetskopia eller en kopia av PersistentVolume.
  3. Öka storleken pĂ„ disken pĂ„ lagringssystemet och PersistentVolume i Kubernetes-klustret.
  4. Kvoter. Inbyggda Kubernetes-drivrutiner för CephFS stöder inte kvoter, medan nya CSI-plugins med den senaste Ceph Nautilus kan aktivera kvoter pÄ CephFS-partitioner.
  5. Metrik. CSI-pluginet kan tillhandahÄlla en mÀngd metrik i Prometheus om vilka volymer som Àr anslutna, vilka interaktioner som sker osv.
  6. Topologiskt medveten. Möjliggör att ange i manifest att klustret Àr geografiskt distribuerat och undvika anslutning till pods som körs i London med lagringssystem som Àr placerade i Amsterdam.

För att ansluta Ceph till Kubernetes-klustret via CSI, se den praktiska delen av förelÀsningen i kvÀllsskolan Slyrme. Man kan ocksÄ prenumerera pÄ videokursen Ceph, som startar den 15 oktober.

Författare till artikeln: Sergey Bondarev, verksam arkitekt pÄ Southbridge, Certified Kubernetes Administrator, en av utvecklarna av kubespray.

Lite Post Scriptum inte för reklam, utan för nytta...

P.S. Sergey Bondarev hĂ„ller tvĂ„ intensiver: uppdaterad Kubernetes Grund 28-30 september och avancerad Kubernetes Mega 14–16 oktober.

Dat lagring i en Kubernetes-kluster

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster