A Kubernetes működése

Befejeződött

A Kubernetes-telepítés konfigurálásának sikeressége a Kubernetes rendszerarchitektúrájának megfelelő ismeretétől függ. Itt áttekintheti a Kubernetes-telepítést alkotó összes összetevőt.

Mi az a számítási fürt?

A fürt számítógépek halmaza, amelyeket együttes munkavégzésre konfigurál, és ezekre így egyetlen rendszerként tekint. A fürtben konfigurált számítógépek ugyanazokat a feladatokat kezelik. Például mindegyikük webhelyeket vagy API-kat üzemeltet, esetleg számításigényes feladatokat futtat.

A fürt központosított szoftvert használ, amely a feladatok ütemezéséért és vezérléséért felelős. A feladatokat futtató fürtben lévő számítógépeket csomópontoknak, az ütemezési szoftvert futtató számítógépeket pedig vezérlősíkoknak nevezzük.

Diagram of a computer cluster that shows how a task is distributed via the control plane to three nodes and the interaction between the nodes.

Kubernetes-architektúra

Ahogy korábban már említettük, a vezénylő egy olyan rendszer, amely telepíti és felügyeli az alkalmazásokat. Azt is megtanulta, hogy a fürtök olyan számítógépek, amelyek együttműködnek, és egyetlen rendszerként vannak megtekintve. A Kubernetest az alkalmazások üzembe helyezéséhez és a számítási erőforrásokra vonatkozó igények változására való reagáláshoz használhatja vezénylési és fürtszoftverként.

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane and the worker nodes.

Egy Kubernetes-fürt legalább egy fő vezérlősíkot, és egy vagy több további csomópontot tartalmaz. A vezérlősík és a csomópontpéldányok is lehetnek fizikai eszközök, virtuális gépek vagy felhőbeli példányok. A Kubernetesben a gazdagép alapértelmezett operációs rendszere a Linux, és alapértelmezés szerint a Linux-alapú számítási feladatokat támogatja.

A Microsoft számítási feladatait a Windows Server 2019 vagy újabb verziójával is futtathatja fürtcsomópontokon. Tegyük fel például, hogy a drónkövető alkalmazás adatfeldolgozási szolgáltatása .NET 4.5-alkalmazásként van megírva, amely meghatározott Windows OS API-hívásokat használ. Ez a szolgáltatás csak Windows Server operációs rendszert futtató csomópontokon futtatható.

Most tekintse meg részletesebben a vezérlősíkokat és a feldolgozó csomópontokat, valamint az egyes szoftvereket. Az egyes összetevők szerepkörének és annak a megértése, hogy az egyes összetevők hol üzemelnek a fürtben segít a Kubernetes telepítésekor.

Kubernetes-vezérlősík

A Kubernetes vezérlősíkja olyan szolgáltatások gyűjteményét futtatja, amelyek a Kubernetesben a vezénylési funkciókat kezelik.

Tanulási szempontból érdemes egyetlen vezérlősíkot használni a tesztkörnyezetben a Kubernetes funkcióinak megismerése során. Az éles és felhőbeli üzemelő példányokban, például az Azure Kubernetes Service-ben (AKS) azonban azt tapasztalja, hogy az előnyben részesített konfiguráció egy magas rendelkezésre állású üzembe helyezés három-öt replikált vezérlősíkkal.

Megjegyzés:

Az, hogy egy vezérlősík adott szoftvert futtat a fürt állapotának fenntartása érdekében, nem zárja ki, hogy más számítási feladatokat is futtasson. A vezérlősíkot azonban általában ajánlott kizárni a nem kritikus és a felhasználói alkalmazások számítási feladatainak futtatásából.

Kubernetes-csomópont

A Kubernetes-fürtben azt nevezzük csomópontnak, ahol a számítási feladatok futnak. Az egyes csomópontok az API-kiszolgáló használatával kommunikálnak a vezérlősíkkal, hogy tájékoztassák a csomóponton történt állapotváltozásokról.

Vezérlősíkon futó szolgáltatások

A Kubernetes a vezérlősíkon futó több adminisztratív szolgáltatásra is támaszkodik. Ezek a szolgáltatások olyan szempontokat kezelnek, mint a fürtösszetevők közötti kommunikáció, a számítási feladatok ütemezése és a fürtállapot megőrzése.

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane.

A következő szolgáltatások alkotják a Kubernetes-fürt vezérlősíkját:

  • API-kiszolgáló
  • Háttértár
  • Scheduler
  • Vezérlőkezelő
  • Felhőbeli vezérlőkezelő

Mi az az API-kiszolgáló?

Az API-kiszolgálót a Kubernetes-fürt vezérlősíkjának előtereként tekintheti. A Kubernetes összetevői közötti összes kommunikáció ezen az API-n keresztül történik.

Felhasználóként például egy olyan parancssori alkalmazást használ, amelynek segítségével kubectl parancsokat futtathat a Kubernetes-fürt API-kiszolgálóján. Az API-t biztosító összetevő neve kube-apiserver, és az összetevő több példányát is telepítheti a fürt méretezésének támogatásához.

Ez az API elérhetővé tesz egy RESTful API-t, amellyel parancsokat vagy YAML-alapú konfigurációs fájlokat tehet közzé. A YAML egy emberek által olvasható adatszerializálási szabvány programozási nyelvekhez. A YAML-fájlok használatával határozhatja meg a Kubernetes-fürtön belüli összes objektum kívánt állapotát.

Tegyük fel például, hogy növelni szeretné az alkalmazás példányainak számát a fürtben. Az új állapotot YAML-alapú fájllal definiálhatja, és elküldheti ezt a fájlt az API-kiszolgálónak. Az API-kiszolgáló ellenőrzi a konfigurációt, menti azt a fürtbe, és végre életbe lépteti az alkalmazástelepítések konfigurált növelését.

Mi az a háttértár?

A háttértár egy állandó tároló, amelyben a Kubernetes-fürt menti a befejezett konfigurációt. A Kubernetes egy magas rendelkezésre állású, elosztott és megbízható kulcs-érték tárolót használ, melynek neve etcd. Ez a kulcs-érték tároló a fürtben lévő összes objektum aktuális állapotát és a kívánt állapotát tárolja.

Éles Kubernetes-fürtökben a hivatalos Kubernetes útmutatónak megfelelően az etcd-adatbázis három-öt replikált példányával kell rendelkeznie a magas rendelkezésre állához.

Megjegyzés:

Az etcd nem gondoskodik az adatok biztonsági mentéséről. Önnek kell biztosítania az etcd adatairól biztonsági másolatot készítő hatékony biztonsági mentési tervet.

Mi az az ütemező?

Az ütemező a számítási feladatok összes csomóponton történő hozzárendeléséért felelős összetevő. Az ütemező figyeli a fürtön az újonnan létrehozott tárolókat, és hozzárendeli azokat a csomópontokhoz.

Mi az a vezérlőkezelő?

A vezérlőkezelő elindítja és figyeli a fürthöz az API-kiszolgálón keresztül konfigurált vezérlőket.

A Kubernetes vezérlőkkel követi nyomon a fürt objektumállapotait. Minden vezérlő egy nem meghatározott ciklusban fut, miközben figyeli és válaszol a fürt eseményeire. Vannak vezérlők például a csomópontok, a tárolók és a végpontok figyelésére.

A vezérlő kommunikál az API-kiszolgálóval az objektum állapotának meghatározásához. Ha az aktuális állapot eltér az objektum kívánt állapotától, a vezérlő műveletet hajt végre a kívánt állapot biztosítása érdekében.

Tegyük fel, hogy a fürtben futó három tároló egyike nem válaszol és nem működik. Ebben az esetben a vezérlő eldönti, hogy szükség van-e új tárolók indítására, hogy az alkalmazások mindig elérhetők legyenek. Ha a kívánt állapot az, hogy egyszerre mindig három tárolónak kell üzemelnie, akkor új tároló futtatását ütemezi.

Mi az a felhőbeli vezérlőkezelő?

A felhőbeli vezérlőkezelőnek integrálja a fürt mögöttes felhőalapú technológiáit, ha a fürt felhőalapú környezetben fut. Ezek a szolgáltatások lehetnek például terheléselosztók, üzenetsorok vagy tárak.

Csomóponton futó szolgáltatások

A Kubernetes-csomóponton számos szolgáltatás fut a számítási feladatok futtatásának szabályozásához.

Diagram of a Kubernetes cluster architecture that shows the components installed on a Kubernetes node.

A Kubernetes-csomóponton a következő szolgáltatások futnak:

  • Kubelet
  • Kube-proxy
  • Tároló-futtatókörnyezet

Mi az a kubelet?

A kubelet az az ügynök, amely a fürt minden csomópontján fut, és figyeli az API-kiszolgálótól érkező munkakérelmeket. Gondoskodik arról, hogy a kért munkaegység fusson, és kifogástalan állapotú legyen.

A kubelet figyeli a csomópontokat, és biztosítja, hogy az egyes csomópontokon ütemezett tárolók a várt módon üzemeljenek. A kubelet csak a Kubernetes által létrehozott tárolókat kezeli. Nem felelős a számítási feladatok más csomópontokon való futtatásának ütemezéséért, ha az aktuális csomópont nem tudja futtatni a számítási feladatot.

Mi az a kube-proxy?

A kube-proxy összetevő felelős a helyi fürthálózat-hálózatkezelésért, és minden csomóponton fut. Gondoskodik arról, hogy minden csomópont egyedi IP-címmel rendelkezzen. A forgalom útválasztását és terheléselosztását kezelő szabályokat is érvényesít az Iptables és az IPVS használatával.

Ez a proxy nem nyújt DNS-szolgáltatásokat. A CoreDNS-en alapuló DNS-fürtszolgáltatás ajánlott és alapértelmezés szerint telepítve van.

Mi az a tároló-futtatókörnyezet?

A tároló-futtatókörnyezet az a mögöttes szoftver, amely tárolókat üzemeltet a Kubernetes-fürtön. A futtatókörnyezet feladata a tároló lemezképének beolvasása, elindítása és leállítása. A Kubernetes számos tároló-futtatókörnyezetet támogat, többek között a Dockert, a containerdet, az rktet, a CRI-O-t és a fraktit. Számos tároló-futtatókörnyezet típusának támogatása a Container Runtime Interface (CRI) felületén alapul. A CRI beépülő modul, amely lehetővé teszi a kubelet és az elérhető tároló-futtatókörnyezet közötti kommunikációt.

Az AKS alapértelmezett tároló-futtatókörnyezete a tárolóalapú, iparági szabványnak megfelelő tároló-futtatókörnyezet.

A Kubernetes-fürt kezelése

A Kubernetes egy kubectl nevű parancssori eszközt biztosít a fürt kezeléséhez. A kubectl használatával parancsokat küldhet a fürt vezérlősíkjának, vagy beolvashatja az összes Kubernetes-objektum adatait az API-kiszolgálón keresztül.

A kubectl egy, a következő konfigurációs információkat tartalmazó konfigurációs fájlt használ:

  • A Cluster konfiguráció megadja a fürt nevét, a tanúsítvány adatait és a fürthöz társított API-szolgáltatásvégpontot. Ez a definíció lehetővé teszi, hogy egyetlen munkaállomásról több fürthöz csatlakozzon.
  • A User konfiguráció megadja a felhasználókat és azok engedélyszintjeit a konfigurált fürtök elérésekor.
  • A környezetkonfiguráció rövid névvel csoportosítja a fürtöket és a felhasználókat. Rendelkezhet például egy „dev-cluster” és egy „prod-cluster” nevű fürttel a fejlesztési és az éles környezeti fürtök azonosításához.

Konfigurálhatja a kubectl parancsot több fürthöz való csatlakozásra a parancssori szintaxis részeként megadva a megfelelő környezetet.

Kubernetes-podok

Egy pod egy Kubernetesben futó alkalmazás egyetlen példányát képviseli. A Kubernetesen futtatott számítási feladatok tárolóalkalmazások. A Docker-környezettől eltérően a tárolók nem futtathatók közvetlenül a Kubernetesen. A tárolót egy Kubernetes-objektumba, úgynevezett podba kell becsomagolni. A pod a Kubernetesben létrehozható legkisebb objektum.

Diagram of a pod with a website as the primary container.

Egy podba egy vagy több tároló is csoportosítható. Egy pod azonban általában nem tartalmazza ugyanannak az alkalmazásnak több példányát.

A podok információkat tartalmaznak a megosztott tárolókról és a hálózati konfigurációról, valamint a csomagolt tárolók futtatására vonatkozó specifikációt. A fürtben üzemelő podokra vonatkozó adatokat a podsablonokkal adhatja meg. A podsablonok YAML-lel kódolt fájlok, amelyeket újra felhasználhat, és belefoglalhat más objektumokba is a podok üzemelő példányainak kezeléséhez.

Diagram of pod with a website as the primary container and a supporting container. The node has both an assigned IP address and a localhost host address.

Tegyük fel például, hogy egy webhelyet szeretne üzembe helyezni egy Kubernetes-fürtön. Létrehozza az alkalmazástároló lemezképeit és konfigurációját meghatározó pod-definíciós fájlt. Ezután telepíti a pod-definíciós fájlt a Kubernetesben.

Nem valószínű, hogy egy webalkalmazás webhelye a megoldás egyetlen összetevője. A webalkalmazások jellemzően valamilyen adattárat és egyéb támogató elemeket tartalmaznak. A Kubernetes-podok több tárolót is tartalmazhatnak.

Tegyük fel, hogy a webhely egy adatbázist használ. A webhely a fő tárolóba, az adatbázis pedig a támogató tárolóba van csomagolva. Több tároló kommunikál egymással egy környezetben keresztül. A tárolók tartalmazzák a gazdagép operációs rendszerének, a hálózati veremnek, a kernelnévtérnek, a megosztott memóriának és a tárolókötetnek a szolgáltatásait. A pod a tesztkörnyezet, amely az összes ilyen szolgáltatást nyújtja az alkalmazás számára. A pod emellett az is lehetővé teszi, hogy a tárolók megosszák a podhoz rendelt IP-címet.

Mivel számos podot létre lehet hozni, amelyek sok csomóponton üzemelnek, ezeket olykor nehéz azonosítani. A podokat a podok definiálásakor megadott sztringcímkék használatával ismerheti fel és csoportosíthatja.

A Kubernetes-pod életciklusa

A Kubernetes-podok eltérő életciklussal rendelkeznek, amely hatással van a podok üzembe helyezésére, futtatására és frissítésére. Első lépésként küldje el a pod YAML-jegyzékfájlját a fürtnek. A fürtnek elküldött és ott megőrzött jegyzékfájl definiálja a pod kívánt állapotát. Az ütemező egy kifogástalan állapotú csomópontra ütemezi a podot, amely elegendő erőforrással rendelkezik annak futtatásához.

Diagram that shows the lifecycle of a pod.

A pod életciklusának fázisai:

Phase Leírás
Függőben A pod elfogadja a fürtöt, de a fürt nem minden tárolója van beállítva, vagy készen áll a futtatásra. A Függőben állapot azt jelzi, hogy a pod mikor várakozik az ütemezésre, valamint a tárolólemezképek letöltésével töltött időt.
Running A pod futó állapotba vált, ha a podon belüli összes erőforrás készen áll.
Sikeres A pod sikeres állapotba vált, miután a pod befejezte a kívánt feladatot, és sikeresen futott.
Failed A podok különböző okok miatt lehetnek sikertelenek. Előfordulhat, hogy a pod egy tárolója meghibásodik, ami az összes többi tároló leállításához vezet, vagy lehet, hogy a podtárolók előkészítése során nem található rendszerkép. Ilyen típusú esetekben a pod meghibásodott állapotba léphet. A podok áttérhetnek egy sikertelen állapotra függőben lévő vagy futó állapotból. Egy meghatározott hiba függő állapotba is visszaállíthat egy podot.
Unknown Ha a pod állapota nem határozható meg, a pod ismeretlen állapotban van.

A podok egy fürtön maradnak, amíg egy vezérlő, a vezérlősík vagy a felhasználó explicit módon el nem távolítja őket. A pod törlése után azonnal létrejön egy új pod. Az új pod teljesen új példánynak számít a podjegyzék alapján, ezért nem pontos másolat, ezért eltér a törölt podtól.

A fürt nem menti a pod állapotát és a dinamikusan hozzárendelt konfigurációját. Nem menti például a pod azonosítóját vagy IP-címét. Ez a jelenség befolyásolja a podok üzembe helyezését és az alkalmazások tervezésének módját. Például nem támaszkodhat a podokhoz tartozó, előre hozzárendelt IP-címekre.

A tároló állapotai

A fázisok azt összegzik, hogy a pod hol jár jelenleg az életciklusában. A podok vizsgálatakor a fürt három állapotot használ a tárolók podban való követéséhez:

State Leírás
Várakozó Egy tároló alapértelmezett állapota és a tároló állapota, ha nem fut vagy leáll.
Running A tároló az elvárt módon, problémamentesen fut.
Megszakítva A tároló már nem fut. Ennek oka lehet az, hogy minden tevékenység befejeződött, vagy hogy a tároló valamilyen okból meghibásodott. Az ok és a kilépési kód mindkét esetben rendelkezésre áll a hibakereséshez.