Erőforráskorlátok beállítása a Kubernetes-csomagoknál megakadályozza, hogy egy hibás tároló befolyásolja az egyéb munkaterheléseket. A Kubernetes lehetővé teszi az erőforrások korlátozását, beleértve a CPU-t és a memóriafelhasználást. A hüvelyek a korlátok túllépésekor megszüntethetők, fenntartva a klaszter általános stabilitását.
Erőforrás egységek
Előtt határok meghatározása, érdemes megjegyezni, hogy a Kubernetes hogyan fejezi ki az erőforrások elérhetőségét.
A CPU-fogyasztást a felhasznált vCPU-k alapján mérik. Korlátja 0.5
A vCPU-k azt jelzik, hogy a pod elfogyaszthatja az elérhető vCPU-k egyikének elérhető idejét. A felhőalapú szolgáltatók tárhelyein a vCPU jelenik meg. Csupasz fém hardver használata esetén ez egy hiperszál a processzoron.
A memóriát bájtban mérjük. Megadhatja bájtok egész számaként vagy barátságosabb mennyiségként, például 512Mi
vagy 1Gi
.
CPU-korlát létrehozása
CPU-korlátozás hozzáadásához a pod-tárolókhoz tartalmazza a resources:limits
mező a konténer jegyzékében:
apiVersion: v1 kind: Pod metadata: name: demo namespace: demo spec: containers: - name: my-container image: example/example resources: limits: cpu: "0.5"
A fenti példa a tárolókat 0,5 vCPU-ra korlátozza. Fojtogatják őket, hogy 100 ms-os időszakon belül ne fogyasszák el a rendelkezésre álló CPU-idő felét.
Memóriakorlát létrehozása
A memóriahatárok hasonló módon jönnek létre. Változtasd meg a limits:cpu
mező a jegyzékben limits:memory
:
A tároló 512Mi RAM-ra lesz korlátozva. A Kubernetes továbbra is engedélyezi a további hozzáférést, ha az ütemezett csomópont kapacitása meghaladja. Ellenkező esetben a határérték túllépése azt eredményezi, hogy a konténert megszüntetésre jelöltként jelölik meg.
Tárolási korlátok
Az összes Kubernetes-csomópontban rendelkezésre áll egy efemer tárhely. Ezt a tárolót a hüvelyek használják gyorsítótárak és naplók tárolására. Az efemer tárolókészletben a Kubernetes-fürt is tárolja a tárolóképeket.
Korlátokat állíthat be a hüvely rövid ideig tartó tárolására. Ez egy béta funkció, amelynek célja annak biztosítása, hogy egyetlen pod cache-je ne tudja felemészteni a teljes tárkészletet. Használja a limits:ephemeral-storage
tárolójegyzék-mező:
limits: ephemeral-storage: "1Gi"
Ez a konténer most a rendelkezésre álló efemer tárhely 1Gi felhasználására korlátozódik. A több tárhelyet próbáló hüvelyeket kilakoltatják. Ha egy tárban több tároló van, a csomagot kilakoltatják, ha az összes tárolóból származó tárhelyhasználat összege meghaladja a teljes tárolási korlátot.
A Kubernetes általában a csomópont mulandó tároló fájlrendszerének időszakos átvizsgálásával követi nyomon a tárhelyhasználatot. Ezután összegzi az egyes hüvelyek és tárolók tárolási felhasználását. Opcionálisan támogatja az operációs rendszer szintű fájlrendszer-tárolási kvótákat, amelyek pontosabb megfigyelést tesznek lehetővé.
Szüksége lesz egy projekt kvóta által támogatott fájlrendszerre, például XFS vagy ext4. Ellenőrizze, hogy a fájlrendszer be van-e kapcsolva a projektkvóta-követés engedélyezésével, majd engedélyezze a LocalStorageCapacityIsolationFSQuotaMonitoring
jellemző zászló kubelet
. Útmutató a konfigurálja ezt a rendszert a Kubernetes dokumentációjában található.
Erőforrás-kérelmek
Az erőforrás korlátok mellett beállíthat erőforrást kéréseket. Ezek elérhetők a CPU, a memória és az efemer tároláshoz – változtassa meg a limits
mezőt requests
a fenti példák mindegyikében.
Erőforrás-kérelem beállítása jelzi annak az erőforrásnak a mennyiségét, amelyet a tároló várhatóan használni fog. A Kubernetes figyelembe veszi ezeket az információkat, amikor meghatározza, hogy melyik csomópontra kell ütemezni a csomagot.
Például a memóriát használva a request
nak,-nek 512Mi
azt eredményezi, hogy a pod egy olyan csomópontra kerül, amely legalább 512Mi memóriával rendelkezik. A rendelkezésre állás kiszámításához a csomópont összes meglévő hüvelyének memóriaigényét összegezzük, és levonjuk a csomópont teljes memóriakapacitásából.
Egy csomópont nem lesz alkalmas új tároló befogadására, ha a munkaterhelési kérelmek összege, beleértve az új tároló kérését is, meghaladja a rendelkezésre álló kapacitást. Ez akkor is így van, ha a valós idejű memóriahasználat valójában nagyon alacsony. A rendelkezésre álló kapacitást már kiosztották a meglévő konténerekhez, hogy biztosítsák kéréseik kielégítését.
A korlátozással ellentétben a Kubernetes mindig lehetővé teszi a tárolók számára, hogy túllépjék erőforrásigényüket. Fogyaszthatnak minden fel nem használt erőforrásmennyiséget, amelyet más tárolók kértek, de jelenleg nem használnak.
Kérések és korlátok használata
A kérések és korlátozások eltérő viselkedése azt jelenti, hogy alaposan meg kell fontolnia a használt értékeket. Általában a legjobb, ha alacsony a kérelmek száma. Ezután a lehető legmagasabb határokat állítja be anélkül, hogy befolyásolná a munkaterhelés együttélési képességét.
Alacsony erőforrásigény-érték használatával a podok a legjobb esélyt kapják arra, hogy ütemezést kapjanak egy csomópontra. Az ütemező nagyobb rugalmassággal rendelkezik az allokációs döntések meghozatalakor, mivel valószínűbb, hogy bármely adott csomópont képes lesz tárolni a tárolót. A tároló a kérésen túl, a megadott határig kész hozzáférést biztosít minden szükséges többletforráshoz.
Minden kérésnek és korlátnak kiegyensúlyozottnak kell lennie a legnagyobb hatás elérése érdekében. Meg kell vizsgálnia a fürtben futó többi csomag kéréseit és korlátjait. Győződjön meg róla, hogy tisztában van a csomópontok által biztosított teljes erőforrásmennyiséggel, hogy ne állítson be túl magas (stabilitást kockáztató) vagy túl alacsony (kapacitás pazarlás) korlátokat.
Következtetés
Mindig állítson be erőforráskorlátokat a Kubernetes munkaterheléséhez. A korlátok hatékony használata elősegíti a munkaterhelések békés egymás mellett élését anélkül, hogy veszélyeztetné a fürt egészségét.
Ez különösen fontos a memória esetében. Korlátozások nélkül egy hibás folyamatú tároló gyorsan elfogyaszthatja a csomópontja által kínált összes memóriát. Egy ilyen memórián kívüli forgatókönyv megsemmisítheti az adott csomópontra ütemezett más csomagokat, mivel az operációs rendszer szintű memóriakezelő megkezdi a folyamatokat a memóriahasználat csökkentése érdekében.
Memóriakorlát beállításával a Kubernetes leállíthatja a tárolót, mielőtt az a fürt egyéb munkaterhelésére hatással lenne, nem beszélve a külső folyamatokról. Elveszíti a munkaterhelését, de az általános fürt nagyobb stabilitást nyer.