{"id":36246,"date":"2019-10-31T22:10:28","date_gmt":"2019-10-31T19:10:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada\/"},"modified":"2019-10-31T22:10:28","modified_gmt":"2019-10-31T19:10:28","slug":"avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada","title":{"rendered":"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>27 aprile alla conferenza <noindex><a rel=\"nofollow\" href=\"https:\/\/nastachku.ru\/archive\/2019\/index.php\">Sciopero-2019<\/a><\/noindex>, nel corso della sezione \u00abDevOps\u00bb, \u00e8 stata presentata la relazione \u00abAutoscaling e gestione delle risorse in Kubernetes\u00bb. Qui si discute di come garantire alta disponibilit\u00e0 delle applicazioni e massimizzarne le prestazioni con K8s.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/1dbca93f66eb0822348163922a1cd6da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeguendo la tradizione, siamo lieti di presentare <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=10ZR-fbyuSY&amp;list=PL1mJ-PkCYnmB9vljnjxCMP3dlxQY3Dfcq\"><b>il video della presentazione<\/b><\/a><\/noindex> (44 minuti, molto pi\u00f9 informativo di un articolo) e il riassunto principale in formato testuale. Andiamo!<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Analizziamo il tema della relazione parola per parola e iniziamo dalla fine.<\/p>\n<h2>Kubernetes<\/h2>\n<p>\nImmaginiamo di avere contenitori Docker sul nostro host. Perch\u00e9? Per garantire ripetibilit\u00e0 e isolamento, che a loro volta permettono una distribuzione, CI\/CD semplice e ben organizzata. Abbiamo molte di queste macchine con contenitori.<\/p>\n<p>Qual \u00e8 il vantaggio di Kubernetes in questo caso?<\/p>\n<ol>\n<li> Smettiamo di pensare a queste macchine e cominciamo a lavorare con il \u00abcloud\u00bb, <b>un cluster di contenitori<\/b> o pod della containerizzazione.<\/li>\n<li> Inoltre, non consideriamo nemmeno i singoli pod, ma gestiamo anche b<i>un<\/i>sono primitivi di alto livello <b>primitivi di alto livello<\/b> ci consentono di dire che esiste un modello per avviare un certo carico di lavoro, e il numero necessario di istanze per farlo. Se in seguito modifichiamo il modello, cambieranno anche tutte le istanze.<\/li>\n<li> Con <b>API dichiarativa<\/b> invece di eseguire una sequenza di comandi specifici, descriviamo \"la struttura del mondo\" (in YAML), che viene creata da Kubernetes. E ancora: al cambiare della descrizione, cambier\u00e0 anche la sua rappresentazione reale.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Gestione delle risorse<\/h2>\n<p><\/p>\n<h3>CPU<\/h3>\n<p>\nSupponiamo di avviare nginx, php-fpm e mysql su un server. Questi servizi avranno in realt\u00e0 anche pi\u00f9 processi attivi, ognuno dei quali richiede risorse computazionali:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/3ec2ef12bb7666456dddfaf762925f4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(i numeri sulla diapositiva sono \u00abpappagalli\u00bb, l'astratta necessit\u00e0 di ciascun processo in termini di potenza di calcolo)<\/i><\/p>\n<p>Per gestirlo in modo conveniente, \u00e8 logico raggruppare i processi (ad esempio, tutti i processi nginx in un gruppo \u00abnginx\u00bb). Un modo semplice e ovvio per farlo \u00e8 mettere ogni gruppo in un contenitore:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/36ac6b6899ebc3a1f33f2caa2bc2ccd2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer proseguire, \u00e8 necessario ricordare cosa sia un contenitore (in Linux). La loro nascita \u00e8 stata possibile grazie a tre funzionalit\u00e0 chiave nel kernel, implementate gi\u00e0 da tempo: <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/capabilities.7.html\">capacit\u00e0<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/namespaces.7.html\">namespaces<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/cgroups.7.html\">cgroups<\/a><\/noindex>. E lo sviluppo successivo \u00e8 stato facilitato da altre tecnologie (inclusi i comodi \"wrapper\" come Docker):<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/65369d8bdc23554b972f60a81446b385.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNel contesto della relazione ci interessa solo <b>cgroups<\/b>, perch\u00e9 i gruppi di controllo sono proprio quella parte delle funzionalit\u00e0 dei container (di Docker e simili) che gestisce la risorsa. I processi raggruppati come desideravamo, sono appunto i gruppi di controllo.<\/p>\n<p>Torniamo alle esigenze di CPU di questi processi, e ora \u2014 di gruppi di processi:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/a087c3239a63a703d308401ae0083e32.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(ripeto, che tutti i numeri sono espressioni astratte delle necessit\u00e0 di risorse)<\/i><\/p>\n<p>A questo punto, la CPU ha una certa risorsa finita <i>(nell'esempio sono 1000)<\/i>, che potrebbe non bastare a tutti (la somma delle necessit\u00e0 di tutti i gruppi \u00e8 150+850+460=1460). Cosa succede in questo caso?<\/p>\n<p>Il kernel inizia a distribuire le risorse e lo fa in modo \"equo\", assegnando la stessa quantit\u00e0 di risorse a ciascun gruppo. Ma nel primo caso ce ne sono pi\u00f9 del necessario (333&gt;150), quindi l'eccedenza (333-150=183) rimane in riserva, che viene poi distribuita equamente tra gli altri due contenitori:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/fa358b02ba232045e27fd8e2e6f45f08.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDi conseguenza: il primo contenitore ha avuto risorse sufficienti, al secondo sono mancate considerevolmente, mentre al terzo ne sono mancate lievemente. Questo \u00e8 il risultato delle azioni. <b>del pianificatore \"equo\" in Linux<\/b> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Completely_Fair_Scheduler\">CFS<\/a><\/noindex>. Il suo funzionamento pu\u00f2 essere regolato tramite l'assegnazione <b>di pesi<\/b> a ciascuno dei contenitori. Ad esempio, in questo modo:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/ad100d55d2379d143f1ea8a257f8e494.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsaminiamo il caso di carenza di risorse nel secondo container (php-fpm). Tutte le risorse del container vengono distribuite equamente tra i processi. Di conseguenza, il processo master funziona bene, mentre tutti i worker rallentano, ricevendo meno della met\u00e0 di ci\u00f2 che \u00e8 necessario:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/4f7c00fb16f33d4e57355bebb2270099.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto \u00e8 il funzionamento del pianificatore CFS. I pesi che assegniamo ai contenitori verranno successivamente chiamati <b>richieste<\/b>. Il motivo di questa denominazione \u2014 si veda pi\u00f9 avanti.<\/p>\n<p>Guardiamo tutta la situazione da un'altra prospettiva. Come si suol dire, tutte le strade portano a Roma, e nel caso di un computer \u2014 alla CPU. La CPU \u00e8 una, ci sono molte attivit\u00e0 \u2014 \u00e8 necessario un semaforo. Il modo pi\u00f9 semplice per gestire le risorse \u00e8 il metodo \"semaforo\": assegniamo a un processo un tempo fisso di accesso alla CPU, poi al successivo e cos\u00ec via.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/e8abd2a719ad447755bdb114a2e72d46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto approccio \u00e8 chiamato quotazione rigida <i>(hard limiting)<\/i>. Ricordiamolo come <b>limiti<\/b>. Tuttavia, se si distribuiscono i limiti a tutti i container, si presenta un problema: MySQL ha percorso la strada e a un certo punto la sua richiesta di CPU \u00e8 terminata, ma tutti gli altri processi devono attendere finch\u00e9 la CPU <b>\u00e8 inattiva<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/f88e8732f0d8c72b040d0b47d2c0a4e6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTorniamo al kernel Linux e al suo rapporto con la CPU: la situazione generale \u00e8 la seguente:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/25c9ba677db4c692251a17f46531a52e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCgroup ha due impostazioni: fondamentalmente sono due semplici \"manopole\" che consentono di definire:<\/p>\n<ol>\n<li> peso per il container (richieste) \u2014 \u00e8 <b>shares<\/b>;<\/li>\n<li> la percentuale del tempo totale della CPU per lavorare sui compiti del container (limits) \u2014 si tratta di <b>quota<\/b>.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Come misurare la CPU?<\/h3>\n<p>\nCi sono diversi modi:<\/p>\n<ol>\n<li> Che cos'\u00e8 <i>pappagalli<\/i>, nessuno lo sa: bisogna sempre accordarsi.<\/li>\n<li> <i>Percentuali<\/i> sono pi\u00f9 chiare, ma relative: il 50% di un server con 4 core e di uno con 20 core sono cose completamente diverse.<\/li>\n<li> Si possono utilizzare gi\u00e0 menzionati <i>di pesi<\/i>, che Linux conosce, ma anche questi sono relativi.<\/li>\n<li> L'opzione pi\u00f9 adeguata \u00e8 misurare le risorse computazionali in <i>secondi<\/i>. Cio\u00e8, in secondi di tempo di CPU rispetto ai secondi di tempo reale: se si fornisce 1 secondo di tempo di CPU in 1 secondo reale\u2014 questo \u00e8 un core CPU interamente.<\/li>\n<\/ol>\n<p>\nPer semplificare ulteriormente, si misura direttamente in <i>core<\/i>, intendendo con questo il tempo della CPU reale. Poich\u00e9 Linux comprende i pesi e non il tempo della CPU\/core, \u00e8 stato necessario un meccanismo di conversione da uno all'altro.<\/p>\n<p>Consideriamo un semplice esempio con un server a 3 core CPU, dove a tre pod verranno assegnati pesi (500, 1000 e 1500), facilmente convertibili nelle rispettive porzioni di core assegnati (0,5, 1 e 1,5).<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/6a173d56847569fd071d642dcce5c5ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe prendiamo un secondo server, dove i core saranno doppi (6), e ci mettiamo gli stessi pod, la distribuzione dei core pu\u00f2 essere facilmente calcolata semplicemente moltiplicando per 2 (1, 2 e 3 rispettivamente). Ma un punto importante si verifica quando su questo server appare un quarto pod, il cui peso, per comodit\u00e0, poniamo sia 3000. Essi si prendono una parte delle risorse CPU (met\u00e0 dei core), e gli altri pod vengono ricalibrati (dimezzati):<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/a74fa4b7964bfbfbce3568b1ce35c13a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Kubernetes e risorse CPU<\/h3>\n<p>\nIn Kubernetes, le risorse CPU sono misurate in <b>milliardi<\/b>, cio\u00e8 come peso di base si usa 0,001 core. <i>(Lo stesso nella terminologia di Linux\/cgroups \u00e8 chiamato CPU share, anche se, per essere pi\u00f9 precisi, 1000 miliardi = 1024 CPU shares.)<\/i> K8s si assicura di non posizionare sul server pi\u00f9 pod di quanti siano le risorse CPU disponibili per la somma dei pesi di tutti i pod.<\/p>\n<p>Come funziona? Quando si aggiunge un server al cluster Kubernetes, viene comunicato quanti core CPU sono disponibili. E quando viene creato un nuovo pod, lo scheduler di Kubernetes sa quanti core saranno necessari a quel pod. In questo modo, il pod sar\u00e0 allocato su un server dove ci sono sufficienti core.<\/p>\n<p>Cosa succede se <b>non<\/b> \u00e8 specificato un request (cio\u00e8, il pod non ha definito il numero di core di cui necessita)? Vediamo come Kubernetes calcola effettivamente le risorse.<\/p>\n<p>Al pod si possono specificare sia i request (scheduler CFS) che i limiti (ricordate il semaforo?):<\/p>\n<ul>\n<li> Se sono specificati uguali, al pod viene assegnata una classe di QoS. <b>guaranteed<\/b>. Questo numero di CPU \u00e8 sempre garantito per lui.<\/li>\n<li> Se il request \u00e8 inferiore al limite \u2014 la classe QoS \u00e8 <b>burstable<\/b>. Cio\u00e8, ci aspettiamo che il pod utilizzi sempre 1 CPU, ma questo valore non \u00e8 una limitazione per lui: <i>a volte<\/i> il pod pu\u00f2 utilizzare di pi\u00f9 (quando ci sono risorse disponibili sul server).<\/li>\n<li> C'\u00e8 anche la classe QoS <b>best effort<\/b> \u2014 a loro si riferiscono i pod per i quali non \u00e8 specificato il request. Le risorse vengono allocate loro per ultime.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Memoria<\/h3>\n<p>\nLa situazione con la memoria \u00e8 simile, ma leggermente diversa \u2014 la natura di queste risorse \u00e8 diversa. In generale, l'analogia \u00e8 la seguente:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/d933fb1febdc30e256af158132b9dbb0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsaminiamo come vengono gestiti i request in memoria. Supponiamo che i pod vivano su un server, modificando la memoria consumata, finch\u00e9 uno di essi non diventa cos\u00ec grande che la memoria finisce. In tal caso, appare l'OOM killer e uccide il processo pi\u00f9 grande:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/a3726c24937c64ae21c21df7642b98c8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNon \u00e8 sempre ci\u00f2 che desideriamo, quindi abbiamo la possibilit\u00e0 di regolare quali processi sono importanti per noi e non dovrebbero essere terminati. A tal fine si utilizza il parametro <b>oom_score_adj<\/b>.<\/p>\n<p>Torniamo ai classi QoS della CPU e facciamo un'analogia con i valori di oom_score_adj, che determinano le priorit\u00e0 per i pod in base al consumo di memoria:<\/p>\n<ul>\n<li> Il valore pi\u00f9 basso di oom_score_adj per un pod \u00e8 -998, il che significa che tale pod deve essere ucciso per ultimo, questo <b>guaranteed<\/b>.<\/li>\n<li> Il valore pi\u00f9 alto, 1000, \u00e8 <b>best effort<\/b>, mentre i pod con valori pi\u00f9 alti vengono eliminati per primi.<\/li>\n<li> Per calcolare i restanti valori (<b>burstable<\/b>) existe una formula, il cui principio \u00e8 che pi\u00f9 risorse richiede un pod, minori sono le probabilit\u00e0 che venga terminato.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/27c95eb705d06dd90caff34afd14ef16.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa seconda \"manopola\" \u00e8 <b>limit_in_bytes<\/b> \u2014 per i limiti. Qui \u00e8 tutto pi\u00f9 semplice: dobbiamo solo assegnare la quantit\u00e0 massima di memoria fornita, e qui (a differenza della CPU) non c'\u00e8 la questione di come misurarla (memoria).<\/p>\n<h3>Totale<\/h3>\n<p>\nOgni pod in Kubernetes riceve <code>requests<\/code> e <code>limits<\/code> \u2014 entrambi i parametri per CPU e memoria:<\/p>\n<ol>\n<li> il quale influisce sul funzionamento dello scheduler di Kubernetes, che distribuisce i pod sui server;<\/li>\n<li> sulla base di tutti i parametri viene determinata la classe QoS del pod;<\/li>\n<li> in base alle richieste CPU si calcolano i pesi relativi;<\/li>\n<li> in base alle richieste CPU si configura il pianificatore CFS;<\/li>\n<li> in base alle richieste di memoria si configura l'OOM killer;<\/li>\n<li> in base ai limiti di CPU si imposta il \"semaforo\";<\/li>\n<li> in base ai limiti di memoria si imposta un limite sul cgroup.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/201ac0bc7ad53c9c8a75cf9ff5f618b5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn generale, questa immagine risponde a tutte le domande su come avviene la gestione delle risorse in Kubernetes.<\/p>\n<h2>Autoscalamento<\/h2>\n<p><\/p>\n<h3>K8s cluster-autoscaler<\/h3>\n<p>\nImmaginiamo che l'intero cluster sia gi\u00e0 occupato e che debba essere creato un nuovo pod. Finch\u00e9 il pod non pu\u00f2 apparire, rimane in stato <i>Pending<\/i>. Per farlo apparire, possiamo collegare un nuovo server al cluster o\u2026 installare il cluster-autoscaler, che far\u00e0 questo per noi: richieder\u00e0 una macchina virtuale a un fornitore di servizi cloud (tramite una richiesta API) e la collegher\u00e0 al cluster, dopo di che il pod sar\u00e0 aggiunto.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/89e771daa4d69b3b3c72ef8adba54a5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto \u00e8 l'autoscalamento del cluster Kubernetes, che funziona magnificamente (per la nostra esperienza). Tuttavia, come in ogni cosa, ci sono delle sfide...<\/p>\n<p>Mentre aumentavamo le dimensioni del cluster, tutto andava bene, ma cosa succede quando il cluster <b>inizia a liberarsi<\/b>? \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c pod&#8217;\u044b (\u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u043e\u0432) \u043e\u0447\u0435\u043d\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u0434\u043e\u0440\u043e\u0433\u043e \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c. \u0412 Kubernetes \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>Consideriamo un cluster di 3 server, in cui \u00e8 presente un Deployment. Ha 6 pod: attualmente sono 2 su ogni server. Per qualche motivo, vogliamo spegnere uno dei server. Per farlo, utilizzeremo il comando <code>kubectl drain<\/code>, che:<\/p>\n<ul>\n<li> vietare l'invio di nuovi pod su questo server;<\/li>\n<li> rimuovere i pod esistenti dal server.<\/li>\n<\/ul>\n<p>\nPoich\u00e9 Kubernetes monitora il mantenimento del numero di pod (6), esso semplicemente <b>li ricreer\u00e0<\/b> li sposter\u00e0 su altri nodi, ma non sul nodo disattivato, poich\u00e9 \u00e8 gi\u00e0 contrassegnato come non disponibile per l'alloggiamento di nuovi pod. Questo \u00e8 un meccanismo fondamentale per Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/cfebfa60b5a67ed1155789837c824a44.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTuttavia, qui c'\u00e8 una sfumatura. In una situazione analoga per StatefulSet (anzich\u00e9 Deployment), le azioni saranno diverse. Ora abbiamo gi\u00e0 un'applicazione stateful \u2014 per esempio, tre pod con MongoDB, uno dei quali ha presentato qualche problema (i dati sono danneggiati o un altro errore impedisce il corretto avvio del pod). E noi di nuovo decidiamo di disattivare un server. Cosa succeder\u00e0?<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/9bfc0d2685e2aa7828a135be2590741b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMongoDB <i>potrebbe<\/i> morire, poich\u00e9 \u00e8 necessario un quorum: per un cluster di tre installazioni almeno due devono funzionare. Tuttavia questo <i>non avviene<\/i> \u2014 grazie a <b>Budget per l'Interruzione dei Pod<\/b>. Questo parametro definisce il numero minimo necessario di pod funzionanti. Sapendo che uno dei pod con MongoDB non funziona gi\u00e0 e vedendo che per MongoDB \u00e8 impostato il PodDisruptionBudget, <code>minAvailable: 2<\/code>, Kubernetes non permetter\u00e0 di rimuovere il pod.<\/p>\n<p>In sintesi: affinch\u00e9 il movimento (in realt\u00e0, la ricreazione) dei pod funzioni correttamente durante la liberazione del cluster, \u00e8 necessario configurare il PodDisruptionBudget.<\/p>\n<h3>Scalabilit\u00e0 orizzontale<\/h3>\n<p>\nConsideriamo un'altra situazione. C'\u00e8 un'applicazione eseguita come Deployment in Kubernetes. I suoi pod (ad esempio, tre) ricevono traffico degli utenti, e noi misuriamo un certo indicatore (diciamo, il carico della CPU) all'interno di essi. Quando il carico aumenta, lo registriamo nel grafico e aumentiamo il numero di pod per distribuire le richieste.<\/p>\n<p>Oggi in Kubernetes non \u00e8 necessario farlo manualmente: si configura l'aumento \/ la riduzione automatica del numero di pod in base ai valori degli indicatori di carico misurati.<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/092fb2d523f1f53670b3850ed3c3fac7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe domande principali qui sono: <b>cosa misurare<\/b> e <b>come interpretare<\/b> i valori ottenuti (per prendere decisioni sul cambiamento del numero di pod). \u00c8 possibile misurare molte cose:<\/p>\n<p><img decoding=\"async\" alt=\"Autoscaling e gestione delle risorse in Kubernetes (panoramica e video della presentazione)\" src=\"\/wp-content\/uploads\/2019\/07\/1c7f6d35fc0cbae85b88f6a062797ed2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCome fare questo tecnicamente \u2014 raccogliere metriche, ecc. \u2014 l'ho spiegato in dettaglio nella mia presentazione su <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/412901\/\">Monitoraggio e Kubernetes<\/a><\/noindex>. E il consiglio principale per scegliere i parametri ottimali \u00e8 <b>sperimentate<\/b>!<\/p>\n<p>S\u00ec <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/usemethod.html\">il metodo USE<\/a><\/noindex> <i>(Utilization Saturation and Errors<\/i>), il cui significato \u00e8 il seguente. Sulla base di cosa ha senso scalare, ad esempio, php-fpm? Sulla base del fatto che i worker si esauriscono, \u2014 \u00e8 questo <i>utilization<\/i>. E se i worker si sono esauriti e nuove connessioni non vengono accettate \u2014 questo \u00e8 gi\u00e0 <i>saturation<\/i>. Entrambi questi parametri devono essere misurati e, a seconda dei loro valori, procede la scalabilit\u00e0.<\/p>\n<h2>In conclusion<\/h2>\n<p>\nLa presentazione ha un seguito: riguarda la scalabilit\u00e0 verticale e come selezionare correttamente le risorse. Ne parler\u00f2 in futuri video su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/c\/%D0%A4%D0%BB%D0%B0%D0%BD%D1%82\">il nostro YouTube<\/a><\/noindex> \u2014 iscriviti per non perdere nulla!<\/p>\n<h2>Video e slide<\/h2>\n<p>\nVideo con l'intervento (44 minuti):<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"10ZR-fbyuSY\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/10ZR-fbyuSY\/hqdefault.jpg\" alt=\"Riproduci video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Presentazione della relazione:<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"\/\/speakerdeck.com\/player\/2b7f3521ca3b43dd9c711cb74ba58dfd\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<h2>P.S.<\/h2>\n<p>\nAltre relazioni su Kubernetes nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/449096\/\">Espandiamo e completiamo Kubernetes<\/a><\/noindex>\u00bb <i>(Andrey Polovov; 8 aprile 2019 a Saint HighLoad++)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Database e Kubernetes<\/a><\/noindex>\u00bb <i>(Dmitry Stolyarov; 8 novembre 2018 a HighLoad++)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/412901\/\">Monitoraggio e Kubernetes<\/a><\/noindex>\u00bb <i>(Dmitry Stolyarov; 28 maggio 2018 a RootConf)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/345116\/\">Migliori pratiche CI\/CD con Kubernetes e GitLab<\/a><\/noindex>\u00bb <i>(Dmitry Stolyarov; 7 novembre 2017 a HighLoad++)<\/i>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/331188\/\">La nostra esperienza con Kubernetes in progetti piccoli<\/a><\/noindex>\u00bb <i>(Dmitry Stolyarov; 6 giugno 2017 a RootConf)<\/i>.<\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/459326\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>27 \u0430\u043f\u0440\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0421\u0442\u0430\u0447\u043a\u0430-2019, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u043a\u0446\u0438\u0438 \u00abDevOps\u00bb, \u043f\u0440\u043e\u0437\u0432\u0443\u0447\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u00ab\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes\u00bb. \u0412 \u043d\u0451\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e K8s \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c (44 \u043c\u0438\u043d\u0443\u0442\u044b, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27113,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36246","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"27 \u0430\u043f\u0440\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0421\u0442\u0430\u0447\u043a\u0430-2019, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u043a\u0446\u0438\u0438 \u00abDevOps\u00bb, \u043f\u0440\u043e\u0437\u0432\u0443\u0447\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u00ab\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes\u00bb. \u0412 \u043d\u0451\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e K8s \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c (44 \u043c\u0438\u043d\u0443\u0442\u044b, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes (\u043e\u0431\u0437\u043e\u0440 \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"27 \u0430\u043f\u0440\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0421\u0442\u0430\u0447\u043a\u0430-2019, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u043a\u0446\u0438\u0438 \u00abDevOps\u00bb, \u043f\u0440\u043e\u0437\u0432\u0443\u0447\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u00ab\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes\u00bb. \u0412 \u043d\u0451\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e K8s \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c (44 \u043c\u0438\u043d\u0443\u0442\u044b, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:10:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:10:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Autoscalabilit\u00e0 e gestione delle risorse in Kubernetes (panoramica e video della relazione) | ProHoster","description":"Il 27 aprile, durante la conferenza Stachka-2019, nella sezione \u00abDevOps\u00bb, \u00e8 stata presentata la relazione \u00abAutoscalabilit\u00e0 e gestione delle risorse in Kubernetes\u00bb. In essa si spiega come garantire l'alta disponibilit\u00e0 delle applicazioni e assicurarne le massime prestazioni con K8s. Come di consueto, siamo felici di presentare il video della relazione (44 minuti, molto pi\u00f9 informativo dell'articolo) e il riepilogo principale in formato testuale. Andiamo! Analizziamo","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes (\u043e\u0431\u0437\u043e\u0440 \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430) | ProHoster","og:description":"27 \u0430\u043f\u0440\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u0421\u0442\u0430\u0447\u043a\u0430-2019, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0435\u043a\u0446\u0438\u0438 \u00abDevOps\u00bb, \u043f\u0440\u043e\u0437\u0432\u0443\u0447\u0430\u043b \u0434\u043e\u043a\u043b\u0430\u0434 \u00ab\u0410\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u0432 Kubernetes\u00bb. \u0412 \u043d\u0451\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e K8s \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0440\u0430\u0434\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c (44 \u043c\u0438\u043d\u0443\u0442\u044b, \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u0435\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/avtomasshtabirovanie-i-upravlenie-resursami-v-kubernetes-obzor-i-video-doklada","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:10:28+00:00","article:modified_time":"2019-10-31T19:10:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36246","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:33:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:48:26","updated":"2026-01-22 02:33:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36246"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36246\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27113"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}