Kubernetes komponensek: a fő elemek érthetően

| Olvasási idő: 4 perc |

Az elmúlt hetekben, hónapokban már sokat olvashattatok a Kubernetes-ről. Azt már mindenki fejből tudja, hogy a Kubernetes egy nyílt forráskódú konténer-orchestrációs rendszer, amely lehetővé teszi a modern, skálázható alkalmazások automatikus telepítését, kezelését és méretezését. Ebben a bejegyzésben a Kubernetes fürt (cluster) fő összetevőit mutatom be, kicsit másképp ahogy esetleg eddig tettem.

Eddig inkább a szerver szintű szerepkörökről és a nagyobb komponensekről beszéltünk. Ideje azonban kicsit mélyebbre ásni.

A Kubernetes-fürt felépítése

Egy Kubernetes-fürt legalább a vezérlősíkból (control plane) és egy vagy több munkavégző csomópontból (worker node) áll. Minden komponens úgy van megtervezve, hogy API-hívásokkal együttműködve biztosítsa az automatizált működést.

A fürt főbb elemei:

kubernetes architecture

Vezérlősík és munkavégző csomópontok

A vezérlősík az agy: feladatai közé tartozik a döntéshozatal, az állapotfigyelés és a feladatkiosztás. A legfontosabb komponensek:

  • kube-apiserver: az API-hívások belépési pontja, a fürt „művészebejárója”.
  • etcd: egy elosztott kulcs-érték adatbázis, amely a fürt állapotát tárolja.
  • kube-scheduler: eldönti, melyik munkavégző csomóponton induljanak el az új kapszulák.
  • kube-controller-manager: különböző vezérlők futtatása (pl. replikáció, csomópontkezelés).
  • cloud-controller-manager (felhőalapú környezeteknél): integráció a felhőszolgáltatóval.

A munkavégző csomópontokon futnak a valódi alkalmazáskonténerek. Ezek fő elemei:

  • kubelet: kapcsolatot tart az aggyal, gondoskodik a kapszulák futtatásáról.
  • kube-proxy: hálózati forgalom továbbítása, szolgáltatások elérésének biztosítása.
  • konténerfuttató: például containerd vagy CRI-O, amely ténylegesen futtatja a konténereket.

Vezérlők (operators)

Az operátorok magas szintű vezérlőprogramok, amelyek egy alkalmazás teljes életciklusát kezelik. Az operátorok Kubernetes API-kra épülnek, és képesek komplex alkalmazások kezelésére úgy, mintha beépített Kubernetes-erőforrások lennének.

Szolgáltatások (services)

A szolgáltatás egy állandó hálózati elérhetőséget biztosít a kapszulák számára. Mivel a kapszulák újraindulhatnak és IP-címük változhat, a szolgáltatás stabil interfészként szolgál.

Típusai:

  • ClusterIP (belső elérés)
  • NodePort (külső elérés egy adott porton)
  • LoadBalancer (felhőalapú betöltéselosztás)

Kapszulák (pods)

A legkisebb végrehajtható egység. Egy kapszula egy vagy több konténert tartalmazhat, amelyek közös IP-címet, fájlrendszert és hálózati környezetet használnak.

A kapszulák rövid életűek és általában replikációs kontrollerek (replica set) vagy telepítések (deployments) által menedzseltek.

Névterek (namespaces) és kvóták

A névterek lehetővé teszik a fürtön belüli erőforrások logikai elhatárolását. Ideálisak például több környezet (pl. fejlesztés, teszt, éles) elkülönítésére.

A kvóták szabályozzák, mennyi erőforrást (CPU, memória, tárolás stb.) használhat egy névtér. (ezen kívül még máshol is lesz szerepe)

Hálózat és házirendek

Minden kapszula teljes mértékben elérheti a többi kapszulát az IP-címükön keresztül – ez a Kubernetes hálózati modell alapelve. A hálózati beállításokat egy plugin (pl. CNI) kezeli.

A hálózati házirendek (NetworkPolicies) szabályozzák, hogy mely kapszulák kommunikálhatnak egymással.

Tárolás (storage)

A tárolási rendszer lehetővé teszi, hogy a kapszulák tartós adatokat használjanak. Ezek lehetnek:

  • Volatile tárolók (pl. emptyDir)
  • Állandó kötés (Persistent Volume)
  • Dinamikus provizionálás (StorageClass)

A tárolást gyakran egy külső szolgáltatás biztosítja (pl. NFS, iSCSI, felhőalapú tárhelyek).

Ezek akkor fontosak, amikor olyan alkalmazásokat futtatunk a cluster-en, amelyeknél fontos az adatok hosszútávú és biztonságos tárolása. Ilyen például egy adatbázis megoldás. (MySQL, MariaDB, stb.)

Egybinárisos architektúra

Több Kubernetes disztribúció kínál „egybinárisos” megoldást, ahol a Kubernetes összetevői egyetlen bináris fájlban kerülnek egyesítésre. Ez különösen hasznos lehet teszteléshez, lokális fejlesztéshez vagy különleges környezetekhez.

Verziófrissítés és kompatibilitás

A fürt frissítése során figyelembe kell venni, hogy az egyes komponenseket külön csapatok fejlesztik, és szorosan illeszkednek egymáshoz. A verziók inkompatibilitása működési hibákat okozhat.

A kubeadm upgrade plan parancs segítségével biztonságosan megtervezhető a frissítés. (Erről is hamarosan lesz cikk.)

Összefoglalás

A Kubernetes egy összetett rendszer, de jól strukturált fő komponensei lehetővé teszik a hatékony, megbízható konténerkezelést. A vezérlősík, munkavégző csomópontok, szolgáltatások, kapszulák és egyéb elemek együttműködésével a fürt képes skálázni, hibatűrő módon működni, és automatizált módon kiszolgálni a modern alkalmazásokat.

Ha szeretnél továbblépni, érdemes gyakorlatban is kipróbálni egy mini-fürtöt akkor több lehetőség közül is választhatsz. Erről itt írtam.

Hidd el! Amint belekóstolsz ebbe a világba, nem fogod tudni abbahagyni. 🙂