{"id":31217,"date":"2020-07-01T06:02:22","date_gmt":"2020-07-01T04:02:22","guid":{"rendered":"https:\/\/fotc.com\/kubernetes-docker-swarm\/"},"modified":"2023-06-26T14:16:13","modified_gmt":"2023-06-26T12:16:13","slug":"kubernetes-docker-swarm","status":"publish","type":"post","link":"https:\/\/fotc.com\/pl\/blog\/kubernetes-docker-swarm\/","title":{"rendered":"Kubernetes vs. Docker Swarm – por\u00f3wnanie platform do orkiestracji"},"content":{"rendered":"\n
W\u015br\u00f3d biznes\u00f3w, kt\u00f3rych g\u0142\u00f3wnym motorem dzia\u0142alno\u015bci jest aplikacja lub system informatyczny, ogromn\u0105 rol\u0119 odgrywaj\u0105 <\/span>skalowalno\u015b\u0107, stabilno\u015b\u0107 oraz pr\u0119dko\u015b\u0107 wdro\u017ce\u0144. Z tego powodu coraz wi\u0119cej firm zwraca si\u0119 w stron\u0119 konteneryzacji. Konteneryzacja polega na umieszczaniu element\u00f3w aplikacji (jej proces\u00f3w, zale\u017cno\u015bci, bibliotek, plik\u00f3w konfiguracyjnych czy lokalnych baz danych) w dynamicznie zarz\u0105dzanych kontenerach. <\/span><\/p>\n\n\n\n Konteneryzacja ma wiele zalet. Jedn\u0105 z nich jest przeno\u015bno\u015b\u0107, co oznacza, \u017ce <\/span>system napisany raz mo\u017ce by\u0107 uruchamiany w r\u00f3\u017cnych \u015brodowiskach. Dzi\u0119ki temu developerzy mog\u0105 po\u015bwi\u0119ca\u0107 czas na tworzenie nowych funkcjonalno\u015bci, zamiast na dopasowywanie systemu do wymaga\u0144 infrastruktury. Sam proces wdro\u017cenia jest te\u017c prostszy, szybszy i bezpieczniejszy.<\/p>\n\n\n\n W przypadku rozbudowanego systemu, na kt\u00f3ry sk\u0142adaj\u0105 si\u0119 tysi\u0105ce czy miliony kontener\u00f3w, konieczne jest zarz\u0105dzanie nimi za pomoc\u0105 platformy do orkiestracji. Orkiestracja pozwala wprowadzi\u0107 automatyzacj\u0119, grupowe zarz\u0105dzanie, zaawansowany monitoring proces\u00f3w, kontrol\u0119 zmian czy wykrywanie i automatyczne naprawianie awarii.<\/span><\/p>\n\n\n\n Jednymi z najpopularniejszych platform do orkiestracji s\u0105 Kubernetes oraz Docker Swarm<\/strong>. Przedstawiamy istotne r\u00f3\u017cnice mi\u0119dzy rozwi\u0105zaniami oraz ich wady i zalety. <\/span><\/p>\n\n\n\n Kubernetes, nazywany te\u017c K8s, to platforma open source s\u0142u\u017c\u0105ca do orkiestracji kontener\u00f3w. Wspiera automatyzacj\u0119 wdro\u017ce\u0144, skalowanie aplikacji, zarz\u0105dzanie kontenerami, monitoruje zmiany i procesy. Pozwala zarz\u0105dza\u0107 klastrami (grupami wsp\u00f3\u0142pracuj\u0105cych ze sob\u0105 maszyn) i node-ami (pojedynczymi maszynami w klastrze) na du\u017c\u0105 skal\u0119, przez co skraca proces dostosowywania aplikacji do wymaga\u0144 infrastruktury oraz upraszcza proces wdra\u017cania zmian i dodawania nowych element\u00f3w do systemu.<\/p>\n\n\n\n Platforma Kubernetes zosta\u0142a stworzona przez Google 20 lat temu w celu obs\u0142ugi obci\u0105\u017cenia produkcyjnego firmy i uruchamiania miliard\u00f3w kontener\u00f3w tygodniowo. W 2014 roku projekt zosta\u0142 przekazany organizacji Cloud Native Computing Foundation (CNCF; podlega pod Linux Foundation), a licencja oprogramowania zmieniona na Apache 2.0. Od tego czasu platforma jest wspierana przez CNCF oraz nieprzerwanie rozwijana, r\u00f3wnie\u017c przez spo\u0142eczno\u015b\u0107 korzystaj\u0105c\u0105 z rozwi\u0105zania.<\/p>\n\n\n\n Kubernetes jest udost\u0119pniany na Google Cloud Platform<\/a> jako Kubernetes as a Service (us\u0142uga Google Kubernetes Engine \u2013 GKE).<\/p>\n\n\n\n Wi\u0119cej o K8s dowiesz si\u0119 z artyku\u0142u \u201cKubernetes \u2013 co to jest i jak zacz\u0105\u0107?<\/a>\u201d.<\/p>\n\n\n\n Docker Swarm, podobnie jak Kubernetes, jest narz\u0119dziem do orkiestracji kontener\u00f3w w r\u00f3\u017cnych \u015brodowiskach infrastrukturalnych. To platforma open source, kt\u00f3rej kod \u017ar\u00f3d\u0142owy jest dost\u0119pny na licencji Apache 2.0. Swarm jest <\/span>dostarczany i wspierany przez firm\u0119 Mirantis (Mirantis przej\u0119\u0142o platform\u0119 od Dockera w 2020 roku).<\/p>\n\n\n\n Docker Swarm s\u0142u\u017cy do zarz\u0105dzania pojedynczymi elementami i ca\u0142ymi klastrami (grupami maszyn fizycznych lub wirtualnych) korzystaj\u0105c z Docker Engine. U\u0142atwia tym samym proces zarz\u0105dzania aplikacj\u0105, przyspiesza nowe wdro\u017cenia, zdejmuje z developer\u00f3w wiele czynno\u015bci DevOps, takich jak dopasowywanie oprogramowania pod konkretne wymagania infrastruktury. Bezb\u0142\u0119dnie pracuje ze wszystkimi aplikacjami wykorzystuj\u0105cymi Dockera do konteneryzacji.<\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Aplikacja mo\u017ce zosta\u0107 wdro\u017cona i uruchomiona dzi\u0119ki wykorzystaniu kombinacji pod-\u00f3w, serwis\u00f3w (services) lub mikroserwis\u00f3w (microservices) oraz deploymentu (obiektu wdro\u017cenia, kt\u00f3ry zarz\u0105dza cyklem \u017cycia aplikacji).<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Aplikacje mog\u0105 by\u0107 wdra\u017cane jako serwisy (services) lub mikroserwisy (microservices) w klastrach. Pliki YAML pozwalaj\u0105 definiowa\u0107 wiele kontener\u00f3w. Aplikacje mo\u017cna instalowa\u0107 te\u017c przez Docker Compose.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Kubernetes wspiera wysok\u0105 dost\u0119pno\u015b\u0107 aplikacji. Deployment umo\u017cliwia rozmieszczanie pod-\u00f3w (grup powi\u0105zanych ze sob\u0105 kontener\u00f3w) po\u015br\u00f3d node-\u00f3w (maszyn w klastrze) w celu zapewnienia wysokiej dost\u0119pno\u015bci, nawet w przypadku wyst\u0105pienia awarii. Serwisy z funkcj\u0105 load balancing (technik\u0105 r\u00f3wnowa\u017cenia ruchu) wy\u0142apuj\u0105 pod-y, kt\u00f3re nie dzia\u0142aj\u0105 prawid\u0142owo i je usuwaj\u0105.<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Docker Swarm r\u00f3wnie\u017c dba o wysok\u0105 dost\u0119pno\u015b\u0107. Serwisy mo\u017cna replikowa\u0107 w node-ach, a g\u0142\u00f3wny node (swarm manager) odpowiada za ca\u0142y klaster i zarz\u0105dza roz\u0142o\u017ceniem zasob\u00f3w w\u015br\u00f3d jego element\u00f3w.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Kubernetes posiada wbudowany load balancing (technik\u0119 r\u00f3wnowa\u017cenia obci\u0105\u017cenia mi\u0119dzy maszynami), kt\u00f3ry wymaga r\u0119cznej konfiguracji i aktywacji. Pod-y s\u0105 zdefiniowane jako serwisy i mog\u0105 by\u0107 wykorzystane jako load-balancer w klastrze. Do load balancing-u jest wykorzystywany kontroler ingress \u2013 obiekt API zarz\u0105dzaj\u0105cy dost\u0119pem do klastra z zewn\u0105trz, np. przez protoko\u0142y HTTP i HTTPS.<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Swarm posiada komponent DNS, kt\u00f3ry zarz\u0105dza \u017c\u0105daniami wysy\u0142anymi do serwis\u00f3w. Serwisy mog\u0105 by\u0107 uruchamiane na portach okre\u015blonych przez u\u017cytkownika lub zosta\u0107 przypisane automatycznie.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Zarz\u0105dzanie aplikacjami za pomoc\u0105 Kubernetes deployment obejmuje spos\u00f3b aktualizacji aplikacji. G\u0142\u00f3wn\u0105 zalet\u0105 deployment jest mo\u017cliwo\u015b\u0107 uruchomienia i zatrzymania zestawu pod-\u00f3w w przewidywalny spos\u00f3b w ramach dost\u0119pnych strategii: <\/span>rolling-update<\/span><\/i> (podmiany istniej\u0105cych pod-\u00f3w) oraz <\/span>recreate<\/span><\/i> (usuni\u0119cia istniej\u0105cych pod-\u00f3w przed stworzeniem nowych). W przypadku <\/span>rolling update<\/span><\/i> przebieg oraz efekt wdro\u017cenia mo\u017cna modyfikowa\u0107 za pomoc\u0105 opcji <\/span>maxUnavailable<\/span><\/i> (pozwala nada\u0107 limit liczby niedost\u0119pnych pod-\u00f3w) oraz <\/span>maxSurge<\/span><\/i> (okre\u015bla limit liczby nowo powsta\u0142ych pod-\u00f3w).<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Domy\u015blnie harmonogram aktualizacji wykonuje jedno zadanie naraz. Docker Swarm pozwala skonfigurowa\u0107 liczb\u0119 prowadzonych jednocze\u015bnie aktualizacji oraz wskaza\u0107, jakie akcje ma podj\u0105\u0107 program aktualizuj\u0105cy w przypadku awarii (w innym przypadku program wstrzyma aktualizacj\u0119). Docker Swarm pozwala konfigurowa\u0107 odst\u0119py czasu pomi\u0119dzy zaplanowanymi aktualizacjami.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Posiada dwa rodzaje health check-\u00f3w: <\/span>liveness<\/span><\/i>, kt\u00f3ry sprawdza responsywno\u015b\u0107 aplikacji i <\/span>readiness<\/span><\/i>, sprawdzaj\u0105cy gotowo\u015b\u0107 aplikacji (aplikacja jest responsywna, ale np. aktualnie wykonuje proces, kt\u00f3ry wstrzymuje mo\u017cliwo\u015b\u0107 natychmiastowej odpowiedzi). K8s posiada \u201cwbudowany\u201d mechanizm rejestrowania log\u00f3w, kt\u00f3ry pozwala monitorowa\u0107 aktywno\u015b\u0107 w\u015br\u00f3d kontener\u00f3w sk\u0142adaj\u0105cych si\u0119 na dany pod.<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Opcja health check jest ograniczona do serwis\u00f3w. Je\u015bli kontener wspieraj\u0105cy us\u0142ug\u0119 nie uruchomi si\u0119, zostanie uruchomiony nowy kontener. U\u017cytkownik mo\u017ce ustawi\u0107 r\u0119cznie funkcjonalno\u015b\u0107 kontroli stanu za pomoc\u0105 instrukcji <\/span>HEALTHCHECK<\/span><\/i>.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Kubernetes posiada dwa API do przechowywania: PersistentVolume (PV) oraz PersistentVolumeClaim (PVC). PersistentVolume to element pami\u0119ci w klastrze (zainicjowany przez administratora lub dynamicznie za pomoc\u0105 klas pami\u0119ci). API przechwytuje szczeg\u00f3\u0142y implementacji pami\u0119ci masowej, takie jak NFS, iSCSI lub system pami\u0119ci masowej specyficzny dla dostawcy chmury, np. PersistentDisk w przypadku Google Cloud Platform. PersistentVolumeClaim obejmuje \u017c\u0105danie na przechowanie wys\u0142ane przez u\u017cytkownika. PVC jest podobne do pod-a; pod zu\u017cywa zas\u00f3b node-a, PVC zu\u017cywa zas\u00f3b PV. Mo\u017ce \u017c\u0105da\u0107 okre\u015blonych rozmiar\u00f3w i tryb\u00f3w dost\u0119pu (np. mog\u0105 by\u0107 instalowane raz do odczytu, raz do zapisu lub wielokrotnie do jednego z nich).<\/span><\/p>\n\n\n\n Modyfikowanie zasob\u00f3w pami\u0119ci u\u017cywanych przez daemon Dockera w node-ie mo\u017ce spowodowa\u0107 chwilowe usuni\u0119cie node-a z klastra.<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Docker Engine oraz platforma Docker Swarm wspomagaj\u0105 zamieszczanie wolumin\u00f3w w kontenerach. Woluminy zawieraj\u0105ce protoko\u0142y (np. NFS, iSCSI) mo\u017cna skonfigurowa\u0107 w node-y. Wtyczki uwzgl\u0119dniaj\u0105 r\u00f3\u017cne platformy, m.in. Azure, Google Cloud Platform, NetApp czy Dell EMC.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Platforma posiada p\u0142aski model sieci, umo\u017cliwiaj\u0105cy komunikacj\u0119 mi\u0119dzy wszystkimi pod-ami. Zasady sieci (network policies) wskazuj\u0105, w jaki spos\u00f3b pod-y wymieniaj\u0105 si\u0119 mi\u0119dzy sob\u0105 informacjami. Kubernetes wymaga dw\u00f3ch CIDR (Classless Inter-Domain Routing): jeden, z kt\u00f3rego pod-y otrzymuj\u0105 adresy IP i drugi dla serwis\u00f3w.<\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n W Docker Swarm jest mo\u017cliwe zarz\u0105dzanie komunikacj\u0105 sieciow\u0105 mi\u0119dzy wieloma hostami dzi\u0119ki tworzeniu sieci typu overlay. Mo\u017cna te\u017c tworzy\u0107 sieci typu bridge, kt\u00f3re umo\u017cliwiaj\u0105 komunikacj\u0119 wewn\u0105trz hosta. U\u017cytkownicy mog\u0105 szyfrowa\u0107 ruch danych (data traffic) w kontenerze podczas tworzenia sieci overlay.<\/span><\/p>\n\n\n\n Kubernetes:<\/b><\/p>\n\n\n\n Kubernetes w wersji 1.18 obs\u0142uguje klastry zawieraj\u0105ce do 5000 node-\u00f3w. Obs\u0142uguje te\u017c konfiguracje, na kt\u00f3re sk\u0142adaj\u0105 si\u0119 jednocze\u015bnie:<\/span><\/p>\n\n\n\n Kubernetes zapewnia skalowalno\u015b\u0107 w oparciu o dwa SLO (Service Level Objectives): <\/span><\/p>\n\n\n\n Docker Swarm:<\/b><\/p>\n\n\n\n Docker jest w stanie skalowa\u0107 si\u0119 do poziomu 30 000 kontener\u00f3w i 1000 node-\u00f3w obs\u0142ugiwanych przez jednego Swarm managera (g\u0142\u00f3wny node).<\/span><\/p>\n\n\n FOTC to wsparcie 24\/7, zni\u017cki na us\u0142ugi GCP<\/p><\/div>\r\n         Zalety Kubernetes:<\/b><\/p>\n\n\n\n Wady Kubernetes<\/b>:<\/span><\/p>\n\n\n\n Zalety Docker Swarm<\/b><\/p>\n\n\n\n Wady Docker Swarm<\/b><\/p>\n\n\n\n Wyb\u00f3r narz\u0119dzia zale\u017cy od charakteru organizacji oraz rozwijanego produktu. Je\u015bli g\u0142\u00f3wn\u0105 warto\u015bci\u0105 jest <\/span>pr\u0119dko\u015b\u0107 wdro\u017cenia<\/b> (zw\u0142aszcza, je\u015bli produkt nie jest bardzo rozbudowany i wymagaj\u0105cy), warto zwr\u00f3ci\u0107 si\u0119 w stron\u0119 <\/span>Docker Swarm<\/b>. Jego niekwestionowanymi zaletami s\u0105 prostota instalacji, szybko\u015b\u0107 uczenia si\u0119 oraz kompatybilno\u015b\u0107 ze \u015brodowiskiem Docker.<\/span><\/p>\n\n\n\n Je\u015bli jednak warto\u015bciami naczelnymi s\u0105 <\/span>stabilno\u015b\u0107<\/b> i <\/span>przewidywalno\u015b\u0107 rozwoju<\/b>, lepiej wybra\u0107 platform\u0119 <\/span>Kubernetes<\/b> \u2013 zw\u0142aszcza w przypadku rozbudowanego systemu sk\u0142adaj\u0105cego si\u0119 z tysi\u0119cy czy milion\u00f3w kontener\u00f3w. Czas potrzebny na zapoznanie si\u0119 z mo\u017cliwo\u015bciami platformy jest d\u0142u\u017cszy, ale zwr\u00f3ci si\u0119 w postaci dost\u0119pu do mn\u00f3stwa przydatnych funkcjonalno\u015bci i opcji dopasowania platformy do indywidualnych potrzeb biznesu.<\/span><\/p>\n\n\n\n Je\u015bli nie jeste\u015b pewny, jakie rozwi\u0105zanie b\u0119dzie najlepsze dla Twojego produktu, <\/span>skontaktuj si\u0119 z nami<\/b><\/a>. Nasz certyfikowany <\/span>Cloud Architect<\/span><\/a> wesprze Ci\u0119 w przeprowadzeniu analizy oraz doborze w\u0142a\u015bciwej technologii. Ponadto, je\u015bli zdecydujesz si\u0119 na rozwijanie razem z nami swojego systemu w oparciu o Google Cloud Platform \u2013 skalowaln\u0105 infrastruktur\u0119 w chmurze \u2013 otrzymasz pe\u0142ne wsparcie techniczne oraz mo\u017cliwo\u015b\u0107 rozliczenia si\u0119 za us\u0142ug\u0119 chmurow\u0105 w z\u0142ot\u00f3wkach.<\/span><\/p>\n\n\n\n Zobacz te\u017c:<\/p>\n\n\n\n W\u015br\u00f3d biznes\u00f3w, kt\u00f3rych g\u0142\u00f3wnym motorem dzia\u0142alno\u015bci jest aplikacja lub system informatyczny, ogromn\u0105 rol\u0119 odgrywaj\u0105 skalowalno\u015b\u0107, stabilno\u015b\u0107 oraz pr\u0119dko\u015b\u0107 wdro\u017ce\u0144. Z tego powodu coraz wi\u0119cej firm zwraca si\u0119 w stron\u0119 konteneryzacji. Konteneryzacja polega na umieszczaniu element\u00f3w aplikacji (jej proces\u00f3w, zale\u017cno\u015bci, bibliotek, plik\u00f3w konfiguracyjnych czy lokalnych baz danych) w dynamicznie zarz\u0105dzanych kontenerach.  Konteneryzacja ma wiele zalet. Jedn\u0105…<\/p>\n","protected":false},"author":13,"featured_media":75154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":6,"_editorskit_typography_data":[],"_editorskit_blocks_typography":"","_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}"},"categories":[560,275],"tags":[126,195],"yoast_head":"\n <\/a><\/figure>\n\n\n\n
<\/a><\/figure>\n\n\n\nCo to jest Kubernetes?<\/strong><\/h2>\n\n\n\n
Co to jest Docker Swarm? <\/strong><\/h2>\n\n\n\n
Kubernetes vs. Docker Swarm – por\u00f3wnanie<\/strong><\/h2>\n\n\n\n
Definicja i instalacja aplikacji (application definition)<\/strong><\/h3>\n\n\n\n
Dost\u0119pno\u015b\u0107 (availability)<\/strong><\/h3>\n\n\n\n
R\u00f3wnowa\u017cenie obci\u0105\u017cenia (load balancing)<\/strong><\/h3>\n\n\n\n
Wdro\u017cenia (roll-outs)<\/strong><\/h3>\n\n\n\n
Kontrola prawid\u0142owego funkcjonowania (health check)<\/strong><\/h3>\n\n\n\n
Przechowywanie (storage)<\/strong><\/h3>\n\n\n\n
Sieci (networking)<\/strong><\/h3>\n\n\n\n
Wydajno\u015b\u0107 i skalowalno\u015b\u0107 (performance & scalability)<\/strong><\/h3>\n\n\n\n
 \r\n        <\/div>\r\n        <\/div>\r\n
\r\n        <\/div>\r\n        <\/div>\r\n        Kubernetes vs. Docker Swarm \u2013 wady i zalety platform<\/strong><\/h2>\n\n\n\n
Kt\u00f3ry system wybra\u0107 dla firmy?<\/strong><\/h2>\n\n\n\n
Pomo\u017cemy Ci wybra\u0107 rozwi\u0105zanie<\/strong><\/h2>\n\n\n\n