{"id":70831,"date":"2020-02-21T14:42:15","date_gmt":"2020-02-21T11:42:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obnovlenie-kubernetes-klastera-bez-prostoya"},"modified":"2020-03-03T16:14:45","modified_gmt":"2020-03-03T13:14:45","slug":"obnovlenie-kubernetes-klastera-bez-prostoya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","title":{"rendered":"Aktualizacja klastra Kubernetes bez przestoj\u00f3w","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Aktualizacja klastra Kubernetes bez przestoj\u00f3w\" src=\"\/wp-content\/uploads\/2020\/02\/53cdba726a58c16679c6443191f28321.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Proces aktualizacji dla twojego klastra Kubernetes<\/em><\/p>\n<p><\/p>\n<p>W pewnym momencie korzystania z klastra Kubernetes pojawia si\u0119 potrzeba aktualizacji dzia\u0142aj\u0105cych w\u0119z\u0142\u00f3w. Mo\u017ce to obejmowa\u0107 aktualizacje pakiet\u00f3w, aktualizacj\u0119 j\u0105dra lub wdra\u017canie nowych obraz\u00f3w maszyn wirtualnych. W terminologii Kubernetes nazywa si\u0119 to <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#voluntary-and-involuntary-disruptions\">\"Dobrowolna przerwa\"<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ten post jest cz\u0119\u015bci\u0105 cyklu sk\u0142adaj\u0105cego si\u0119 z 4 post\u00f3w:<\/p>\n<p><\/p>\n<ol>\n<li>Ten post.<\/li>\n<li>Prawid\u0142owe zako\u0144czenie pracy pod\u00f3w w klastrze Kubernetes<\/li>\n<li>Op\u00f3\u017anione zako\u0144czenie podu po jego usuni\u0119ciu<\/li>\n<li>Jak unikn\u0105\u0107 przestoj\u00f3w w dzia\u0142aniu klastra Kubernetes za pomoc\u0105 PodDisruptionBudgets<\/li>\n<\/ol>\n<p><\/p>\n<p><em>(przyp. red. t\u0142umaczenia pozosta\u0142ych artyku\u0142\u00f3w cyklu spodziewaj si\u0119 wkr\u00f3tce)<\/em><\/p>\n<p><\/p>\n<p>W tym artykule opiszemy wszystkie narz\u0119dzia, kt\u00f3re Kubernetes oferuje, aby uzyska\u0107 zerowy czas przestoju dla dzia\u0142aj\u0105cych w\u0119z\u0142\u00f3w w twoim klastrze.<\/p>\n<p><\/p>\n<h2 id=\"opredelenie-problemy\">Okre\u015blenie problemu<\/h2>\n<p><\/p>\n<p>Na pocz\u0105tku zastosujemy naiwn\u0105 metod\u0119, aby zidentyfikowa\u0107 problemy i oceni\u0107 potencjalne ryzyka tego podej\u015bcia, a tak\u017ce zbiera\u0107 wiedz\u0119 w celu rozwi\u0105zania ka\u017cdego z problem\u00f3w, kt\u00f3re napotkamy w trakcie ca\u0142ego cyklu. W rezultacie uzyskamy konfiguracj\u0119, w kt\u00f3rej wykorzystywane b\u0119d\u0105 lifecycle hooks, readiness probes i bud\u017cety zak\u0142\u00f3ce\u0144 pod\u00f3w w celu osi\u0105gni\u0119cia naszego zerowego czasu przestoju. <\/p>\n<p><\/p>\n<p>Aby rozpocz\u0105\u0107 nasz\u0105 podr\u00f3\u017c, we\u017amy konkretny przyk\u0142ad. Za\u0142\u00f3\u017cmy, \u017ce mamy klaster Kubernetes sk\u0142adaj\u0105cy si\u0119 z dw\u00f3ch w\u0119z\u0142\u00f3w, na kt\u00f3rym uruchomiona jest aplikacja z dwoma podami, kt\u00f3re znajduj\u0105 si\u0119 za <code>Service<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Aktualizacja klastra Kubernetes bez przestoj\u00f3w\" src=\"\/wp-content\/uploads\/2020\/02\/f1eb999a0a088d7ed5b54c71e9b9ed1e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Zaczniemy od dw\u00f3ch pod\u00f3w z Nginx i us\u0142ugi uruchomionych na naszych dw\u00f3ch w\u0119z\u0142ach klastra Kubernetes.<\/em><\/p>\n<p><\/p>\n<p>Chcemy zaktualizowa\u0107 wersj\u0119 j\u0105dra dw\u00f3ch roboczych w\u0119z\u0142\u00f3w w naszym klastrze. Jak to zrobimy? Prostym rozwi\u0105zaniem by\u0142oby uruchomienie nowych w\u0119z\u0142\u00f3w z zaktualizowan\u0105 konfiguracj\u0105, a nast\u0119pnie wy\u0142\u0105czenie starych w\u0119z\u0142\u00f3w, jednocze\u015bnie uruchamiaj\u0105c nowe. Chocia\u017c to zadzia\u0142a, pojawi si\u0119 kilka problem\u00f3w z takim podej\u015bciem:<\/p>\n<p><\/p>\n<ul>\n<li>Gdy wy\u0142\u0105czysz stare w\u0119z\u0142y, uruchomione na nich pody r\u00f3wnie\u017c zostan\u0105 wy\u0142\u0105czone. Co je\u015bli pody musz\u0105 by\u0107 oczyszczone przed prawid\u0142owym od\u0142\u0105czeniem? System wirtualizacji, kt\u00f3rego u\u017cywasz, mo\u017ce nie zaczeka\u0107 na zako\u0144czenie procesu czyszczenia.<\/li>\n<li>Co je\u015bli wy\u0142\u0105czysz wszystkie w\u0119z\u0142y jednocze\u015bnie? Do\u015bwiadczysz znacznych przestoj\u00f3w, dop\u00f3ki pody nie przenios\u0105 si\u0119 na nowe w\u0119z\u0142y.<\/li>\n<\/ul>\n<p><\/p>\n<p>Potrzebujemy sposobu na poprawn\u0105 migracj\u0119 pod\u00f3w ze starych w\u0119z\u0142\u00f3w i musimy mie\u0107 pewno\u015b\u0107, \u017ce \u017caden z naszych proces\u00f3w roboczych nie jest uruchomiony, gdy wprowadzamy zmiany dla w\u0119z\u0142a. Lub gdy dokonujemy ca\u0142kowitej wymiany klastra, jak w przyk\u0142adzie (to znaczy, wymieniamy obrazy VM), chcemy przenie\u015b\u0107 dzia\u0142aj\u0105ce aplikacje ze starych w\u0119z\u0142\u00f3w na nowe. W obu przypadkach chcemy zapobiec planowaniu nowych pod\u00f3w na starych w\u0119z\u0142ach, a nast\u0119pnie usun\u0105\u0107 wszystkie uruchomione pody. Aby osi\u0105gn\u0105\u0107 te cele, mo\u017cemy u\u017cy\u0107 polecenia <code>kubectl drain<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"pereraspredelenie-vseh-podov-s-nody\">Przenoszenie wszystkich pod\u00f3w z w\u0119z\u0142a<\/h2>\n<p><\/p>\n<p>Operacja drain pozwala przenie\u015b\u0107 wszystkie pody z w\u0119z\u0142a. W trakcie wykonywania drain w\u0119ze\u0142 jest oznaczany jako unschedulable (flaga <code>NoSchedule<\/code>). To zapobiega pojawianiu si\u0119 na nim nowych pod\u00f3w. Nast\u0119pnie drain zaczyna usuwa\u0107 pody z w\u0119z\u0142a, ko\u0144czy prac\u0119 kontener\u00f3w, kt\u00f3re obecnie s\u0105 uruchomione na w\u0119\u017ale, wysy\u0142aj\u0105c sygna\u0142 <code>TERM<\/code> do kontener\u00f3w w podzie.<\/p>\n<p><\/p>\n<p>Cho\u0107 <code>kubectl drain<\/code> Pomimo \u017ce operacja ta radzi sobie dobrze z usuwaniem pod\u00f3w, s\u0105 jeszcze dwa czynniki, kt\u00f3re mog\u0105 by\u0107 przyczyn\u0105 niepowodzenia operacji drain:<\/p>\n<p><\/p>\n<ul>\n<li>Twoja aplikacja musi potrafi\u0107 poprawnie ko\u0144czy\u0107 dzia\u0142anie po otrzymaniu <code>TERM<\/code> sygna\u0142u. Kiedy pody s\u0105 usuwane, Kubernetes wysy\u0142a sygna\u0142 <code>TERM<\/code> do kontener\u00f3w i czeka, a\u017c zatrzymaj\u0105 si\u0119 przez okre\u015blony czas, po czym, je\u015bli nie zatrzymaj\u0105 si\u0119, wymusza ich zako\u0144czenie. W ka\u017cdym przypadku, je\u015bli Tw\u00f3j kontener nie zareaguje poprawnie na sygna\u0142, nadal mo\u017cesz niepoprawnie wy\u0142\u0105czy\u0107 pody, je\u015bli w danym momencie dzia\u0142aj\u0105 (na przyk\u0142ad, je\u015bli trwa transakcja w bazie danych).<\/li>\n<li>Tracisz wszystkie pody, w kt\u00f3rych znajduje si\u0119 Twoja aplikacja. Mo\u017ce by\u0107 niedost\u0119pna w momencie uruchamiania nowych kontener\u00f3w na nowych w\u0119z\u0142ach lub, je\u015bli Twoje pody s\u0105 wdra\u017cane bez kontroler\u00f3w, mog\u0105 w og\u00f3le si\u0119 nie uruchomi\u0107. <\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"izbegaem-prostoya\">Unikamy przestoj\u00f3w<\/h2>\n<p><\/p>\n<p>Aby zminimalizowa\u0107 czas przestoju podczas dobrowolnych zak\u0142\u00f3ce\u0144, takich jak operacja drain dla w\u0119z\u0142a, Kubernetes oferuje nast\u0119puj\u0105ce opcje zarz\u0105dzania b\u0142\u0119dami:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/#termination-of-pods\">Graceful termination<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\">Lifecycle hooks<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/disruptions\/#how-disruption-budgets-work\">PodDisruptionBudgets<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>W innych cz\u0119\u015bciach cyklu b\u0119dziemy u\u017cywa\u0107 tych funkcji Kubernetes, aby z\u0142agodzi\u0107 skutki przenoszenia pod\u00f3w. Aby u\u0142atwi\u0107 \u015bledzenie g\u0142\u00f3wnej my\u015bli, b\u0119dziemy korzysta\u0107 z naszego powy\u017cszego przyk\u0142adu z nast\u0119puj\u0105c\u0105 konfiguracj\u0105 zasob\u00f3w:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n name: nginx-deployment\n labels:\n   app: nginx\nspec:\n replicas: 2\n selector:\n   matchLabels:\n     app: nginx\n template:\n   metadata:\n     labels:\n       app: nginx\n   spec:\n     containers:\n     - name: nginx\n       image: nginx:1.15\n       ports:\n       - containerPort: 80\n---\nkind: Service\napiVersion: v1\nmetadata:\n name: nginx-service\nspec:\n selector:\n   app: nginx\n ports:\n - protocol: TCP\n   targetPort: 80\n   port: 80<\/code><\/pre>\n<p><\/p>\n<p>Ta konfiguracja jest minimalnym przyk\u0142adem <code>Deployment<\/code>, kt\u00f3ry zarz\u0105dza podami nginx w klastrze. Ponadto konfiguracja opisuje zas\u00f3b <code>Service<\/code>, kt\u00f3ry mo\u017cna wykorzysta\u0107 do uzyskania dost\u0119pu do pod\u00f3w nginx w klastrze.<\/p>\n<p><\/p>\n<p>W trakcie ca\u0142ego cyklu b\u0119dziemy iteracyjnie rozwija\u0107 t\u0119 konfiguracj\u0119, aby ostatecznie zawiera\u0142a wszystkie mo\u017cliwo\u015bci oferowane przez Kubernetes w celu minimalizacji przestoj\u00f3w.<\/p>\n<p><\/p>\n<p><em>Aby uzyska\u0107 w pe\u0142ni wdro\u017con\u0105 i przetestowan\u0105 wersj\u0119 aktualizacji klastra Kubernetes o zerowym czasie przestoju na AWS i innych zasobach, odwied\u017a <noindex><a rel=\"nofollow\" href=\"https:\/\/gruntwork.io\/\">Gruntwork.io<\/a><\/noindex>.<\/em><\/p>\n<p><\/p>\n<h2 id=\"takzhe-chitayte-drugie-stati-v-nashem-bloge\">Przeczytaj r\u00f3wnie\u017c inne artyku\u0142y na naszym blogu:<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481932\/\">Zero Downtime Deployment i bazy danych<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/480072\/\">Kubernetes: dlaczego tak wa\u017cne jest skonfigurowanie zarz\u0105dzania zasobami systemu?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/481992\/\">Tekton Pipeline \u2014 pipelines natywne dla Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473578\/\">Budowanie dynamicznych modu\u0142\u00f3w dla Nginx<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/473014\/\">Wprowadzenie do autoryzacji Hashicorp Consul dla Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/468779\/\">Jakie by\u0142y skutki migracji z ClickHouse bez autoryzacji na ClickHouse z autoryzacj\u0105<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/489164\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u043e\u0434. \u041e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Kubernetes \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &quot;Voluntary Disruption&quot;. \u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0446\u0438\u043a\u043b\u0430 \u0438\u0437 4 \u043f\u043e\u0441\u0442\u043e\u0432: \u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442. \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b pod\u2019\u043e\u0432 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":70832,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-70831","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\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.\" \/>\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\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\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\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya\" \/>\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-02-21T11:42:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:45+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\udd47Aktualizacja klastra Kubernetes bez przestoju | ProHoster","description":"Proces aktualizacji dla twojego.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","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\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f | ProHoster","og:description":"\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obnovlenie-kubernetes-klastera-bez-prostoya","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-02-21T11:42:15+00:00","article:modified_time":"2020-03-03T13:14:45+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"70831","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 19:13:22","updated":"2022-09-29 13:06:50","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\/70831","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=70831"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/70831\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/70832"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=70831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=70831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=70831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}