A Kubernetes működése
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.
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.
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.
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.
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.
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.
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.
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. |