{"id":35226,"date":"2019-10-31T22:03:05","date_gmt":"2019-10-31T19:03:05","guid":{"rendered":"https:\/\/prohoster.info\/blog\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator\/"},"modified":"2019-10-31T22:03:05","modified_gmt":"2019-10-31T19:03:05","slug":"gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator","title":{"rendered":"Czy \u0142atwo i wygodnie konfigurowa\u0107 klaster Kubernetes? Zapowiadamy addon-operator","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Czy \u0142atwo i wygodnie konfigurowa\u0107 klaster Kubernetes? Zapowiadamy addon-operator\" src=\"\/wp-content\/uploads\/8df3959f765d5d1bc8d427d3258aacc4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447442\/\">shell-operator<\/a><\/noindex> przedstawiamy jego starszego brata \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>. To projekt Open Source, kt\u00f3ry jest u\u017cywany do instalacji w klastrze Kubernetes komponent\u00f3w systemowych, kt\u00f3re mo\u017cna nazwa\u0107 wsp\u00f3lnym s\u0142owem \u2014 dodatki.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Po co w og\u00f3le jakie\u015b dodatki?<\/h2>\n<p>\nNie jest tajemnic\u0105, \u017ce Kubernetes to nie gotowy produkt all-in-one, a do zbudowania \u201edojrza\u0142ego\u201d klastra potrzebne b\u0119d\u0105 r\u00f3\u017cne dodatki. Addon-operator pomo\u017ce w instalacji, konfiguracji i utrzymaniu tych dodatk\u00f3w w aktualnym stanie.<\/p>\n<p>Konieczno\u015b\u0107 dodatkowych komponent\u00f3w w klastrze zosta\u0142a przedstawiona w <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">raporcie<\/a><\/noindex> koledzy <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/driusha\/\" class=\"user_link\">driusha<\/a><\/noindex>. Kr\u00f3tko m\u00f3wi\u0105c, sytuacja z Kubernetes na chwil\u0119 obecn\u0105 jest taka, \u017ce do prostego zainstalowania \u201edo zabawy\u201d mo\u017cna obej\u015b\u0107 si\u0119 komponentami z pude\u0142ka, dla deweloper\u00f3w i testowania mo\u017cna doda\u0107 Ingress, ale do pe\u0142noprawnej instalacji, o kt\u00f3rej mo\u017cna powiedzie\u0107 \u201etw\u00f3j produkcyjny klaster jest gotowy\u201d, trzeba doda\u0107 oko\u0142o dziesi\u0119ciu r\u00f3\u017cnych dodatk\u00f3w: co\u015b do monitorowania, co\u015b do log\u00f3w, nie zapomnie\u0107 o ingress i cert-manager, wyznaczy\u0107 grupy w\u0119z\u0142\u00f3w, doda\u0107 polityki sieciowe, przyprawi\u0107 ustawieniami sysctl i pod autoscaler\u2019em\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Czy \u0142atwo i wygodnie konfigurowa\u0107 klaster Kubernetes? Zapowiadamy addon-operator\" src=\"\/wp-content\/uploads\/ab3bed8ee8b29d4e51905e45c908f078.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Na czym polega specyfika pracy z nimi?<\/h2>\n<p>\nJak pokazuje praktyka, sama instalacja to nie wszystko. Aby komfortowo pracowa\u0107 z klastrem, dodatki nale\u017cy aktualizowa\u0107, wy\u0142\u0105cza\u0107 (usuwa\u0107 z klastra), a co\u015b mo\u017ce chcie\u0107 si\u0119 przetestowa\u0107 przed zainstalowaniem w klastrze produkcyjnym.<\/p>\n<p>Wi\u0119c mo\u017ce Ansible wystarczy? Mo\u017cliwe. Ale <b>pe\u0142noprawne dodatki w og\u00f3lnym przypadku nie dzia\u0142aj\u0105 bez konfiguracji<\/b>. Te ustawienia mog\u0105 si\u0119 r\u00f3\u017cni\u0107 w zale\u017cno\u015bci od opcji klastra (aws, gce, azure, bare-metal, do, \u2026). Niekt\u00f3re ustawienia nie mog\u0105 by\u0107 ustalone z g\u00f3ry \u2014 trzeba je uzyska\u0107 z klastra. A klaster nie jest statyczny: dla niekt\u00f3rych ustawie\u0144 nale\u017cy \u015bledzi\u0107 zmiany. I tutaj Ansible nie wystarcza: potrzeba programu, kt\u00f3ry dzia\u0142a w klastrze, tzn. Kubernetes Operator.<\/p>\n<p>Ci, kt\u00f3rzy wypr\u00f3bowali to w praktyce <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/shell-operator\">shell-operator<\/a><\/noindex>, powiedz\u0105, \u017ce zadania instalacji i aktualizacji dodatk\u00f3w oraz \u015bledzenia konfiguracji mo\u017cna rozwi\u0105za\u0107 za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/shell-operator\/blob\/master\/HOOKS.md\">hook\u00f3w<\/a><\/noindex> dla shell-operator. Mo\u017cna napisa\u0107 skrypt, kt\u00f3ry b\u0119dzie robi\u0142 warunkowy <code>kubectl apply<\/code> i \u015bledzi\u0107, na przyk\u0142ad, ConfigMap, w kt\u00f3rym b\u0119d\u0105 przechowywane ustawienia. Praktycznie to w\u0142a\u015bnie zosta\u0142o zrealizowane w addon-operator.<\/p>\n<h2>Jak to zorganizowano w addon-operator?<\/h2>\n<p>\nTworz\u0105c nowe rozwi\u0105zanie, kierowali\u015bmy si\u0119 nast\u0119puj\u0105cymi zasadami:<\/p>\n<ul>\n<li> Instalator dodatk\u00f3w musi wspiera\u0107 <b>szablonowanie i deklaratywn\u0105 konfiguracj\u0119<\/b>. Nie tworzymy magicznych skrypt\u00f3w instaluj\u0105cych rozszerzenia. Addon-operator u\u017cywa Helma do instalacji rozszerze\u0144. Aby zainstalowa\u0107, nale\u017cy stworzy\u0107 chart i wyodr\u0119bni\u0107 warto\u015bci, kt\u00f3re b\u0119d\u0105 u\u017cyte do konfiguracji. <\/li>\n<li> Ustawienia mo\u017cna <b>generowa\u0107 podczas instalacji<\/b>, mo\u017cna je <b>uzyska\u0107 z klastra<\/b>, albo <b>otrzymywa\u0107 aktualizacje<\/b>, \u015bledz\u0105c zasoby klastra. Te operacje mo\u017cna zrealizowa\u0107 za pomoc\u0105 hook\u00f3w.<\/li>\n<li> Ustawienia mo\u017cna <b>przechowywa\u0107 w klastrze<\/b>. Aby przechowywa\u0107 ustawienia w klastrze, tworzy si\u0119 ConfigMap\/addon-operator, a Addon-operator monitoruje zmiany tego ConfigMap. Addon-operator daje hookom dost\u0119p do ustawie\u0144 za pomoc\u0105 prostych konwencji.<\/li>\n<li> <b>Rozszerzenie zale\u017cy od ustawie\u0144<\/b>. Je\u015bli ustawienia si\u0119 zmieni\u0105, to Addon-operator wdra\u017ca chart Helma z nowymi warto\u015bciami. Po\u0142\u0105czenie charta Helma, jego warto\u015bci i hook\u00f3w nazwali\u015bmy modu\u0142em (szczeg\u00f3\u0142y poni\u017cej).<\/li>\n<li> <b>Staging<\/b>. Nie ma magicznych skrypt\u00f3w wydania. Mechanizm aktualizacji jest podobny do standardowej aplikacji \u2014 zbieramy rozszerzenia i addon-operator w obraz, tagujemy i wdra\u017camy.<\/li>\n<li> <b>Kontrola wyniku<\/b>. Addon-operator potrafi udost\u0119pnia\u0107 metryki dla Prometheusa.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Czym jest rozszerzenie w addon-operator?<\/h2>\n<p>\nRozszerzeniem mo\u017cna nazwa\u0107 wszystko, co dodaje do klastra nowe funkcje. Na przyk\u0142ad, instalacja Ingress to doskona\u0142y przyk\u0142ad rozszerzenia. Mo\u017ce to by\u0107 dowolny operator lub kontroler ze swoim CRD: prometheus-operator, cert-manager, kube-controller-manager itp. Lub co\u015b ma\u0142ego, co upraszcza eksploatacj\u0119 \u2014 na przyk\u0142ad secret copier, kt\u00f3ry kopiuje tajne dane rejestru do nowych przestrzeni nazw, lub sysctl tuner, kt\u00f3ry konfiguruje parametry sysctl na nowych w\u0119z\u0142ach.<\/p>\n<p>Aby zrealizowa\u0107 rozszerzenia, Addon-operator oferuje kilka koncepcji:<\/p>\n<ul>\n<li> <b>Helm chart<\/b> jest u\u017cywany do instalacji r\u00f3\u017cnego oprogramowania w klastrze \u2014 na przyk\u0142ad Prometheusa, Grafany, nginx-ingress. Je\u015bli dany komponent ma chart Helma, instalacja go za pomoc\u0105 Addon-operatora b\u0119dzie bardzo prosta.<\/li>\n<li> <b>Przechowalnia warto\u015bci<\/b>. Charty Helma zazwyczaj maj\u0105 wiele r\u00f3\u017cnych ustawie\u0144, kt\u00f3re mog\u0105 si\u0119 zmienia\u0107 z czasem. Addon-operator wspiera przechowywanie tych ustawie\u0144 i potrafi monitorowa\u0107 ich zmiany, aby ponownie zainstalowa\u0107 chart Helma z nowymi warto\u015bciami.<\/li>\n<li> <b>Hooki<\/b> \u2014 to pliki wykonywalne, kt\u00f3re Addon-operator uruchamia na zdarzenia i kt\u00f3re maj\u0105 dost\u0119p do przechowalni values. Hak mo\u017ce monitorowa\u0107 zmiany w klastrze i aktualizowa\u0107 warto\u015bci w przechowalni values. Tzn. za pomoc\u0105 hak\u00f3w mo\u017cna przeprowadzi\u0107 discovery, aby zbiera\u0107 warto\u015bci z klastra podczas uruchamiania lub wed\u0142ug harmonogramu, a tak\u017ce mo\u017cna przeprowadzi\u0107 continuous discovery, zbieraj\u0105c warto\u015bci z klastra wed\u0142ug zmian w klastrze.<\/li>\n<li> <b>Modu\u0142<\/b> \u2014 to po\u0142\u0105czenie wykresu Helm, przechowalni values i hak\u00f3w. Modu\u0142y mo\u017cna w\u0142\u0105cza\u0107 i wy\u0142\u0105cza\u0107. Wy\u0142\u0105czenie modu\u0142u polega na usuni\u0119ciu wszystkich wyda\u0144 wykresu Helm. Modu\u0142y mog\u0105 dynamicznie w\u0142\u0105cza\u0107 same siebie, na przyk\u0142ad je\u015bli w\u0142\u0105czone s\u0105 wszystkie potrzebne im modu\u0142y lub je\u015bli discovery w hakach znalaz\u0142o odpowiednie parametry \u2014 robi si\u0119 to z pomoc\u0105 pomocniczego skryptu enabled.<\/li>\n<li> <b>Globalne haki<\/b>. To haki \u201esame w sobie\u201d, nie s\u0105 do\u0142\u0105czone do modu\u0142\u00f3w i maj\u0105 dost\u0119p do globalnej przechowalni values, warto\u015bci z kt\u00f3rej s\u0105 dost\u0119pne wszystkim hakom w modu\u0142ach.<\/li>\n<\/ul>\n<p>\nJak te cz\u0119\u015bci wsp\u00f3\u0142pracuj\u0105? Zobaczmy obrazek z dokumentacji:<\/p>\n<p><img decoding=\"async\" alt=\"Czy \u0142atwo i wygodnie konfigurowa\u0107 klaster Kubernetes? Zapowiadamy addon-operator\" src=\"\/wp-content\/uploads\/c9bb8e5ae78aa5df0d6c4fbf353e4236.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nScenariuszy pracy s\u0105 dwa:<\/p>\n<ol>\n<li> Globalny hak uruchamiany jest na zdarzenie \u2014 na przyk\u0142ad, gdy zas\u00f3b w klastrze ulega zmianie. Ten hak przetwarza zmiany i zapisuje nowe warto\u015bci w globalnej przechowalni values. Addon-operator dostrzega, \u017ce globalna przechowalnia si\u0119 zmieni\u0142a i uruchamia wszystkie modu\u0142y. Ka\u017cdy modu\u0142 za pomoc\u0105 swoich hak\u00f3w okre\u015bla, czy powinien si\u0119 w\u0142\u0105czy\u0107, i aktualizuje swoj\u0105 przechowalni\u0119 values. Je\u015bli modu\u0142 jest w\u0142\u0105czony, to Addon-operator uruchamia instalacj\u0119 wykresu Helm. Wykresowi Helm s\u0105 w\u00f3wczas dost\u0119pne warto\u015bci z przechowalni modu\u0142u i z globalnej przechowalni.<\/li>\n<li> Drugi scenariusz jest prostszy: modu\u0142owy hak uruchamiany jest na zdarzenie, zmienia warto\u015bci w przechowalni values modu\u0142u. Addon-operator to dostrzega i uruchamia wykres Helm z zaktualizowanymi warto\u015bciami.<\/li>\n<\/ol>\n<p>\nDodatek mo\u017ce by\u0107 zrealizowany jako pojedynczy hak lub jako jeden wykres Helm, lub <b>nawet jako kilka zale\u017cnych modu\u0142\u00f3w<\/b> \u2014 to zale\u017cy od z\u0142o\u017cono\u015bci komponentu instalowanego w klastrze i od wymaganego poziomu elastyczno\u015bci ustawie\u0144. Na przyk\u0142ad, w repozytorium (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\/tree\/master\/examples\">\/examples<\/a><\/noindex>) znajduje si\u0119 dodatek sysctl-tuner, kt\u00f3ry zosta\u0142 zrealizowany zar\u00f3wno jako prosty modu\u0142 z hakiem i wykresem Helm, jak i z wykorzystaniem przechowalni values, co daje mo\u017cliwo\u015b\u0107 dodawania ustawie\u0144 przez edytowanie ConfigMap.<\/p>\n<h2>Dostawa aktualizacji<\/h2>\n<p>\nKilka s\u0142\u00f3w na temat organizacji aktualizacji komponent\u00f3w, kt\u00f3re instaluje Addon-operator.<\/p>\n<p>Aby uruchomi\u0107 Addon-operator w klastrze, nale\u017cy <b>stworzy\u0107 obraz z dodatkami<\/b> w postaci plik\u00f3w hook\u00f3w i Helm-chart\u00f3w, doda\u0107 plik binarny <code>addon-operator<\/code> i wszystko, co b\u0119dzie potrzebne do hook\u00f3w: <code>bash<\/code>, <code>kubectl<\/code>, <code>jq<\/code>, <code>python<\/code> itd. Nast\u0119pnie ten obraz mo\u017cna wdro\u017cy\u0107 w klastrze jak zwyk\u0142\u0105 aplikacj\u0119 i prawdopodobnie b\u0119dziecie chcieli zorganizowa\u0107 jak\u0105\u015b wersj\u0119 tagowania. Je\u015bli klastr\u00f3w jest niewiele, podej\u015bcie takie jak w przypadku aplikacji mo\u017ce by\u0107 wystarczaj\u0105ce: nowa wersja, nowa edycja, przej\u015b\u0107 przez wszystkie klastry i zmieni\u0107 obraz dla Pod\u00f3w. Jednak w przypadku wdro\u017cenia na znaczn\u0105 liczb\u0119 klastr\u00f3w, bardziej odpowiednia jest koncepcja samodzielnej aktualizacji z kana\u0142u. <\/p>\n<p>U nas wygl\u0105da to tak:<\/p>\n<ul>\n<li>Kana\u0142 to w zasadzie identyfikator, kt\u00f3ry mo\u017cna definiowa\u0107 dowolnie (np. dev\/stage\/ea\/stable).<\/li>\n<li>Nazwa kana\u0142u to tag obrazu. Kiedy trzeba wdro\u017cy\u0107 aktualizacje w kanale, tworzony jest nowy obraz i tagowany jest nazw\u0105 kana\u0142u.<\/li>\n<li>Kiedy w rejestrze pojawia si\u0119 nowy obraz, Addon-operator jest restartowany i uruchamiany z nowym obrazem.<\/li>\n<\/ul>\n<p>\nTo nie jest najlepsza praktyka, o czym pisano w <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/images\/#updating-images\">dokumentacji Kubernetes<\/a><\/noindex>. Tak nie powinno si\u0119 robi\u0107, ale m\u00f3wimy o <i>zwyk\u0142ej aplikacji, kt\u00f3ra \u017cyje w jednym klastrze<\/i>. W przypadku Addon-operatora aplikacja to wiele wdro\u017ce\u0144 rozproszonych po klastrach, a samodzielna aktualizacja bardzo pomaga i u\u0142atwia \u017cycie. <\/p>\n<p>Kana\u0142y pomagaj\u0105 tak\u017ce <b>w testowaniu<\/b>: je\u015bli istnieje pomocniczy klaster, mo\u017cna skonfigurowa\u0107 go na kana\u0142 <code>stage<\/code> i wdro\u017cy\u0107 w nim aktualizacje przed wprowadzeniem ich w kana\u0142ach <code>ea<\/code> i <code>stable<\/code>. Je\u015bli z klastrem na kanale <code>ea<\/code> pojawi\u0142 si\u0119 b\u0142\u0105d, mo\u017cna go prze\u0142\u0105czy\u0107 na <code>stable<\/code>, podczas gdy trwa dochodzenie w sprawie problemu z tym klastrem. Je\u015bli klaster zostanie wy\u0142\u0105czony z aktywnego wsparcia, prze\u0142\u0105cza si\u0119 na sw\u00f3j \u201ezamro\u017cony\u201d kana\u0142 \u2014 na przyk\u0142ad, <code>freeze-2019-03-20<\/code>.<\/p>\n<p>Opr\u00f3cz aktualizacji hook\u00f3w i Helm-chart\u00f3w, mo\u017ce by\u0107 konieczne <b>zaktualizowanie tak\u017ce komponentu zewn\u0119trznego<\/b>. Na przyk\u0142ad, zauwa\u017cyli\u015bcie b\u0142\u0105d w warunkowym node-exporter i wymy\u015blili\u015bcie, jak go poprawi\u0107. Nast\u0119pnie otworzyli\u015bcie PR i czekacie na now\u0105 wersj\u0119, aby przej\u015b\u0107 przez wszystkie klastry i zwi\u0119kszy\u0107 wersj\u0119 obrazu. Aby nie czeka\u0107 nieokre\u015blony czas, mo\u017cna zbudowa\u0107 w\u0142asny node-exporter i prze\u0142\u0105czy\u0107 si\u0119 na niego do czasu zaakceptowania PR.<\/p>\n<p>Og\u00f3lnie rzecz bior\u0105c, mo\u017cna to zrobi\u0107 r\u00f3wnie\u017c bez Addon-operator, ale z Addon-operator modu\u0142 do instalacji node-exporter b\u0119dzie widoczny w jednym repozytorium, a Dockerfile do budowy w\u0142asnego obrazu mo\u017cna trzyma\u0107 od razu tam, wszystkim uczestnikom procesu \u0142atwiej jest zrozumie\u0107, co si\u0119 dzieje... A je\u015bli jest kilka klastr\u00f3w, staje si\u0119 to prostsze zar\u00f3wno w testowaniu swojego PR, jak i w wdra\u017caniu nowej wersji!<\/p>\n<p>Ta organizacja aktualizacji komponent\u00f3w dzia\u0142a u nas pomy\u015blnie, ale mo\u017cna wdro\u017cy\u0107 dowolny inny odpowiedni schemat \u2014 w ko\u0144cu <b>w tym przypadku Addon-operator jest prostym plikiem binarnym<\/b>.<\/p>\n<h2>Podsumowanie<\/h2>\n<p>\nZasady wdra\u017cane w Addon-operatorze pozwalaj\u0105 na zbudowanie przejrzystego procesu tworzenia, testowania, instalacji i aktualizacji dodatk\u00f3w w klastrze, analogicznego do proces\u00f3w rozwoju zwyk\u0142ych aplikacji.<\/p>\n<p>Dodatki dla Addon-operatora w formacie modu\u0142\u00f3w (Helm-chart + hooki) mo\u017cna udost\u0119pnia\u0107 szeroko. My, firma Flant, planujemy w ci\u0105gu lata udost\u0119pni\u0107 nasze osi\u0105gni\u0119cia w formie takich dodatk\u00f3w. Do\u0142\u0105cz do rozwoju na GitHubie (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/shell-operator\">shell-operator<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\"><b>addon-operator<\/b><\/a><\/noindex>), spr\u00f3buj stworzy\u0107 sw\u00f3j dodatek na podstawie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\/tree\/master\/examples\">przyk\u0142ad\u00f3w<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\/blob\/master\/README.md\">dokumentacji<\/a><\/noindex>, czekaj na wiadomo\u015bci na Habra i na naszym <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/c\/%D0%A4%D0%BB%D0%B0%D0%BD%D1%82\">kanale YouTube<\/a><\/noindex>!<\/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\/449096\/\">Rozszerzamy i uzupe\u0142niamy Kubernetes (przegl\u0105d i wideo z prezentacji).<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447442\/\">Pisanie operatora dla Kubernetes w Golang<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u043b\u0435\u0434 \u0437\u0430 shell-operator \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0431\u0440\u0430\u0442\u0430 \u2014 addon-operator. \u042d\u0442\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0417\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f? \u041d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442, \u0447\u0442\u043e Kubernetes \u044d\u0442\u043e \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0432\u0441\u0451-\u0432-\u043e\u0434\u043d\u043e\u043c, \u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u00ab\u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0433\u043e\u00bb \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. Addon-operator \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35226","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\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\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator\" \/>\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\u0413\u043e\u0442\u043e\u0432\u0438\u0442\u044c Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e? \u0410\u043d\u043e\u043d\u0441\u0438\u0440\u0443\u0435\u043c addon-operator | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator\" \/>\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:03:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:03:05+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\udd47\u0141atwo i wygodnie przygotowa\u0107 klaster Kubernetes? Og\u0142aszamy addon-operator | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator","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\u0413\u043e\u0442\u043e\u0432\u0438\u0442\u044c Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e? \u0410\u043d\u043e\u043d\u0441\u0438\u0440\u0443\u0435\u043c addon-operator | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/gotovit-kubernetes-klaster-prosto-i-udobno-anonsiruem-addon-operator","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:03:05+00:00","article:modified_time":"2019-10-31T19:03:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35226","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-21 22:25:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:07:29","updated":"2026-01-21 22:25:22","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\/35226","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=35226"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/35226\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=35226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=35226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=35226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}