Puncte:2

Cum să limitați spațiul pe disc rădăcină pentru pod

drapel gb

Am un pod instalat pe un nod cu volum de 100 GB. Vreau doar ca un pod să aibă spațiu pe disc rădăcină de 50 GB.

Deci am o astfel de configurație implementare.yaml:

         resurse:
            cereri:
              stocare efemeră: „50G”
            limite:
              stocare efemeră: „70G”

Dar când am verificat containerul (există doar 1 container în pod) am văzut că tot spațiul pe disc de pe nod a fost alocat podului. Citiți din Aici, Am crezut efemer-depozitare controlează cât spațiu pe disc este alocat podului.

# df -h
Filesystem Size Used Avail Use% Montat pe
suprapunere 100G 6,5G 94G 7% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/nvme0n1p1 100G 6.5G 94G 7% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 1.9G 0 1.9G 0% /sys/firmware

Ai idee ce am greșit?

user3908406 avatar
drapel gb
Tocmai am editat intrebarea. Am vrut să spun că toți cei 100 GB au fost alocați podului, dar vreau doar ca podul să aibă un disc rădăcină de 50 GB
Puncte:2
drapel cn

Faptul că întregul spațiu (/) este vizibil pentru tine nu înseamnă că spațiul este disponibil/alocabil.

Kubelet va monitoriza utilizarea stocării efemere a dvs Pod și acționați în consecință (prin evacuarea Pod care a depășit limita):

Gestionarea consumului de stocare efemeră

Dacă kubelet gestionează stocarea efemeră locală ca resursă, atunci kubelet măsoară utilizarea stocării în:

  • emptyDir volume, cu excepţia tmpfs emptyDir volumele
  • directoare care dețin jurnalele la nivel de nod
  • straturi de container care pot fi scrise Dacă un Pod utilizează mai mult spațiu de stocare efemer decât îi permiteți, kubelet-ul setează un semnal de evacuare care declanșează evacuarea Podului.

-- Kubernetes.io: Documente: Concepte: Configurare: Gestionați containerele de resurse: Consumul de stocare efemer de resurse


Vă rugăm să aruncați o privire la exemplul de mai jos:

Presupunând că aveți următori Pod manifesta:

apiVersion: v1
fel: Pod
metadate:
  nume: nginx
specificație:
  containere:
  - nume: nginx
    imagine: nginx
    resurse:
      cereri:
        stocare efemeră: „2Gi”
      limite:
        stocare efemeră: „4Gi”

Limita care este configurată pentru stocarea efemeră este 4Gi. Pentru a verifica ce se va întâmpla, puteți rula:

  • kubectl exec -it nginx -- fallocate -l 10GB /evict.img

O notă secundară!

falloca este folosit pentru a manipula spațiul de disc alocat pentru un fișier, fie pentru a-l dealoca, fie pentru a-l prealoca.

-- Man7.org: Linux: Pagini de manual: Fallocate

După ceva timp ar trebui să vezi:

  • $ kubectl descrie pod nginx
Nume: nginx
Spațiu de nume: implicit
Prioritate: 0
Nod: XYZ
Ora de începere: Luni, 05 iulie 2021 09:47:08 +0200
Etichete: <niciuna>
Adnotări: <niciuna>
Stare: Eșuat # <-- IMPORTANT!
Motiv: evacuat # <-- IMPORTANT!
Mesaj: Utilizarea stocării locale efemere a podului depășește limita totală de containere 4Gi. # <-- IMPORTANT!
<-- EXPANDAT --> 
    Limite:
      efemer-storage: 4Gi # <-- IMPORTANT!
    Cereri:
      efemer-stocare: 2Gi
<-- EXPANDAT --> 
Evenimente:
  Introduceți Motivul Vârsta din mesaj
  ---- ------ ---- ---- -------
  Programator normal de 32 de secunde Alocat cu succes implicit/nginx la XYZ
  Normal Tragere 31s kubelet Tragere imagine „nginx”
  Kubelet normal extras de 31 de secunde Imaginea extrasă cu succes „nginx” în 360,098619 ms
  Normal Creat 31s kubelet Container creat nginx
  Normal Pornit 31s kubelet Pornit container nginx
  Avertisment Evacuat 3s kubelet Pod Utilizarea efemeră a stocării locale depășește limita totală de containere 4Gi. # <-- IMPORTANT!
  Normal Killing 3s kubelet Oprirea containerului nginx # <-- IMPORTANT!
  • $ kubectl obține păstăi
STAREA NUMELE PREGĂTIT REINCEPE VARSTA
nginx 0/1 Evacuat 0 9m7s

Resurse aditionale:

user3908406 avatar
drapel gb
Mulțumesc, ce se întâmplă dacă am 3 poduri fiecare solicită stocare efemeră de 40 GB și 2 noduri fiecare cu un volum de 100 GB, presupunând că CPU și memoria sunt oprite în caz de îngrijorare, kubenetes ar programa 2 pod-uri pe un nod și 1 Pod pe celălalt nod pentru a evita evacuare?
Dawid Kruk avatar
drapel cn
@user3908406 Pe scurt, da, Kubernetes prin cereri va asigura alocarea resurselor de către resursa alocabilă și `requests` (dacă nu poate, `Pod` va rămâne în starea `Pending`). În ceea ce privește stocarea efemeră disponibilă, aș verifica: `$ kubectl describe node` unde puteți găsi `limits`/`requests` pe un anumit `Node`. În afară de asta, aș crede că Kubernetes ar echilibra „Pod-urile” între „Noduri” pentru a asigura o disponibilitate ridicată în cazul eșecului „Nodului”.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.