{"id":80076,"date":"2020-05-03T01:42:34","date_gmt":"2020-05-02T23:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt"},"modified":"2020-05-03T01:42:34","modified_gmt":"2020-05-02T23:42:34","slug":"proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt","title":{"rendered":"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Przyp. t\u0142um.<\/b>: ten materia\u0142 z projektu edukacyjnego <noindex><a rel=\"nofollow\" href=\"https:\/\/learnk8s.io\/\">learnk8s<\/a><\/noindex> \u2014 odpowied\u017a na popularne pytanie podczas projektowania infrastruktury opartej na Kubernetesie. Mamy nadziej\u0119, \u017ce wystarczaj\u0105co szczeg\u00f3\u0142owe opisy zalet i wad ka\u017cdej z opcji pomog\u0105 w podj\u0119ciu optymalnej decyzji tak\u017ce w Twoim projekcie.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/d3cc3b7e686e39032b1f02f3e8b6c46c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>TL;DR<\/b>: ta sama zestaw obci\u0105\u017ce\u0144 roboczych mo\u017cna uruchomi\u0107 na kilku du\u017cych klastrach (na ka\u017cdy klaster przypadnie du\u017ca liczba obci\u0105\u017ce\u0144) lub na wielu ma\u0142ych (z ma\u0142\u0105 liczb\u0105 obci\u0105\u017ce\u0144 w ka\u017cdym klastrze).<\/p>\n<p>Poni\u017cej znajduje si\u0119 tabela oceniaj\u0105ca zalety i wady ka\u017cdego podej\u015bcia:<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/ab5b5fefc97c3befddbaeb0791f8a90d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodczas wykorzystania KuberneTESa jako platformy do uruchamiania aplikacji cz\u0119sto pojawia si\u0119 kilka podstawowych pyta\u0144 dotycz\u0105cych szczeg\u00f3\u0142\u00f3w konfiguracji klastr\u00f3w:<\/p>\n<ul>\n<li> <i>Ile klastr\u00f3w u\u017cy\u0107?<\/i><\/li>\n<li> <i>Jak du\u017ce maj\u0105 by\u0107?<\/i><\/li>\n<li> <i>Co powinien zawiera\u0107 ka\u017cdy klaster?<\/i><\/li>\n<\/ul>\n<p>\nW tym artykule postaram si\u0119 odpowiedzie\u0107 na te pytania, analizuj\u0105c zalety i wady ka\u017cdego podej\u015bcia.<\/p>\n<h2>Formu\u0142owanie pytania<\/h2>\n<p>\nJako tw\u00f3rca oprogramowania prawdopodobnie r\u00f3wnolegle rozwijasz i uruchamiasz wiele aplikacji.<\/p>\n<p>Ponadto wiele egzemplarzy tych aplikacji na pewno dzia\u0142a w r\u00f3\u017cnych \u015brodowiskach \u2014 na przyk\u0142ad mog\u0105 to by\u0107 <i>dev<\/i>, <i>test<\/i> i <i>prod<\/i>.<\/p>\n<p>W rezultacie otrzymujemy ca\u0142\u0105 matryc\u0119 aplikacji i \u015brodowisk:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/f2a811fa82e1e433463ba25d29f837e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Aplikacje i \u015brodowiska<\/i><\/p>\n<p>W powy\u017cszym przyk\u0142adzie przedstawiono 3 aplikacje i 3 \u015brodowiska, co daje \u0142\u0105cznie 9 mo\u017cliwych wariant\u00f3w.<\/p>\n<p>Ka\u017cdy egzemplarz aplikacji stanowi samodzieln\u0105 jednostk\u0119 wdro\u017ceniow\u0105, z kt\u00f3r\u0105 mo\u017cna pracowa\u0107 niezale\u017cnie od innych.<\/p>\n<p><i>Zauwa\u017c, \u017ce <b>egzemplarz aplikacji<\/b> mo\u017ce sk\u0142ada\u0107 si\u0119 z wielu <b>element\u00f3w<\/b>, takich jak frontend, backend, baza danych itp. W przypadku aplikacji mikroserwisowej egzemplarz b\u0119dzie obejmowa\u0142 wszystkie mikroserwisy.<\/i><\/p>\n<p>W rezultacie u\u017cytkownicy Kubernetesa maj\u0105 kilka pyta\u0144:<\/p>\n<ul>\n<li> Czy warto umieszcza\u0107 wszystkie egzemplarze aplikacji w jednym klastrze?<\/li>\n<li> Czy warto zak\u0142ada\u0107 osobny klaster dla ka\u017cdego egzemplarza aplikacji?<\/li>\n<li> A mo\u017ce lepiej skorzysta\u0107 z kombinacji powy\u017cszych podej\u015b\u0107?<\/li>\n<\/ul>\n<p>\nWszystkie te opcje s\u0105 jak najbardziej wykonalne, poniewa\u017c Kubernetes to elastyczny system, kt\u00f3ry nie ogranicza u\u017cytkownik\u00f3w w mo\u017cliwo\u015bciach.<\/p>\n<p>Oto kilka mo\u017cliwych dr\u00f3g:<\/p>\n<ul>\n<li> jeden du\u017cy wsp\u00f3lny klaster;<\/li>\n<li> wiele ma\u0142ych, wyspecjalizowanych klastr\u00f3w;<\/li>\n<li> jeden klaster dla ka\u017cdej aplikacji;<\/li>\n<li> jeden klaster dla ka\u017cdego \u015brodowiska.<\/li>\n<\/ul>\n<p>\nJak pokazano poni\u017cej, pierwsze dwa podej\u015bcia znajduj\u0105 si\u0119 na przeciwleg\u0142ych ko\u0144cach skali opcji:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/99b8fd0d1e4173705e7996cf8ccb6eec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Od kilku du\u017cych klastr\u00f3w (po lewej) do wielu ma\u0142ych (po prawej)<\/i><\/p>\n<p><i>W og\u00f3lnym przypadku uznaje si\u0119, \u017ce jeden klaster jest \u00abwi\u0119kszy\u00bb od drugiego, je\u015bli ma wi\u0119cej w\u0119z\u0142\u00f3w i pod\u00f3w. Na przyk\u0142ad, klaster z 10 w\u0119z\u0142ami i 100 podami jest wi\u0119kszy ni\u017c klaster z 1 w\u0119z\u0142em i 10 podami.<\/i><\/p>\n<p>C\u00f3\u017c, zacznijmy!<\/p>\n<h2>1. Jeden du\u017cy wsp\u00f3lny klaster<\/h2>\n<p>\nPierwsza opcja \u2014 umie\u015bci\u0107 wszystkie obci\u0105\u017cenia robocze w jednym klastrze:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/283fc3c3f5ccb40a157ccff600628114.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jeden du\u017cy klaster<\/i><\/p>\n<p>W ramach tego podej\u015bcia klaster wykorzystywany jest jako uniwersalna <b>platforma infrastrukturalna<\/b> \u2014 wszystko, co potrzebne, po prostu wdra\u017casz w istniej\u0105cym klastrze Kubernetes.<\/p>\n<p><i><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/working-with-objects\/namespaces\/\">Przestrzenie nazw<\/a><\/noindex> Kubernetes pozwala logicznie oddzieli\u0107 cz\u0119\u015bci klastra od siebie, dzi\u0119ki czemu dla ka\u017cdego egzemplarza aplikacji mo\u017cna u\u017cywa\u0107 w\u0142asnej przestrzeni nazw.<\/i><\/p>\n<p><i>Przyjrzyjmy si\u0119 zaletom i wadom tego podej\u015bcia.<\/i><\/p>\n<h3>+ Efektywne wykorzystanie zasob\u00f3w<\/h3>\n<p>\nW przypadku jednego klastra wymagana jest tylko jedna kopia wszystkich zasob\u00f3w potrzebnych do uruchomienia klastra Kubernetes i zarz\u0105dzania nim.<\/p>\n<p>Na przyk\u0142ad dotyczy to w\u0119z\u0142\u00f3w g\u0142\u00f3wnych. Zazwyczaj na ka\u017cdy klaster Kubernetes przypada 3 w\u0119z\u0142y g\u0142\u00f3wne, wi\u0119c dla jednego jedynego klastra ich liczba pozostanie taka sama (dla por\u00f3wnania, 10 klastr\u00f3w b\u0119dzie potrzebowa\u0107 30 w\u0119z\u0142\u00f3w g\u0142\u00f3wnych).<\/p>\n<p>Powy\u017csza subtelno\u015b\u0107 odnosi si\u0119 r\u00f3wnie\u017c do innych us\u0142ug dzia\u0142aj\u0105cych w skali ca\u0142ego klastra, takich jak load balancery, kontrolery Ingress, systemy autoryzacji, logowania i monitorowania.<\/p>\n<p>W jednym klastrze wszystkie te us\u0142ugi mo\u017cna wykorzysta\u0107 od razu dla wszystkich obci\u0105\u017ce\u0144 roboczych (nie trzeba tworzy\u0107 ich kopii, jak w przypadku wielu klastr\u00f3w).<\/p>\n<h3>+ Taniej<\/h3>\n<p>\nW zwi\u0105zku z powy\u017cszym, mniejsza liczba klastr\u00f3w zwykle kosztuje mniej, poniewa\u017c nie ma wydatk\u00f3w na nadmiarowe zasoby.<\/p>\n<p>Dotyczy to szczeg\u00f3lnie w\u0119z\u0142\u00f3w g\u0142\u00f3wnych, kt\u00f3re mog\u0105 kosztowa\u0107 znaczn\u0105 sum\u0119 bez wzgl\u0119du na spos\u00f3b lokalizacji (na miejscu lub w chmurze).<\/p>\n<p>Niekt\u00f3re zarz\u0105dzane us\u0142ugi Kubernetes, takie jak <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\">Google Kubernetes Engine (GKE)<\/a><\/noindex> lub <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/aks\/\">Azure Kubernetes Service (AKS)<\/a><\/noindex>, zapewniaj\u0105 warstw\u0119 zarz\u0105dzaj\u0105c\u0105 za darmo. W tym przypadku kwestie kosztowe s\u0105 mniej pal\u0105ce.<\/p>\n<p>Istniej\u0105 r\u00f3wnie\u017c us\u0142ugi zarz\u0105dzane, pobieraj\u0105ce sta\u0142\u0105 op\u0142at\u0119 za dzia\u0142anie ka\u017cdego klastra Kubernetes (na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/eks\/\">Amazon Elastic Kubernetes Service, EKS<\/a><\/noindex>).<\/p>\n<h3>+ Efektywne zarz\u0105dzanie<\/h3>\n<p>\nZarz\u0105dzanie jednym klastrem jest prostsze ni\u017c wieloma.<\/p>\n<p>Zarz\u0105dzanie mo\u017ce obejmowa\u0107 nast\u0119puj\u0105ce zadania:<\/p>\n<ul>\n<li> aktualizacja wersji Kubernetes;<\/li>\n<li> konfiguracja potoku CI\/CD;<\/li>\n<li> instalacja wtyczki CNI;<\/li>\n<li> konfiguracja systemu uwierzytelniania u\u017cytkownik\u00f3w;<\/li>\n<li> instalacja kontrolera dost\u0119pu;<\/li>\n<\/ul>\n<p>\ni wiele innych\u2026<\/p>\n<p>W przypadku jednego klastra wszystkie te czynno\u015bci trzeba wykona\u0107 tylko raz.<\/p>\n<p>W przypadku wielu klastr\u00f3w operacje te b\u0119d\u0105 musia\u0142y by\u0107 powtarzane wielokrotnie, co prawdopodobnie wymaga jakiej\u015b automatyzacji proces\u00f3w i narz\u0119dzi, aby zapewni\u0107 systematyczno\u015b\u0107 i jednolito\u015b\u0107 procesu.<\/p>\n<p><i>A teraz kilka s\u0142\u00f3w o wadach.<\/i><\/p>\n<h3>\u2212 Pojedynczy punkt awarii<\/h3>\n<p>\nW przypadku awarii <i>jednego<\/i> klastra natychmiast przestan\u0105 dzia\u0142a\u0107 <i>wszystkie<\/i> wszystkie obci\u0105\u017cenia robocze!<\/p>\n<p>Istnieje wiele scenariuszy, kiedy co\u015b mo\u017ce p\u00f3j\u015b\u0107 nie tak:<\/p>\n<ul>\n<li> aktualizacja Kubernetes powoduje nieoczekiwane efekty uboczne;<\/li>\n<li> komponent klastra (na przyk\u0142ad, wtyczka CNI) zaczyna dzia\u0142a\u0107 inaczej ni\u017c oczekiwano;<\/li>\n<li> jeden z komponent\u00f3w klastra jest \u017ale skonfigurowany;<\/li>\n<li> usterka w infrastrukturze bazowej.<\/li>\n<\/ul>\n<p>\nTaki incydent mo\u017ce wyrz\u0105dzi\u0107 powa\u017cne szkody wszystkim obci\u0105\u017ceniom roboczym umieszczonym w wsp\u00f3lnym klastrze.<\/p>\n<h3>\u2212 Brak silnej izolacji<\/h3>\n<p>\nPraca w wsp\u00f3lnym klastrze oznacza, \u017ce aplikacje wsp\u00f3\u0142dziel\u0105 zasoby sprz\u0119towe, mo\u017cliwo\u015bci sieciowe i system operacyjny na w\u0119z\u0142ach klastra.<\/p>\n<p>W pewnym sensie dwa kontenery z dwoma r\u00f3\u017cnymi aplikacjami dzia\u0142aj\u0105cymi na tym samym w\u0119\u017ale s\u0105 podobne do dw\u00f3ch proces\u00f3w dzia\u0142aj\u0105cych na tej samej maszynie pod kontrol\u0105 tego samego j\u0105dra OS.<\/p>\n<p><i>Kontenery Linux zapewniaj\u0105 pewn\u0105 form\u0119 izolacji, ale nie jest ona tak silna, jak ta, kt\u00f3r\u0105 zapewniaj\u0105 na przyk\u0142ad maszyny wirtualne. W istocie proces w kontenerze to ten sam proces uruchomiony w systemie operacyjnym hosta.<\/i><\/p>\n<p>Mo\u017ce to stanowi\u0107 problem z punktu widzenia bezpiecze\u0144stwa: taka organizacja teoretycznie pozwala niepowi\u0105zanym aplikacjom wchodzi\u0107 ze sob\u0105 w interakcje (umy\u015blnie lub przypadkowo).<\/p>\n<p>Ponadto wszystkie obci\u0105\u017cenia robocze w klastrze Kubernetes wsp\u00f3\u0142dziel\u0105 niekt\u00f3re wsp\u00f3lne us\u0142ugi klastra, takie jak <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/dns-pod-service\/\">DNS<\/a><\/noindex> \u2014 umo\u017cliwiaj\u0105 aplikacjom znajdowanie us\u0142ugi innych aplikacji w klastrze.<\/p>\n<p><i>Wszystkie powy\u017csze punkty mog\u0105 mie\u0107 r\u00f3\u017cne znaczenie w zale\u017cno\u015bci od wymaga\u0144 dotycz\u0105cych bezpiecze\u0144stwa aplikacji.<\/i><\/p>\n<p>Kubernetes dostarcza r\u00f3\u017cne narz\u0119dzia do zapobiegania problemom w systemie bezpiecze\u0144stwa, takie jak <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/pod-security-policy\/\">PodSecurityPolicies<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/network-policies\/\">NetworkPolicies<\/a><\/noindex>. Jednak ich poprawna konfiguracja wymaga pewnego do\u015bwiadczenia, ponadto nie s\u0105 w stanie zamkn\u0105\u0107 absolutnie wszystkich luk w bezpiecze\u0144stwie.<\/p>\n<p>Wa\u017cne jest, aby zawsze pami\u0119ta\u0107, \u017ce Kubernetes zosta\u0142 pierwotnie zaprojektowany do <i>wsp\u00f3\u0142dzielenia<\/i>, a nie do <i>izolacji i bezpiecze\u0144stwa<\/i>.<\/p>\n<h3>\u2212 Brak surowej multi-tenancy<\/h3>\n<p>\nBior\u0105c pod uwag\u0119 liczne wsp\u00f3lne zasoby w klastrze Kubernetes, istnieje wiele sposob\u00f3w, w jakie r\u00f3\u017cne aplikacje mog\u0105 \"depta\u0107 sobie po pi\u0119tach\".<\/p>\n<p>Na przyk\u0142ad aplikacja mo\u017ce zmonopolizowa\u0107 jaki\u015b wsp\u00f3lny zas\u00f3b (tak jak procesor czy pami\u0119\u0107) i pozbawi\u0107 inne aplikacje dzia\u0142aj\u0105ce na tym samym w\u0119\u017ale dost\u0119pu do niego.<\/p>\n<p>Kubernetes zapewnia r\u00f3\u017cne mechanizmy kontrolowania takiego zachowania, takie jak <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/manage-compute-resources-container\/\">\u017c\u0105dania zasob\u00f3w i limity<\/a><\/noindex> <i>(zob. tak\u017ce artyku\u0142 \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/489668\/\"> Limity CPU i agresywny throttling w Kubernetes <\/a><\/noindex>\u201d \u2014 przyp. t\u0142um.)<\/i>, <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/resource-quotas\/\">ResourceQuotas<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/policy\/limit-range\/\">LimitRanges<\/a><\/noindex>. Jednak, podobnie jak w przypadku bezpiecze\u0144stwa, ich konfiguracja jest do\u015b\u0107 skomplikowana i nie mog\u0105 one zapobiec absolutnie wszystkim nieprzewidzianym skutkom ubocznym.<\/p>\n<h3>\u2212 Du\u017ca liczba u\u017cytkownik\u00f3w<\/h3>\n<p>\nW przypadku pojedynczego klastra konieczne jest udost\u0119pnienie go wielu osobom. Im wi\u0119cej os\u00f3b, tym wi\u0119ksze ryzyko, \u017ce co\u015b \"zepsuj\u0105\".<\/p>\n<p>W obr\u0119bie klastra mo\u017cna kontrolowa\u0107, kto i co mo\u017ce robi\u0107 za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/rbac\/\">zarz\u0105dzania dost\u0119pem opartego na rolach (RBAC)<\/a><\/noindex> <i>(zob. artyku\u0142 \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/470503\/\"> U\u017cytkownicy i autoryzacja RBAC w Kubernetes <\/a><\/noindex>\u201d \u2014 przyp. t\u0142um.)<\/i>. Cho\u0107 nie przeszkodzi to u\u017cytkownikom w \"zepsuciu\" czego\u015b w ramach swojej odpowiedzialno\u015bci.<\/p>\n<h3>\u2212 Klastry nie mog\u0105 rosn\u0105\u0107 w niesko\u0144czono\u015b\u0107<\/h3>\n<p>\nKlaster, kt\u00f3ry jest u\u017cywany dla wszystkich obci\u0105\u017ce\u0144 roboczych, b\u0119dzie prawdopodobnie do\u015b\u0107 du\u017cy (pod wzgl\u0119dem liczby w\u0119z\u0142\u00f3w i pod\u00f3w).<\/p>\n<p>Jednak pojawia si\u0119 inny problem: klastry w Kubernetes nie mog\u0105 rosn\u0105\u0107 w niesko\u0144czono\u015b\u0107.<\/p>\n<p>Istnieje teoretyczny limit rozmiaru klastra. W Kubernetes wynosi on oko\u0142o <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/best-practices\/cluster-large\/\">5000 w\u0119z\u0142\u00f3w, 150 tys. pod\u00f3w i 300 tys. kontener\u00f3w<\/a><\/noindex>.<\/p>\n<p>Jednak w rzeczywisto\u015bci problemy mog\u0105 rozpocz\u0105\u0107 si\u0119 znacznie wcze\u015bniej \u2014 na przyk\u0142ad ju\u017c przy <noindex><a rel=\"nofollow\" href=\"https:\/\/events19.lfasiallc.com\/wp-content\/uploads\/2017\/11\/BoF_-Not-One-Size-Fits-All-How-to-Size-Kubernetes-Clusters_Guang-Ya-Liu-_-Sahdev-Zala.pdf\">500 w\u0119z\u0142ach<\/a><\/noindex>.<\/p>\n<p>Chodzi o to, \u017ce du\u017ce klastry wywieraj\u0105 wysokie obci\u0105\u017cenie na warstw\u0119 zarz\u0105dzaj\u0105c\u0105 Kubernetes. Innymi s\u0142owy, aby utrzyma\u0107 klaster w dobrym stanie i efektywnie wykorzystywa\u0107 zasoby, konieczna jest staranna konfiguracja.<\/p>\n<p><i>Problem ten jest omawiany w odpowiednim artykule na oryginalnym blogu zatytu\u0142owanym \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/learnk8s.io\/kubernetes-node-size\">Architecting Kubernetes clusters \u2014 choosing a worker node size<\/a><\/noindex>\u00bb.<\/i><\/p>\n<p><i>Ale przyjrzyjmy si\u0119 przeciwstawnemu podej\u015bciu: wiele ma\u0142ych klastr\u00f3w.<\/i><\/p>\n<h2>2. Wiele ma\u0142ych, wyspecjalizowanych klastr\u00f3w<\/h2>\n<p>\nW tym podej\u015bciu u\u017cywasz oddzielnego klastra dla ka\u017cdego wdra\u017canego elementu:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/2320f62d945944f2e26f07252e9b8440.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wiele ma\u0142ych klastr\u00f3w<\/i><\/p>\n<p>Dla cel\u00f3w tego artyku\u0142u przez <i>wdra\u017cany element<\/i> rozumie si\u0119 instancj\u0119 aplikacji \u2014 na przyk\u0142ad wersj\u0119 dev oddzielnej aplikacji.<\/p>\n<p>W tej strategii Kubernetes jest u\u017cywany jako wyspecjalizowane <b>\u015brodowisko wykonawcze<\/b> dla pojedynczych instancji aplikacji.<\/p>\n<p><i>Przyjrzyjmy si\u0119 zaletom i wadom tego podej\u015bcia.<\/i><\/p>\n<h3>+ Ograniczony \u201epromie\u0144 eksplozji\u201d<\/h3>\n<p>\nW przypadku awarii klastra negatywne skutki ograniczaj\u0105 si\u0119 jedynie do tych obci\u0105\u017ce\u0144 roboczych, kt\u00f3re zosta\u0142y uruchomione w tym klastrze. Wszystkie inne obci\u0105\u017cenia pozostaj\u0105 nienaruszone.<\/p>\n<h3>+ Izolacja<\/h3>\n<p>\nObci\u0105\u017cenia robocze ulokowane w indywidualnych klastrach nie maj\u0105 wsp\u00f3lnych zasob\u00f3w, takich jak procesor, pami\u0119\u0107, system operacyjny, sie\u0107 czy inne us\u0142ugi.<\/p>\n<p>W rezultacie uzyskujemy siln\u0105 izolacj\u0119 mi\u0119dzy niezwi\u0105zanymi aplikacjami, co mo\u017ce pozytywnie wp\u0142ywa\u0107 na ich bezpiecze\u0144stwo.<\/p>\n<h3>+ Niewielka liczba u\u017cytkownik\u00f3w<\/h3>\n<p>\nBior\u0105c pod uwag\u0119, \u017ce w ka\u017cdym klastrze znajduje si\u0119 jedynie ograniczony zestaw obci\u0105\u017ce\u0144 roboczych, liczba u\u017cytkownik\u00f3w maj\u0105cych do niego dost\u0119p jest zmniejszona.<\/p>\n<p>Im mniej os\u00f3b ma dost\u0119p do klastra, tym mniejsze ryzyko, \u017ce co\u015b si\u0119 \u201ezepsuje\u201d.<\/p>\n<p><i>Przyjrzyjmy si\u0119 wadom.<\/i><\/p>\n<h3>\u2212 Nieefektywne wykorzystanie zasob\u00f3w<\/h3>\n<p>\nJak wspomniano wcze\u015bniej, ka\u017cdy klaster Kubernetes wymaga okre\u015blonej ilo\u015bci zasob\u00f3w zarz\u0105dzaj\u0105cych: w\u0119z\u0142\u00f3w master, komponent\u00f3w warstwy kontrolnej, rozwi\u0105za\u0144 do monitorowania i rejestrowania.<\/p>\n<p>W przypadku du\u017cej liczby ma\u0142ych klastr\u00f3w konieczne jest przeznaczenie wi\u0119kszej cz\u0119\u015bci zasob\u00f3w na zarz\u0105dzanie.<\/p>\n<h3>\u2212 Wysokie koszty<\/h3>\n<p>\nNieefektywne wykorzystanie zasob\u00f3w automatycznie prowadzi do wysokich wydatk\u00f3w.<\/p>\n<p>Na przyk\u0142ad, posiadanie 30 w\u0119z\u0142\u00f3w zamiast trzech przy tej samej mocy obliczeniowej na pewno wp\u0142ynie na koszty.<\/p>\n<h3>\u2212 Trudno\u015bci w administracji<\/h3>\n<p>\nAdministracja wieloma klastrami Kubernetes jest znacznie bardziej skomplikowana ni\u017c praca z jednym.<\/p>\n<p>Na przyk\u0142ad, konieczne b\u0119dzie skonfigurowanie uwierzytelniania i autoryzacji dla ka\u017cdego klastra. Aktualizacja wersji Kubernetes r\u00f3wnie\u017c b\u0119dzie musia\u0142a by\u0107 przeprowadzana wielokrotnie.<\/p>\n<p>Prawdopodobnie b\u0119dziesz musia\u0142 zastosowa\u0107 automatyzacj\u0119, aby zwi\u0119kszy\u0107 efektywno\u015b\u0107 tych wszystkich zada\u0144.<\/p>\n<p><i>Teraz przyjrzyjmy si\u0119 mniej ekstremalnym scenariuszom.<\/i><\/p>\n<h2>3. Jeden klaster na ka\u017cd\u0105 aplikacj\u0119<\/h2>\n<p>\nW ramach tego podej\u015bcia tworzysz oddzielny klaster dla wszystkich instancji konkretnej aplikacji:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/238ee74d4e4dc42b7daeadc1ce484905.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Klaster na aplikacj\u0119<\/i><\/p>\n<p>Taki kierunek mo\u017cna traktowa\u0107 jako uog\u00f3lnienie zasady \u201e<b>oddzielny klaster na zesp\u00f3\u0142<\/b>\u201d, poniewa\u017c zazwyczaj zesp\u00f3\u0142 in\u017cynier\u00f3w zajmuje si\u0119 rozwojem jednej lub kilku aplikacji.<\/p>\n<p><i>Przyjrzyjmy si\u0119 zaletom i wadom tego podej\u015bcia.<\/i><\/p>\n<h3>+ Klaster mo\u017cna dostosowa\u0107 do aplikacji<\/h3>\n<p>\nJe\u015bli aplikacja ma szczeg\u00f3lne potrzeby, mo\u017cna je zrealizowa\u0107 w klastrze, nie wp\u0142ywaj\u0105c na inne klastry.<\/p>\n<p>Takie potrzeby mog\u0105 obejmowa\u0107 pracownik\u00f3w z GPU, okre\u015blone wtyczki CNI, siatk\u0119 us\u0142ug lub jaki\u015b inny serwis.<\/p>\n<p>Ka\u017cdy klaster mo\u017cna dostosowa\u0107 do aplikacji, kt\u00f3ra w nim dzia\u0142a, aby zawiera\u0142 tylko to, co jest niezb\u0119dne.<\/p>\n<h3>\u2212 R\u00f3\u017cne \u015brodowiska w jednym klastrze<\/h3>\n<p>\nWad\u0105 tego podej\u015bcia jest to, \u017ce instancje aplikacji z r\u00f3\u017cnych \u015brodowisk wsp\u00f3\u0142istniej\u0105 w jednym klastrze.<\/p>\n<p>Na przyk\u0142ad, wersja prod aplikacji dzia\u0142a w tym samym klastrze, co wersja dev. Oznacza to r\u00f3wnie\u017c, \u017ce deweloperzy prowadz\u0105 swoj\u0105 dzia\u0142alno\u015b\u0107 w tym samym klastrze, w kt\u00f3rym funkcjonuje wersja produkcyjna aplikacji.<\/p>\n<p>Je\u015bli w wyniku dzia\u0142a\u0144 deweloper\u00f3w lub b\u0142\u0119d\u00f3w wersji dev w klastrze wyst\u0105pi awaria, istnieje potencjalne ryzyko, \u017ce r\u00f3wnie\u017c wersja prod zostanie dotkni\u0119ta \u2014 ogromna wada tego podej\u015bcia.<\/p>\n<p><i>No i w ko\u0144cu, ostatni scenariusz na naszej li\u015bcie.<\/i><\/p>\n<h2>4. Jeden klaster na ka\u017cde \u015brodowisko<\/h2>\n<p>\nTen scenariusz przewiduje przydzielenie oddzielnego klastra na ka\u017cde \u015brodowisko:<\/p>\n<p><img decoding=\"async\" alt=\"Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107?\" src=\"\/wp-content\/uploads\/2020\/05\/157da599edf178832b1b15459786fbc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jeden klaster na \u015brodowisko<\/i><\/p>\n<p>Na przyk\u0142ad, mo\u017cesz mie\u0107 klastry <i>dev<\/i>, <i>test<\/i> i <i>prod<\/i>, w kt\u00f3rych uruchomisz wszystkie instancje aplikacji przeznaczone dla konkretnego \u015brodowiska.<\/p>\n<p><i>Oto zalety i wady tego podej\u015bcia.<\/i><\/p>\n<h3>+ Izolacja \u015brodowiska prod<\/h3>\n<p>\nW ramach tego podej\u015bcia wszystkie \u015brodowiska s\u0105 od siebie izolowane. Jednak w praktyce jest to szczeg\u00f3lnie wa\u017cne dla \u015brodowiska produkcyjnego.<\/p>\n<p>Produkcje aplikacji nie s\u0105 teraz zale\u017cne od tego, co dzieje si\u0119 w innych klastrach i \u015brodowiskach.<\/p>\n<p>W ten spos\u00f3b, je\u015bli w klastrze deweloperskim nagle pojawi si\u0119 problem, wersje produkcyjne aplikacji b\u0119d\u0105 nadal dzia\u0142a\u0107, jakby nic si\u0119 nie wydarzy\u0142o.<\/p>\n<h3>+ Klaster mo\u017cna dostosowa\u0107 do \u015brodowiska<\/h3>\n<p>\nKa\u017cdy klaster mo\u017cna dostosowa\u0107 do jego \u015brodowiska. Na przyk\u0142ad mo\u017cna:<\/p>\n<ul>\n<li> zainstalowa\u0107 w klastrze deweloperskim narz\u0119dzia do programowania i debugowania;<\/li>\n<li> zainstalowa\u0107 frameworki testowe i narz\u0119dzia w klastrze <i>test<\/i>;<\/li>\n<li> u\u017cytkowa\u0107 mocniejsze sprz\u0119ty i kana\u0142y sieciowe w klastrze <i>prod<\/i>.<\/li>\n<\/ul>\n<p>\nPozwala to zwi\u0119kszy\u0107 efektywno\u015b\u0107 zar\u00f3wno podczas rozwoju, jak i eksploatacji aplikacji.<\/p>\n<h3>+ Ograniczenie dost\u0119pu do klastra produkcyjnego<\/h3>\n<p>\nPotrzeba pracy z klastrem produkcyjnym bezpo\u015brednio pojawia si\u0119 rzadko, wi\u0119c mo\u017cna znacznie ograniczy\u0107 kr\u0105g os\u00f3b, kt\u00f3re maj\u0105 do niego dost\u0119p.<\/p>\n<p>Mo\u017cna p\u00f3j\u015b\u0107 nawet dalej i ca\u0142kowicie pozbawi\u0107 ludzi dost\u0119pu do tego klastra, a wszystkie wdro\u017cenia realizowa\u0107 za pomoc\u0105 zautomatyzowanego narz\u0119dzia CI\/CD. Takie podej\u015bcie znacznie ograniczy ryzyko b\u0142\u0119d\u00f3w ludzkich w\u0142a\u015bnie tam, gdzie jest to najbardziej aktualne.<\/p>\n<p><i>A teraz kilka s\u0142\u00f3w o wadach.<\/i><\/p>\n<h3>\u2212 Brak izolacji mi\u0119dzy aplikacjami<\/h3>\n<p>\nG\u0142\u00f3wn\u0105 wad\u0105 tego podej\u015bcia jest brak izolacji sprz\u0119towej i zasobowej mi\u0119dzy aplikacjami.<\/p>\n<p>Niezwi\u0105zane aplikacje wsp\u00f3lnie korzystaj\u0105 z zasob\u00f3w klastra: systemowego j\u0105dra, procesora, pami\u0119ci i innych us\u0142ug.<\/p>\n<p>Jak ju\u017c wspomniano, mo\u017ce to by\u0107 potencjalnie niebezpieczne.<\/p>\n<h3>\u2212 Niemo\u017cno\u015b\u0107 lokalizacji zale\u017cno\u015bci aplikacji<\/h3>\n<p>\nJe\u015bli aplikacja ma szczeg\u00f3lne wymagania, musz\u0105 one by\u0107 spe\u0142nione we wszystkich klastrach.<\/p>\n<p>Na przyk\u0142ad, je\u015bli aplikacja wymaga GPU, to ka\u017cdy klaster musi mie\u0107 przynajmniej jednego workera z GPU (nawet je\u015bli jest on u\u017cywany tylko przez t\u0119 aplikacj\u0119).<\/p>\n<p>W rezultacie ryzykujemy wy\u017csze koszty i nieefektywne wykorzystanie zasob\u00f3w.<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nPrzy posiadaniu okre\u015blonego zestawu aplikacji mo\u017cna je umie\u015bci\u0107 w kilku du\u017cych klastrach lub w wielu ma\u0142ych.<\/p>\n<p>W artykule om\u00f3wiono zalety i wady r\u00f3\u017cnych podej\u015b\u0107, pocz\u0105wszy od jednego globalnego klastra, a\u017c po kilka ma\u0142ych i wyspecjalizowanych:<\/p>\n<ul>\n<li> jeden du\u017cych wsp\u00f3lny klaster;<\/li>\n<li> wiele ma\u0142ych, wyspecjalizowanych klastr\u00f3w;<\/li>\n<li> jeden klaster dla ka\u017cdej aplikacji;<\/li>\n<li> jeden klaster dla ka\u017cdego \u015brodowiska.<\/li>\n<\/ul>\n<p>\n<i>Jakie podej\u015bcie wybra\u0107?<\/i><\/p>\n<p>Jak zwykle, odpowied\u017a zale\u017cy od scenariusza u\u017cycia: nale\u017cy rozwa\u017cy\u0107 zalety i wady r\u00f3\u017cnych podej\u015b\u0107 i wybra\u0107 najbardziej optymalne rozwi\u0105zanie.<\/p>\n<p>Jednak wyb\u00f3r nie ogranicza si\u0119 do powy\u017cszych przyk\u0142ad\u00f3w \u2014 mo\u017cna wykorzysta\u0107 dowolne ich kombinacje!<\/p>\n<p>Na przyk\u0142ad, mo\u017cna zorganizowa\u0107 po dwa klastry dla ka\u017cdego zespo\u0142u: klaster do rozwoju (w kt\u00f3rym b\u0119d\u0105 \u015brodowiska <i>dev<\/i> i <i>test<\/i>) i klaster do <i>production<\/i> (gdzie znajduje si\u0119 \u015brodowisko produkcyjne).<\/p>\n<p>Opieraj\u0105c si\u0119 na informacjach z tego artyku\u0142u, b\u0119dziesz m\u00f3g\u0142 odpowiednio zoptymalizowa\u0107 zalety i wady pod konkretny scenariusz. Powodzenia!<\/p>\n<h2>P.S.<\/h2>\n<p>\nPrzeczytaj tak\u017ce na naszym blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/484954\/\">Wizualny poradnik do diagnostyki problem\u00f3w w Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480946\/\">Logi w Kubernetes (i nie tylko) dzisiaj: oczekiwania i rzeczywisto\u015b\u0107<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/478306\/\">Service Mesh: co ka\u017cdy Software Engineer powinien wiedzie\u0107 o najmodniejszej technologii<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468679\/\">Abecad\u0142o bezpiecze\u0144stwa w Kubernetes: autoryzacja, uwierzytelnianie, audyt<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/498100\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 learnk8s \u2014 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 Kubernetes. \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043b\u044e\u0441\u043e\u0432 \u0438 \u043c\u0438\u043d\u0443\u0441\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. TL;DR: \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 (\u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80077,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80076","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\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\/pl\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt\" \/>\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=\"2020-05-02T23:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-02T23:42:34+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\udd47Projektowanie klastr\u00f3w Kubernetes: ile ich powinno by\u0107? | ProHoster","description":"Przyk\u0142.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c? | ProHoster","og:description":"\u041f\u0440\u0438\u043c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/proektirovanie-kubernetes-klasterov-skolko-ih-dolzhno-byt","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":"2020-05-02T23:42:34+00:00","article:modified_time":"2020-05-02T23:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80076","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:24:58","updated":"2022-10-02 20:23:35","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=80076"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80076\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/80077"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=80076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=80076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=80076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}