{"id":82244,"date":"2020-05-20T13:42:45","date_gmt":"2020-05-20T11:42:45","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov"},"modified":"2020-05-20T13:42:45","modified_gmt":"2020-05-20T11:42:45","slug":"luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","title":{"rendered":"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/21d8807ed791f0b9ff81494cf1a373c9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPierwszym krokiem w rozmieszczaniu w Kubernetes jest umieszczenie aplikacji w kontenerze. W tej serii om\u00f3wimy, jak stworzy\u0107 obraz ma\u0142ego i bezpiecznego kontenera.<br \/>\nDzi\u0119ki Dockerowi, tworzenie obraz\u00f3w kontener\u00f3w nigdy nie by\u0142o tak proste. Wska\u017anik obraz podstawowy, dodaj swoje zmiany i stw\u00f3rz kontener.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/f144351cc82d46cf3f4a518c6e11faa3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nChocia\u017c ta technika \u015bwietnie nadaje si\u0119 na pocz\u0105tek, u\u017cywanie domy\u015blnych obraz\u00f3w podstawowych mo\u017ce prowadzi\u0107 do niebezpiecznej pracy z du\u017cymi obrazami, pe\u0142nymi luk w zabezpieczeniach.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ponadto, wi\u0119kszo\u015b\u0107 obraz\u00f3w w Dockerze korzysta jako obraz podstawowy z Debiana lub Ubuntu, co zapewnia doskona\u0142\u0105 kompatybilno\u015b\u0107 i \u0142atw\u0105 adaptacj\u0119 (plik Docker zajmuje zaledwie dwie linijki kodu), ale podstawowe obrazy potrafi\u0105 doda\u0107 setki megabajt\u00f3w dodatkowego obci\u0105\u017cenia do Twojego kontenera. Na przyk\u0142ad, prosty plik aplikacji node.js Go 'hello-world' zajmuje oko\u0142o 700 megabajt\u00f3w, podczas gdy rozmiar samej aplikacji to tylko kilka megabajt\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/8093421f0f0f61b9daedf8e9530bbd3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW ten spos\u00f3b ca\u0142e to dodatkowe obci\u0105\u017cenie to pusta strata miejsca cyfrowego i doskona\u0142e schronienie dla luk i b\u0142\u0119d\u00f3w w systemie zabezpiecze\u0144. Dlatego przyjrzyjmy si\u0119 dw\u00f3m sposobom na zmniejszenie rozmiaru obrazu kontenera. <\/p>\n<p>Pierwszy to u\u017cycie ma\u0142ych obraz\u00f3w podstawowych, a drugi to zastosowanie wzoru projektowego Builder Pattern. U\u017cycie mniejszych obraz\u00f3w podstawowych to prawdopodobnie najprostszy spos\u00f3b na zmniejszenie rozmiaru swojego kontenera. Prawdopodobnie Tw\u00f3j j\u0119zyk programowania lub stos, kt\u00f3rego u\u017cywasz, zapewnia oryginalny obraz aplikacji znacznie mniejszy ni\u017c obraz domy\u015blny. Przyjrzyjmy si\u0119 naszemu kontenerowi node.js. <\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/df3f744a565465b56adcec6a1c32e501.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDomy\u015blnie rozmiar podstawowego obrazu node:8 w Dockerze wynosi 670 MB, a rozmiar node:8-alpine to zaledwie 65 MB, czyli 10 razy mniej. Korzystaj\u0105c z mniejszego podstawowego obrazu Alpine, znacznie zmniejszysz rozmiar swojego kontenera. Alpine to ma\u0142a i lekka dystrybucja Linuxa, kt\u00f3ra cieszy si\u0119 du\u017c\u0105 popularno\u015bci\u0105 w\u015br\u00f3d u\u017cytkownik\u00f3w Dockera, poniewa\u017c jest kompatybilna z wieloma aplikacjami, zachowuj\u0105c przy tym niewielki rozmiar kontener\u00f3w. W przeciwie\u0144stwie do standardowego obrazu Docker \u201enode\u201d, \u201enode:alpine\u201d usuwa wiele plik\u00f3w pomocniczych i program\u00f3w, pozostawiaj\u0105c tylko te, kt\u00f3re s\u0105 wystarczaj\u0105ce do uruchomienia twojej aplikacji.<\/p>\n<p>Aby przej\u015b\u0107 do mniejszego podstawowego obrazu, po prostu zaktualizuj plik Docker, aby rozpocz\u0105\u0107 prac\u0119 z nowym obrazem podstawowym:<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/55a3b8e403bd34896018f92a81a3f251.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeraz, w przeciwie\u0144stwie do starego obrazu onbuild, musisz skopiowa\u0107 sw\u00f3j kod do kontenera i zainstalowa\u0107 wszystkie zale\u017cno\u015bci. W nowym pliku Docker kontener zaczyna si\u0119 od obrazu node:alpine, nast\u0119pnie tworzy katalog dla kodu, instaluje zale\u017cno\u015bci za pomoc\u0105 mened\u017cera pakiet\u00f3w NPM i w ko\u0144cu uruchamia server.js.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/b41c36994fc18dc34fb970a38bc50c9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDzi\u0119ki tej aktualizacji otrzymujesz kontener o 10 razy mniejszym rozmiarze. Je\u015bli tw\u00f3j j\u0119zyk programowania lub stos nie ma funkcji zmniejszenia podstawowego obrazu, u\u017cyj Alpine Linux. Daje to r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 pe\u0142nej kontroli nad zawarto\u015bci\u0105 kontenera. U\u017cycie podstawowych obraz\u00f3w o ma\u0142ym rozmiarze to doskona\u0142y spos\u00f3b na szybkie tworzenie ma\u0142ych kontener\u00f3w. Jednak mo\u017cna osi\u0105gn\u0105\u0107 jeszcze wi\u0119ksze zmniejszenie, korzystaj\u0105c ze Wzoru Budowniczego.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/c9549f5879058d9734c174e8571b9069.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW j\u0119zykach interpretowanych kod \u017ar\u00f3d\u0142owy najpierw jest przekazywany do interpretera, a nast\u0119pnie bezpo\u015brednio wykonywany. W j\u0119zykach kompilowanych kod \u017ar\u00f3d\u0142owy jest wcze\u015bniej przetwarzany na kod skompilowany. W tym przypadku kompilacja cz\u0119sto wykorzystuje narz\u0119dzia, kt\u00f3re tak naprawd\u0119 nie s\u0105 potrzebne do uruchomienia kodu. Oznacza to, \u017ce mo\u017cesz ca\u0142kowicie usun\u0105\u0107 te narz\u0119dzia z finalnego kontenera. Do tego mo\u017cna wykorzysta\u0107 Wz\u00f3r Budowniczy.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/9af4d11134c54cbdbd2b020cdf270429.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKod jest tworzony w pierwszym kontenerze i kompilowany. Nast\u0119pnie skompilowany kod jest pakowany do finalnego kontenera bez kompilator\u00f3w i narz\u0119dzi potrzebnych do kompilacji tego kodu. Przejd\u017amy przez ten proces na przyk\u0142adzie aplikacji Go. Najpierw przejdziemy od obrazu onbuild do Alpine Linux.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/822b67eb28f94c50e7a40af1fe1bfea2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW nowym pliku Docker kontener zaczyna si\u0119 od obrazu golang:alpine. Nast\u0119pnie tworzy katalog dla kodu, kopiuje go do \u017ar\u00f3d\u0142a, kompiluje ten kod \u017ar\u00f3d\u0142owy i uruchamia aplikacj\u0119. Ten kontener jest znacznie mniejszy ni\u017c kontener onbuild, ale nadal zawiera kompilator i inne narz\u0119dzia Go, kt\u00f3re tak naprawd\u0119 nie s\u0105 nam potrzebne. Dlatego po prostu wydob\u0105d\u017amy skompilowany program i umie\u015b\u0107my go w w\u0142asnym kontenerze.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/094ac74a24cd723f83ddc34bee64e884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cesz zauwa\u017cy\u0107 co\u015b dziwnego w tym pliku Docker: zawiera on dwie linie FROM. Pierwsza cz\u0119\u015b\u0107 z 4 linii wygl\u0105da dok\u0142adnie tak samo jak poprzedni plik Docker, z wyj\u0105tkiem tego, \u017ce u\u017cywa s\u0142owa kluczowego AS, aby nada\u0107 nazw\u0119 temu etapowi. W nast\u0119pnej sekcji znajduje si\u0119 nowa linia FROM, kt\u00f3ra pozwala rozpocz\u0105\u0107 nowy obraz, przy czym zamiast obrazu golang:alpine jako bazowego obrazu u\u017cyjemy Raw alpine.<\/p>\n<p>Raw Alpine Linux nie ma \u017cadnych zainstalowanych certyfikat\u00f3w SSL, co spowoduje awari\u0119 wi\u0119kszo\u015bci wywo\u0142a\u0144 API przez protok\u00f3\u0142 HTTPS, dlatego zainstalujmy kilka podstawowych certyfikat\u00f3w CA.<\/p>\n<p>A teraz najciekawsze: aby skopiowa\u0107 skompilowany kod z pierwszego kontenera do drugiego, mo\u017cemy po prostu u\u017cy\u0107 komendy COPY, umieszczonej w 5. linii drugiej sekcji. Skopiuje ona tylko jeden plik aplikacji i nie naruszy narz\u0119dzi pomocniczych Go. Nowy wieloetapowy plik Docker b\u0119dzie mia\u0142 obraz kontenera o wielko\u015bci zaledwie 12 megabajt\u00f3w, podczas gdy pierwotny obraz kontenera mia\u0142 700 megabajt\u00f3w, co stanowi du\u017c\u0105 r\u00f3\u017cnic\u0119!<br \/>\nTak wi\u0119c, u\u017cywanie ma\u0142ych bazowych obraz\u00f3w i wzorca Builder to doskona\u0142e sposoby na tworzenie kontener\u00f3w o znacznie mniejszych rozmiarach bez du\u017cego nak\u0142adu pracy.<br \/>\nMo\u017cliwe, \u017ce w zale\u017cno\u015bci od stosu aplikacji istniej\u0105 dodatkowe sposoby na zmniejszenie rozmiaru obrazu i kontenera, ale czy naprawd\u0119 ma\u0142e kontenery maj\u0105 wymiern\u0105 przewag\u0119? Rozwa\u017cmy dwa aspekty, w kt\u00f3rych ma\u0142e kontenery s\u0105 niezwykle skuteczne \u2013 to wydajno\u015b\u0107 i bezpiecze\u0144stwo.<\/p>\n<p>Aby oceni\u0107 wzrost wydajno\u015bci, przyjrzyjmy si\u0119 czasowi trwania procesu tworzenia kontenera, umieszczania go w rejestrze (push) i nast\u0119pnego pobierania z niego (pull). Mo\u017cesz zauwa\u017cy\u0107, \u017ce kontener mniejszego rozmiaru ma niezaprzeczaln\u0105 przewag\u0119 w por\u00f3wnaniu do kontenera wi\u0119kszego.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/f48096cf875dbb34cb473f6296a2b601.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker b\u0119dzie buforowa\u0107 warstwy, wi\u0119c kolejne kompilacje b\u0119d\u0105 wykonywane bardzo szybko. Jednak w wielu systemach CI, kt\u00f3re s\u0105 u\u017cywane do kompilacji i testowania kontener\u00f3w, warstwy nie s\u0105 buforowane, wi\u0119c tutaj istnieje znaczna oszcz\u0119dno\u015b\u0107 czasu. Jak wida\u0107, czas budowy kontenera du\u017cego rozmiaru w zale\u017cno\u015bci od mocy twojego komputera wynosi od 34 do 54 sekund, a przy u\u017cyciu kontenera zmniejszonego za pomoc\u0105 wzorca Builder \u2013 od 23 do 28 sekund. Dla takich operacji wzrost wydajno\u015bci wynosi 40-50%. Dlatego po prostu pomy\u015bl, ile razy tworzysz i testujesz sw\u00f3j kod.<\/p>\n<p>Po tym, jak kontener zostanie zbudowany, musisz umie\u015bci\u0107 jego obraz (push container image) w rejestrze kontener\u00f3w, aby nast\u0119pnie u\u017cy\u0107 go w swoim klastrze Kubernetes. Zalecam u\u017cycie rejestru kontener\u00f3w Google.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/4c5426248c1e1ec6b0a36579db56c725.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKorzystaj\u0105c z Google Container Registry (GCR), p\u0142acisz tylko za \"surowe\" przechowywanie i sie\u0107, a dodatkowe op\u0142aty za zarz\u0105dzanie kontenerami nie s\u0105 pobierane. Jest to poufne, bezpieczne i bardzo szybkie. GCR wykorzystuje wiele trik\u00f3w, aby przyspieszy\u0107 operacj\u0119 pull. Jak wida\u0107, umieszczenie obrazu kontenera Docker Container Image przy u\u017cyciu go:onbuild w zale\u017cno\u015bci od wydajno\u015bci komputera zajmie od 15 do 48 sekund, a ta sama operacja z kontenerem mniejszego rozmiaru \u2013 od 14 do 16 sekund, przy czym dla mniej wydajnych maszyn przewaga w szybko\u015bci operacji wzrasta trzykrotnie. Dla du\u017cych maszyn czas jest mniej wi\u0119cej taki sam, poniewa\u017c GCR wykorzystuje globalny cache dla wsp\u00f3lnej bazy obraz\u00f3w, co oznacza, \u017ce nie musisz ich w og\u00f3le pobiera\u0107. W komputerach o ma\u0142ej mocy CPU jest w\u0105skim gard\u0142em, dlatego przewaga u\u017cywania ma\u0142ych kontener\u00f3w jest tutaj znacznie bardziej odczuwalna.<\/p>\n<p>Je\u015bli korzystasz z GCR, zdecydowanie zalecam zastosowanie Google Container Builder (GCB) jako cz\u0119\u015bci twojego systemu budowy.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/cf97f8636dff16d5663225547bfb0701.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak wida\u0107, jego zastosowanie pozwala osi\u0105gn\u0105\u0107 znacznie lepsze wyniki w skracaniu czasu operacji Build+Push ni\u017c nawet w przypadku wydajnej maszyny \u2013 w tym przypadku proces budowania i przesy\u0142ania kontener\u00f3w na hosta przyspiesza prawie dwukrotnie. Co wi\u0119cej, ka\u017cdego dnia otrzymujesz 120 minut budowy za darmo, co w wi\u0119kszo\u015bci przypadk\u00f3w zaspokaja potrzeby tworzenia kontener\u00f3w. <\/p>\n<p>Nast\u0119pnie przechodzimy do najwa\u017cniejszej metryki wydajno\u015bci \u2013 pr\u0119dko\u015bci pobierania kontener\u00f3w Pull. I je\u015bli nie zale\u017cy Ci specjalnie na czasie potrzebnym na operacj\u0119 push, to d\u0142ugo\u015b\u0107 procesu pull powa\u017cnie wp\u0142ywa na og\u00f3ln\u0105 wydajno\u015b\u0107 systemu. Za\u0142\u00f3\u017cmy, \u017ce masz klaster z trzema w\u0119z\u0142ami i jeden z nich ulega awarii. Je\u015bli korzystasz z systemu zarz\u0105dzania, na przyk\u0142ad Google Kubernetes Engine, automatycznie zast\u0105pi on uszkodzony w\u0119ze\u0142 nowym. Jednak ten nowy w\u0119ze\u0142 b\u0119dzie ca\u0142kowicie pusty, a Ty b\u0119dziesz musia\u0142 przenie\u015b\u0107 do niego wszystkie swoje kontenery, aby m\u00f3g\u0142 rozpocz\u0105\u0107 prac\u0119. Je\u015bli operacja pull b\u0119dzie wystarczaj\u0105co d\u0142uga, przez ca\u0142y ten czas Tw\u00f3j klaster b\u0119dzie pracowa\u0107 z mniejsz\u0105 wydajno\u015bci\u0105.<\/p>\n<p>Istnieje wiele przypadk\u00f3w, kiedy mo\u017ce si\u0119 to zdarzy\u0107: dodanie nowego w\u0119z\u0142a do klastra, aktualizacja w\u0119z\u0142\u00f3w czy nawet prze\u0142\u0105czenie na nowy kontener do wdro\u017cenia. W ten spos\u00f3b minimalizacja czasu pobierania pull staje si\u0119 kluczowym czynnikiem. Niezaprzeczalne jest to, \u017ce ma\u0142y kontener pobiera si\u0119 znacznie szybciej ni\u017c du\u017cy. Je\u015bli u\u017cywasz kilku kontener\u00f3w w klastrze Kubernetes, oszcz\u0119dno\u015b\u0107 czasu mo\u017ce by\u0107 bardzo znaczna.<\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/fb0dacb37e9732fe2954323ee171a723.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZobacz por\u00f3wnanie: operacja pull przy pracy z ma\u0142ymi kontenerami zajmuje od 4 do 9 razy mniej czasu w zale\u017cno\u015bci od mocy maszyny, ni\u017c ta sama operacja z wykorzystaniem go:onbuild. Korzystanie z og\u00f3lnych podstawowych obraz\u00f3w kontener\u00f3w ma\u0142ych rozmiar\u00f3w znacz\u0105co przyspiesza czas i pr\u0119dko\u015b\u0107, z jakimi nowe w\u0119z\u0142y Kubernetes mog\u0105 by\u0107 wdra\u017cane i \u0142\u0105czy\u0107 si\u0119 z internetem.<\/p>\n<p>Zastan\u00f3wmy si\u0119 nad kwesti\u0105 bezpiecze\u0144stwa. Uwa\u017ca si\u0119, \u017ce mniejsze kontenery s\u0105 znacznie bezpieczniejsze ni\u017c du\u017c\u0435, poniewa\u017c maj\u0105 mniejsz\u0105 powierzchni\u0119 ataku. Czy to prawda? Jedn\u0105 z najbardziej u\u017cytecznych funkcji Google Container Registry jest mo\u017cliwo\u015b\u0107 automatycznego skanowania twoich kontener\u00f3w pod k\u0105tem podatno\u015bci. Kilka miesi\u0119cy temu stworzy\u0142em zar\u00f3wno kontenery onbuild, jak i wieloetapowe, wi\u0119c przyjrzyjmy si\u0119, czy s\u0105 tam jakie\u015b s\u0142abe miejsca. <\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/0ed3cd7bb8c8f5164e1115e9f1be39d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWynik jest zdumiewaj\u0105cy: w ma\u0142ym kontenerze znaleziono tylko 3 \u015brednie podatno\u015bci, natomiast w du\u017cym \u2013 16 krytycznych i 376 innych podatno\u015bci. Przygl\u0105daj\u0105c si\u0119 zawarto\u015bci du\u017cego kontenera, wida\u0107, \u017ce wi\u0119kszo\u015b\u0107 problem\u00f3w bezpiecze\u0144stwa nie ma nic wsp\u00f3lnego z nasz\u0105 aplikacj\u0105, a dotyczy program\u00f3w, kt\u00f3rych nawet nie u\u017cywamy. Dlatego gdy ludzie m\u00f3wi\u0105 o du\u017cej powierzchni ataku, maj\u0105 na my\u015bli w\u0142a\u015bnie to. <\/p>\n<p><img decoding=\"async\" alt=\"Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w\" src=\"\/wp-content\/uploads\/2020\/05\/4a782f4a50153adc44042e9234357c02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWniosek jest oczywisty: tw\u00f3rz ma\u0142e kontenery, poniewa\u017c daj\u0105 one realne korzy\u015bci w zakresie wydajno\u015bci i bezpiecze\u0144stwa twojego systemu. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/502320\/\">Najlepsze praktyki Kubernetes. Organizacja Kubernetes z przestrzeni\u0105 nazw<\/a><\/noindex><\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"wGz_cbtCiEA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/wGz_cbtCiEA\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Troch\u0119 reklamy \ud83d\ude42<\/h3>\n<p>\nDzi\u0119kujemy, \u017ce jeste\u015b z nami. Podobaj\u0105 Ci si\u0119 nasze artyku\u0142y? Chcesz zobaczy\u0107 wi\u0119cej interesuj\u0105cych materia\u0142\u00f3w? Wspieraj nas sk\u0142adaj\u0105c zam\u00f3wienie lub polecaj\u0105c nas znajomym, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">chmurowe VPS dla programist\u00f3w od 4,99 $<\/a><\/noindex>, <b>unikatowy odpowiednik serwer\u00f3w entry-level, kt\u00f3ry zosta\u0142 stworzony przez nas dla Ciebie:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Ca\u0142a prawda o VPS (KVM) E5-2697 v3 (6 rdzeni) 10GB DDR4 480GB SSD 1Gbps od 19 $ lub jak prawid\u0142owo podzieli\u0107 serwer?<\/a><\/noindex> (dost\u0119pne opcje z RAID1 i RAID10, do 24 rdzeni i do 40GB DDR4).<\/p>\n<p><b>Dell R730xd dwa razy ta\u0144szy w centrum danych Equinix Tier IV w Amsterdamie?<\/b> Tylko u nas <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB od 199 dolar\u00f3w<\/a><\/noindex> w Holandii! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 dolar\u00f3w!<\/b><\/b> Czytaj o tym <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Jak zbudowa\u0107 infrastruktur\u0119 klasy korporacyjnej z zastosowaniem serwer\u00f3w Dell R730xd E5-2650 v4 kosztuj\u0105cych 9000 euro za grosze?<\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/502052\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 Kubernetes \u2013 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Docker, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82245,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82244","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=\"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\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov\" \/>\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\u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 Kubernetes. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov\" \/>\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-20T11:42:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-20T11:42: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\udd47Najlepsze praktyki Kubernetes. Tworzenie ma\u0142ych kontener\u00f3w | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","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\u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 Kubernetes. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","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-20T11:42:45+00:00","article:modified_time":"2020-05-20T11:42:45+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82244","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 15:41:28","updated":"2022-09-28 11:52:01","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\/82244","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=82244"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/82244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/82245"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=82244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=82244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=82244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}