Det finnes flere mĂ„ter Ă„ konfigurere datalagring for applikasjoner som kjĂžrer i Kubernetes-klyngen. Noen av dem er utdaterte, mens andre har oppstĂ„tt nylig. I artikkelen vil vi se pĂ„ konseptet med tre alternativer for tilkobling av lagringssystemer, inkludert den nyeste â tilkoblingen via Container Storage Interface.

Metode 1. Angi PV i pod-manifestet
Et typisk manifest som beskriver en pod i Kubernetes-klyngen:

Deler av manifestet er uthevet med farge for Ă„ vise hvilken volum som kobles til og hvor.
I delen volumeMounts angir man monteringspunkter (mountPath) â i hvilken katalog inne i containeren det vedvarende volumet skal monteres, samt navnet pĂ„ volumet.
I delen x anger alle volumene som brukes i pod-en. Man angir navnet til hvert volum, samt typen (i vÄrt tilfelle: awsElasticBlockStore) og tilkoblingsparametrene. Hvilke parametere som spesifiseres i manifestet, avhenger av typen volum.
Det samme volumet kan monteres samtidig i flere containere i pod-en. Dermed kan forskjellige prosesser av applikasjonen fÄ tilgang til de samme dataene.
Denne metoden for tilkobling ble utviklet i begynnelsen, da Kubernetes nettopp ble til, og er i dag utdatert.
Ved bruk av denne metoden oppstÄr det flere problemer:
- alle volumene mÄ opprettes manuelt; Kubernetes kan ikke opprette noe for oss;
- tilgangsparametrene for hvert volum er unike, og de mÄ spesifiseres i manifestene til alle pod-er som bruker volumet;
- for Ä endre lagringssystemet (for eksempel Ä flytte fra AWS til Google Cloud), mÄ man endre innstillingene og typen av tilkoblede volum i alle manifestene.
Alt dette er veldig upraktisk, sÄ i virkeligheten brukes denne metoden kun for tilkobling av noen spesielle typer volumer: configMap, secret, emptyDir, hostPath:
configMap og secret â systemvolumer, lar deg opprette et volum i containeren med filer fra Kubernetes-manifester.
emptyDir â midlertidig volum, opprettes kun sĂ„ lenge pod-en lever. Praktisk Ă„ bruke for testing eller lagring av midlertidige data. NĂ„r pod-en slettes, slettes ogsĂ„ emptyDir-volumet, og alle data gĂ„r tapt.
hostPath â lar larer Ă„ montere inn i containeren med applikasjonen enhver katalog fra den lokale disken til serveren der applikasjonen kjĂžrer, inkludert /etc/kubernetes. Dette er en usikker funksjon, sĂ„ sikkerhetspolicyer forbyr vanligvis bruken av volumer av denne typen. Ellers kan en angripers applikasjon montere katalogen HTC Kubernetes inn i sin egen container og stjele alle sertifikatene i klyngen. Som regel tillates hostPath-volumer kun for systemapplikasjoner som kjĂžrer i kube-system-namespacet.
er beskrevet i dokumentasjonen.
Metode 2. Tilkobling til podene SC/PVC/PV
Et alternativ for tilkobling er konseptet Storage class, PersistentVolumeClaim, PersistentVolume.
Storage class lagrer tilkoblingsparametere til lagringssystemet.
PersistentVolumeClaim beskriver kravene til volumet som applikasjonen trenger.
PersistentVolume lagrer tilgangsparametere og status for volumet.
Kjernen i ideen: i manifestet til poden angir man volumet av typen PersistentVolumeClaim og spesifiserer navnet pÄ denne entiteten i parameteren claimName.

I manifestet PersistentVolumeClaim beskriver man krav til datavolumet som er nĂždvendig for applikasjonen. Blant annet:
- stÞrrelsen pÄ disken;
- tilgangstype: ReadWriteOnce eller ReadWriteMany;
- lenke til Storage class â i hvilket lagringssystem vi Ăžnsker Ă„ opprette volumet.
I manifestet Storage class lagres type og tilkoblingsparametere til lagringssystemet. Dette er nĂždvendig for kubelet for Ă„ montere volumet til sin node.
I manifestene til PersistentVolume angis Storage class og tilgangsparametere til det spesifikke volumet (volum-ID, bane, osv.).
NÄr en PVC opprettes, vurderer Kubernetes hvilket volum som er nÞdvendig stÞrrelse og fra hvilken Storage class, og finner en tilgjengelig PersistentVolume.
Hvis det ikke finnes slike PV-er tilgjengelig, kan Kubernetes starte et spesialprogram â Provisioner (navnet pĂ„ dette angis i Storage class). Dette programmet kobler til SAN, oppretter volumet i Ăžnsket stĂžrrelse, fĂ„r en identifikator og oppretter et manifest for PersistentVolume i Kubernetes-klyngen, som knyttes til PersistentVolumeClaim.
Alle disse abstraksjonene gjÞr det mulig Ä skjule informasjon om hvilket SAN applikasjonen jobber med, fra applikasjonsmanifestnivÄet til administrasjonsnivÄet.
Alle tilkoblingsparametere til lagringssystemet finnes i Storage class, som administratÞrer av klyngen har ansvar for. Alt som mÄ gjÞres nÄr man flytter fra AWS til Google Cloud, er Ä endre navnet pÄ Storage class i PVC i applikasjonsmanifestene. Persistance Volume for lagring av data vil bli opprettet automatisk i klyngen ved hjelp av Provisioner-programmet.
Metode 3. Container Storage Interface
All kode som interagerer med ulike lagringssystemer er en del av kjernen i Kubernetes. Utgivelse av feilrettinger eller ny funksjonalitet er knyttet til nye utgivelser, og koden mÄ endres for alle stÞttede versjoner av Kubernetes. Dette er vanskelig Ä vedlikeholde og legge til nye funksjoner.
For Ă„ lĂžse problemet, utviklet utviklerne fra Cloud Foundry, Kubernetes, Mesos og Docker Container Storage Interface (CSI) â et enkelt, ensartet grensesnitt som beskriver interaksjonen mellom containeradministrasjonssystemet og en spesialisert driver (CSI Driver) som arbeider med spesifikke lagringssystemer. All koden for interaksjon med lagringssystemet ble flyttet ut av kjernen i Kubernetes til et eget system.
.
Som regel bestÄr CSI Driver av to komponenter: Node Plugin og Controller Plugin.
Node Plugin kjÞres pÄ hver node og er ansvarlig for montering av volumer og operasjoner pÄ dem. Controller Plugin interagerer med lagringssystemet: oppretter eller sletter volumer, tildeler tilgangsrettigheter osv.
SĂ„ lenge gamle drivere er igjen i kjernen av Kubernetes, er det ikke lenger anbefalt Ă„ bruke dem, og alle anbefales Ă„ installere CSI Driver spesielt for det systemet man skal jobbe med.
Innovasjonen kan skremme de som allerede er vant til Ă„ konfigurere datalagring via Storage class, men egentlig har ingenting dramatisk skjedd. For programmererne endres ingenting â de vil fortsatt jobbe med navnet Storage class. For administratorer har installasjon av helm chart blitt lagt til, og strukturen av innstillingene har endret seg. Hvis tidligere innstillingene ble skrevet direkte i Storage class, mĂ„ de nĂ„ defineres i helm chart fĂžrst, og deretter i Storage class. Hvis man finner ut av det, har ingenting dramatisk skjedd.
La oss se pÄ et eksempel for Ä vurdere hvilke fordeler man kan oppnÄ ved Ä gÄ over til tilkobling av lagringssystemet Ceph ved hjelp av CSI-driveren.
NÄr man arbeider med Ceph, gir CSI-pluginen flere muligheter for Ä jobbe med lagringssystemet enn de innebygde driverne.
- Dynamisk opprettelse av disker. Vanligvis brukes RBD-disker bare i RWO-modus, men CSI for Ceph lar deg bruke dem i RWX-modus. Flere pod-er pĂ„ forskjellige noder kan montere den samme RDB-disken og jobbe med dem parallelt. For rettferdighetens skyld, alt er ikke sĂ„ strĂ„lende â denne disken kan bare kobles til som et blokkapparat, sĂ„ du mĂ„ tilpasse applikasjonen for Ă„ fungere med den i flere tilkoblingsmoduser.
- Opprettelse av snapshots. I Kubernetes-klyngen kan du lage et manifest som ber om Ä opprette et snapshot. CSI-plugin vil se det og ta et snapshot av disken. Basert pÄ det kan du lage enten en backup eller en kopi av PersistentVolume.
- Ăke stĂžrrelsen pĂ„ disken pĂ„ SAN og PersistentVolume i Kubernetes-klyngen.
- Kvoter. Innebygde Kubernetes-drivere for CephFS stÞtter ikke kvoter, men nye CSI-plugins med den nyeste Ceph Nautilus versjonen kan aktivere kvoter pÄ CephFS-partisjoner.
- Metrikker. CSI-plugin kan returnere mange metrikker til Prometheus om hvilke volum som er tilkoblet, hvilke interaksjoner som foregÄr, osv.
- Topology aware. Lar deg angi i manifestene hvordan den geografiske distribusjonen av klyngen er, og unngÄ tilkoblinger til pod-er som kjÞrer i London fra lagringssystemet plassert i Amsterdam.
Hvordan koble Ceph til Kubernetes-klyngen via CSI, se . Du kan ogsÄ melde deg pÄ , som starter 15. oktober.
Artikkelforfatter: Sergey Bondarev, praktiserende arkitekt i Southbridge, Certified Kubernetes Administrator, en av utviklerne av kubespray.
Litt Post Scriptum ikke reklame for, men for nytte...
P.S. Sergey Bondarev holder to intensive kurs: den oppdaterte 28-30 september og avansert 14â16 oktober.

Kilde: habr.com
