Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator Kubernetes ResourceQuota

Limity CPU, pamięci, podów i PVC dla namespace oraz domyślne wartości LimitRange dla kontenerów w gotowym YAML.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}

Małe litery, cyfry i myślniki (DNS-1123)

Suma gwarantowana (rdzenie lub m)

Suma limitów kontenerów

Jednostki: Mi, Gi, Ti

Jednostki: Mi, Gi, Ti

Pody w namespace

0 = brak wolumenów

Więcej limitów: pojemność, Service, ConfigMap, Secret

Puste pole = bez limitu (klucz nie trafi do YAML).

requests.storage

services

services.loadbalancers

configmaps

secrets

Wartości LimitRange na kontener

Musi być: request ≤ limit ≤ maks. Używane, gdy zaznaczysz LimitRange.

default.cpu

default.memory

defaultRequest.cpu

defaultRequest.memory

max.cpu

max.memory

Manifest dla namespace

production Uwaga

Dokumenty: ResourceQuota + LimitRange. Zapisz jako plik i wdróż: kubectl apply -f resourcequota-production.yaml

CPU requests / limits

4 / 8 vCPU

Pamięć requests / limits

8 / 16 GiB

Średnio na pod

400m · 819 MiB

limits ÷ 20 (maks. pody)

Pody z domyślnym LimitRange

16 z 20
Uwaga

Pierwsze skończy się: limits.cpu

Limits ÷ requests

2× · 2×

CPU · pamięć

Uwaga: sprawdź ten punkt

  • Przy domyślnych wartościach LimitRange (1 kontener na pod) zmieści się 16 podów, a limit podów to 20. Wcześniej skończy się limits.cpu.

resourcequota-production.yaml

apiVersion: v1 kind: ResourceQuota metadata: name: production-quota namespace: production spec: hard: requests.cpu: "4" requests.memory: 8Gi limits.cpu: "8" limits.memory: 16Gi pods: "20" persistentvolumeclaims: "10" --- apiVersion: v1 kind: LimitRange metadata: name: production-limits namespace: production spec: limits: - type: Container default: cpu: 500m memory: 512Mi defaultRequest: cpu: 250m memory: 256Mi max: cpu: "2" memory: 2Gi
546 znaków · 53 słów · 32 linii

Polecenia kubectl

# Utwórz namespace (pomiń, jeśli już istnieje) kubectl create namespace production # Wdróż manifest kubectl apply -f resourcequota-production.yaml # Sprawdź zużycie względem limitów kubectl describe resourcequota production-quota -n production kubectl describe limitrange production-limits -n production
Co ogranicza ten manifest
KluczCo ograniczaWartość
requests.cpu Suma gwarantowanego CPU (requests) wszystkich podów 4 vCPU (4 000m)
requests.memory Suma zarezerwowanej pamięci (requests) 8Gi (8 192 MiB)
limits.cpu Suma limitów CPU wszystkich kontenerów 8 vCPU (8 000m)
limits.memory Suma limitów pamięci wszystkich kontenerów 16Gi (16 384 MiB)
pods Liczba podów w stanie innym niż zakończony 20
persistentvolumeclaims Liczba PersistentVolumeClaim 10

ResourceQuota działa na namespace; LimitRange nie zastępuje requests i limits w workloadach. Przetestuj wartości z realnym zużyciem.

Ściąga: jednostki CPU i pamięci w Kubernetes

Zapis wartości w requests, limits i quocie
ZapisZasóbIle to jest
250m CPU 0,25 rdzenia (ćwierć vCPU)
500m lub 0.5 CPU 0,5 rdzenia
1 lub 1000m CPU 1 rdzeń (fizyczny lub wirtualny)
256Mi Pamięć 268 435 456 B
1Gi Pamięć 1 024 Mi = 1 073 741 824 B
1G Pamięć 1 000 000 000 B ≈ 0,93 Gi (tu nieobsługiwane, użyj Gi)
1Ti Pamięć 1 024 Gi = 1 099 511 627 776 B

ResourceQuota a LimitRange

ResourceQuota ogranicza sumę zasobów i liczbę obiektów w całym namespace. LimitRange działa na pojedynczy kontener: wstawia domyślne requests i limits, gdy pod ich nie podaje, i odrzuca kontenery większe niż max. Zwykle używa się obu naraz: quota pilnuje budżetu zespołu, a LimitRange sprawia, że każdy pod da się do tego budżetu wliczyć.

Dlaczego pod zostaje odrzucony

Gdy quota obejmuje requests.cpu, limits.cpu, requests.memory lub limits.memory, każdy nowy pod musi mieć te wartości. Bez nich API odrzuci go błędem „failed quota … must specify …”. Pod nie powstanie też, gdy przekroczyłby pozostały budżet. Zużycie sprawdzisz w kubectl describe resourcequota (kolumny Used i Hard).

Jak liczymy pody z domyślnym LimitRange

Każdy z czterech progów quoty dzielimy przez wartość domyślną jednego kontenera i bierzemy najmniejszy wynik. Dla ustawień startowych: limits.cpu 8 ÷ 500m = 16, limits.memory 16Gi ÷ 512Mi = 32, requests.cpu 4 ÷ 250m = 16, requests.memory 8Gi ÷ 256Mi = 32. Zmieści się 16 podów, choć limit podów to 20. Kilka kontenerów w podzie lub własne wartości zmieniają wynik.

Dobór wartości i wdrożenia

Zacznij od realnego zużycia (kubectl top pods -n production, wymaga metrics-server). Requests ustaw blisko typowego zużycia, limits blisko szczytów. Zostaw zapas na rolling update: stare i nowe pody działają wtedy jednocześnie i obie wersje liczą się do quoty. Zmiana quoty lub LimitRange nie dotyka działających podów, tylko nowo tworzone.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator Kubernetes ResourceQuota i LimitRange

Kubernetes ResourceQuota ogranicza łączne zasoby całego namespace: sumę requests i limits CPU oraz pamięci, liczbę podów, PVC i wybranych obiektów. LimitRange działa na pojedynczy kontener i wstawia mu domyślne requests i limits, gdy pod ich nie deklaruje. Generator buduje oba manifesty w jednym pliku YAML, sprawdza spójność wartości i liczy, ile podów z domyślnymi ustawieniami faktycznie zmieści się w quocie.

ResourceQuota kontra LimitRange

ObiektDziała naPrzykład (ustawienia startowe)
ResourceQuotacały namespacełącznie 4 CPU requests, 8 CPU limits, 16Gi pamięci limits, 20 podów
LimitRangepojedynczy kontenerdomyślnie request 250m i limit 500m CPU, maks. 2 CPU na kontener

Co trafia do manifestu YAML

Plik zawiera dwa dokumenty rozdzielone ---: ResourceQuota o nazwie <namespace>-quota i LimitRange o nazwie <namespace>-limits. LimitRange dodajesz lub pomijasz jednym polem wyboru. Nazwa namespace musi spełniać regułę DNS-1123: małe litery, cyfry i myślniki, najwyżej 63 znaki.

Klucz w spec.hardPole w formularzuWymagane
requests.cpuCPU requeststak
limits.cpuCPU limitstak
requests.memoryPamięć requeststak
limits.memoryPamięć limitstak
podsMaks. podytak, minimum 1
persistentvolumeclaimsMaks. PVCtak, 0 blokuje tworzenie PVC
requests.storageSuma pojemności PVCnie
services, services.loadbalancersMaks. Service, Maks. LoadBalancernie
configmaps, secretsMaks. ConfigMap, Maks. Secretnie

CPU podajesz w rdzeniach (4, 0.5) albo milirdzeniach (500m), pamięć jako liczbę całkowitą z jednostką Mi, Gi lub Ti. Jednostki dziesiętne G i M nie są przyjmowane, bo 1G to tylko około 0,93Gi i łatwo o pomyłkę. LimitRange dostaje sekcje default, defaultRequest i max dla typu Container. Gotowe zestawy Mały (2/4 vCPU, 10 podów), Średni (4/8 vCPU, 20 podów) i Duży (16/32 vCPU, 100 podów) wypełniają główne limity jednym kliknięciem. Wynik kopiujesz albo pobierasz jako resourcequota-<namespace>.yaml, a obok dostajesz polecenia kubectl do wdrożenia i sprawdzenia zużycia.

Dlaczego to ważne

  • chroni klaster przed wyczerpaniem zasobów przez jeden namespace,
  • wymusza deklarowanie requestów i limitów,
  • pozwala sprawiedliwie dzielić zasoby między zespoły.

Jak działa quota w Kubernetes i co sprawdza generator

ResourceQuota działa na poziomie namespace i jest sprawdzana przez kontroler admission w momencie tworzenia lub aktualizacji poda. API server sumuje deklaracje wszystkich podów w namespace i porównuje je z wartościami hard. Jeśli suma przekroczy którąkolwiek z granic, operacja jest odrzucana. Mechanizm można zapisać wzorem: suma requests.cpu wszystkich podów ≤ hard.requests.cpu, suma limits.cpu ≤ hard.limits.cpu, liczba podów ≤ hard.pods. Analogicznie dla pamięci i pozostałych kluczy.

LimitRange działa na poziomie pojedynczego kontenera. Przy przyjęciu poda kontroler wstawia domyślne wartości, jeśli kontener ich nie zadeklarował, i odrzuca kontener większy niż max. W ustawieniach startowych kontener bez własnych wartości dostaje request 250m CPU i 256Mi pamięci oraz limit 500m CPU i 512Mi. Te liczby wliczają się potem do sum w ResourceQuota. Gdy LimitRange ma tylko default bez defaultRequest, Kubernetes przyjmuje request równy limitowi.

Generator nie łączy się z klastrem, ale pilnuje arytmetyki. Zablokuje wynik, jeśli w LimitRange domyślny request przekracza domyślny limit albo limit przekracza maksimum na kontener. Ostrzeże, gdy requests w quocie są wyższe niż limits, gdy maksymalny kontener nie zmieści się w limits całego namespace i gdy limit podów jest nieosiągalny przy wartościach domyślnych. Bez LimitRange przypomni, że pod bez requests i limits zostanie odrzucony przez quotę. Kafelki pokazują też średni przydział na pod (limits ÷ maks. pody) i stosunek limits do requests.

Przykład krok po kroku: ile podów zmieści się w quocie

  1. W namespace production tworzysz ResourceQuota z wartościami hard: requests.cpu: "4", requests.memory: 8Gi, limits.cpu: "8", limits.memory: 16Gi, pods: "20" i persistentvolumeclaims: "10".
  2. Dodajesz LimitRange z defaultRequest 250m CPU i 256Mi, default 500m CPU i 512Mi oraz max 2 CPU i 2Gi. Każdy kontener bez deklaracji zabiera 0,25 CPU z puli requests.cpu i 0,5 CPU z puli limits.cpu.
  3. Generator dzieli każdy z czterech progów przez wartość jednego kontenera: requests.cpu 4000m ÷ 250m = 16, limits.cpu 8000m ÷ 500m = 16, requests.memory 8192Mi ÷ 256Mi = 32, limits.memory 16384Mi ÷ 512Mi = 32. Decyduje najmniejszy wynik, czyli 16.
  4. Wdrażasz 16 podów po jednym kontenerze. Suma requests.cpu wynosi 16 × 250m = 4000m, czyli równo 4 CPU, a suma limits.cpu 16 × 500m = 8 CPU. Obie są równe wartościom hard, więc quota przepuszcza.
  5. Siedemnasty pod podniósłby sumy do 4250m requests i 8500m limits, więc API server go odrzuci, choć limit 20 podów nie został osiągnięty. Generator pokazuje to w uwagach: zmieści się 16 podów, wcześniej skończy się limits.cpu.
  6. Aby przyjąć 20 podów, podnieś quotę do requests.cpu 5 i limits.cpu 10 (5000m ÷ 250m = 20, 10000m ÷ 500m = 20) albo zmniejsz domyślne wartości kontenera do 200m request i 400m limit (4 CPU ÷ 20 i 8 CPU ÷ 20). Limit kontenera nadal musi być większy lub równy jego requestowi.

ResourceQuota i LimitRange – dane referencyjne z przykładu

ParametrResourceQuota (namespace)LimitRange (kontener)
CPU requests4250m (defaultRequest)
CPU limits8500m (default), maks. 2
Pamięć requests8Gi256Mi (defaultRequest)
Pamięć limits16Gi512Mi (default), maks. 2Gi
Pody20nie dotyczy
Średnio na pod (limits ÷ 20)400m CPU i 819 MiB–
Stosunek limits do requests2× CPU, 2× pamięć2× (500m wobec 250m)
Pody z domyślnym LimitRange16 z 20przy jednym kontenerze na pod
20 podów z wartościami domyślnymi5 CPU requests i 10 CPU limitsprzekracza quotę 4 i 8 CPU

Praktyczne wskazówki przed wdrożeniem quota

  • Najpierw policz budżet zespołu: ile CPU i pamięci ma przypadać na namespace. Dopiero potem wpisz wartości do ResourceQuota. Limitów z innego środowiska nie kopiuj bez przeliczenia.
  • Ustawiaj LimitRange razem z ResourceQuota. Sam LimitRange nie ograniczy sumy w namespace, a sama quota nie wstawi wartości do kontenerów, które ich nie mają.
  • Regularnie porównuj zużycie z wartościami hard. Zbliżanie się do limitu requests.cpu lub limits.cpu oznacza, że kolejne wdrożenia mogą być odrzucane.
  • Quota ustawiona równo z obecnym zużyciem nie zmieści rolloutów ani dodatkowych replik, bo przy rolling update stare i nowe pody liczą się jednocześnie. Zostaw zapas.
  • Testuj politykę na stagingu. Sprawdź, czy domyślne wartości z LimitRange nie powodują przekroczenia quoty przy typowej liczbie podów, i dopiero potem przenieś YAML na produkcję.

Czego nie uwzględnia generator

  • Pojemność klastra: ResourceQuota to limit logiczny w namespace, a nie gwarancja, że węzły mają tyle CPU i pamięci. Scheduler może nie umieścić poda nawet przy niewykorzystanej quocie.
  • Rzeczywiste zużycie: narzędzie pracuje na deklaracjach. Nie zna metryk i nie podpowie, czy wartość hard pasuje do realnego profilu aplikacji.
  • Kilka kontenerów w podzie: wyliczenie „pody z domyślnym LimitRange” zakłada jeden kontener na pod. Sidecar dostaje własne wartości domyślne, więc pod z dwoma kontenerami zużywa dwa razy więcej, a init containers również wpływają na efektywny request poda.
  • Autoskalowanie: HPA tworzy nowe pody pod obciążeniem. W szczycie liczba replik rośnie i może wyczerpać quotę, czego statyczny manifest nie przewidzi.

Najczęstsze pytania

Co się stanie, gdy przekroczysz ResourceQuota?

Utworzenie nowego poda zostanie odrzucone błędem „exceeded quota” z informacją, ile zasobu zażądano, ile jest zużyte i jaki jest limit. Działające pody pracują dalej, a nowe przejdą, gdy zwolnią się zasoby albo podniesiesz quotę.

Po co requests i limits osobno?

Requests wpływają na planowanie (scheduling), limits na maksymalne zużycie kontenera. Limit musi być większy lub równy requestowi.

Czy LimitRange wymusza limity?

Wstawia domyślne wartości kontenerom bez deklaracji i odrzuca kontenery większe niż max. Generator ustawia sekcje default, defaultRequest i max; minimum (min) trzeba dopisać ręcznie, jeśli go potrzebujesz.

Jak sprawdzić, ile zasobów zużywa ResourceQuota w namespace?

Poleceniem kubectl describe resourcequota production-quota -n production. Kolumna Used pokazuje bieżące sumy dla requests.cpu, limits.cpu, requests.memory i innych kluczy, a Hard wartości maksymalne.

Czy ResourceQuota ogranicza liczbę ConfigMap i Secretów?

Tak, kluczami configmaps i secrets; generator obsługuje też services i services.loadbalancers. Inne typy obiektów ogranicza się kluczami w formacie count/<zasób>.<grupa>, np. count/deployments.apps.

Czy LimitRange działa na już istniejące pody?

Nie, działa w momencie przyjęcia nowego poda. Istniejące pody zachowują swoje ustawienia, dopóki nie zostaną odtworzone, np. przy kolejnym rolloucie.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!