Docker a Kubernetes

Docker a Kubernetes – różnice

Pamiętam swój początek, kiedy polecono mi zapoznać się z zagadnieniami związanymi z kontenerami. Wspomniano mi, abym uczył się Dockera, a następnie Kubernetes. Kiedy pierwszy raz do tego przysiadłem, nie miałem zielonego pojęcia, o co chodzi w tych kontenerach. Jeszcze zapoznając się ogólnie z tematyką, napotkałem na opisy jednej, jak i drugiej platformy, bardzo zbliżone do siebie. Jeżeli Docker i Kubernetes to teoretycznie to samo, po co się uczyć obydwu tych technologii? Takie pytanie sobie zadałem, pobieżnie zapoznając się z tematem. Obecnie wiem, po co uczyć się jednego oraz drugiego. Jak i również rozumiem kolejność, jaką kiedyś mi podano. W związku z tym postanowiłem napisać artykuł, w którym chcę wyjaśnić, czym jest jeden i drugi system. Dlatego bez dłuższego wstępu przejdźmy do dalszej części przygotowane materiału. Docker a Kubernetes – jakie są między nimi różnice?

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 

 

 

 

Docker a Kubernetes

W tym paragrafie chcę wytłumaczyć, czym jest jedna, a czym druga platforma. Zacznijmy od Dockera.

Docker jest platformą konteneryzacji umożliwiającą programistom umieszczanie napisanych aplikacji w kontenerach. Dzięki swojemu minimalistycznemu podejściu do zainstalowanego oprogramowania, kontenery zajmują bardzo mało miejsca, dlatego są przenośne. W związku z tym, że aplikacje uruchamiają się w systemie zawartym w kontenerze, ich działanie jest identyczne niezależnie od systemu hosta. Wspomaga to zarówno programistów, jak i administratorów systemowych przy wdrożeniu oraz uruchomieniu aplikacji.

Kubernetes jest również powiązany z kontenerami. Jednak w odróżnieniu od Dockera pełni funkcję platformy do orkiestracji kontenerów. Czyli bardziej jest ukierunkowany na zarządzanie kontenerami oraz wdrażaniu ich na szerszą skalę. Posiada funkcje, dzięki którym po odpowiedniej konfiguracji jako administrator nie musisz myśleć nad skalowaniem, naprawą, czy też prawidłowym ich funkcjonowaniem w razie awarii. W tych przypadkach Kubernetes wykonuje większość z tych zadań automatycznie. Można go porównać do Docker Swarm, jednak jego możliwości są znacznie większe.

Poznając dwie powyższe definicje, możemy podsumować, że Docker służy do przygotowania aplikacji natomiast Kubernetes do zarządzania nią. W związku z tym obie platformy różnią się od siebie, ale nawiązują ścisłą współpracę. Umiejętność posługiwania się zarówno Dockerem i Kubernetes może okazać się bardzo przydatne, szczególnie gdy możemy to wpisać w nasze CV.

Docker, a Kubernetes – ogólne różnice pomiędzy platformami

Teraz chciałbym skupić się na ogólnych różnicach pomiędzy jedną, a drugą platformą. O tym, co przeczytasz w tym paragrafie, jesteś w stanie odnaleźć w wielu innych miejscach. Jednak na łamach tego artykułu w dalszych jego częściach będę chciał w miarę szczegółowo opisać każde z tych wymienionych zagadnień.

Moglibyśmy się zagłębić w bardzo techniczne rzeczy związane zarówno z Dockerem, jak i Kubernetes. Jednak istnieje sześć ogólnych różnic pomiędzy nimi. Poniżej wymieniam je z krótkim ich opisem.

Rola

Tak jak już przeczytałeś w poprzednim paragrafie, Docker służy do budowania aplikacji w kontenerach. Natomiast Kubernetes zarządza nimi przy pomocy klastrów.

Schemat działania

Docker działa na zasadzie klient-serwer. Narzędziem odpowiedzialnym za zarządzanie kontenerami jest tak zwany demon. Natomiast Docker CLI, jest używany jako klient, czyli służy do komunikacji z demonem.

Kubernetes wykorzystuje technologię orkiestracji, czyli posiada architekturę typu master-worker. Mamy jednostkę kontrolującą, która zarządza węzłami czyli workerami. W bardziej ludzki sposób można to wytłumaczyć na zasadzie szczebli pracowniczych. Mamy Dyrektora (czyli do kubernetesa wysyłamy informacje co chcemy osiągnąć). Następnie Dyrektor przesyła, te informacje kierownikowi (master). Kierownik rozdziela wyznaczone mu zadania pomiędzy pracowników (workerów). Natomiast sam kierownik może, rozdzielać tylko zadania, jak i również może pełnić funkcję workera. Czyli dodatkowo będzie miał przydzielone zadania do wykonania tak jak jego pracownicy (wokerzy).

Wdrażanie

Standardowo Docker może wdrażać pojedyncze kontenery. Natomiast Kubernetes został stworzony do wdrażania dość skomplikowanych wielo-kontenerowych aplikacji umiejscowionych w kontenerach.

Skalowanie i bezpieczeństwo

Jedna, jak i druga platforma posiada obsługę skalowania oraz zapewnia bezpieczeństwo. Jednak Kubernetes oferuje więcej funkcji związanych zarówno z jednym, jak i drugim zagadnieniem.

Monitoring

Zarówno Docker, jak i Kubernetes mają narzędzia do monitorowania. Kubernetes posiada bardziej zaawansowane możliwości, jak na przykład graficzny dashboard do zarządzania monitoringiem.

Wdrażanie

Obie platformy mają funkcję wdrażania. Niemniej jednak choć sam etap wdrażania jest podobny, to jednak obsługa już jest zupełnie inna.

Docker służy do tworzenia obrazów oraz ich uruchamiania w postaci kontenerów. Wykonywane jest to przy pomocy pliku Dockerfile, w którym umieszczane są wszelkie instrukcje co do kreowanego obrazu. Następnie po stworzeniu takiego obrazu, można przesłać go na platformę, na przykład Docker Hub. Dzięki niej w łatwy sposób obraz może zostać wykorzystany, w każdym miejscu na świecie. Standardowo docker został stworzony do obsługi oraz uruchomienia pojedynczego kontenera. Natomiast posiada dodatkowe narzędzia takie jak Docker Compose czy też Docker Swarm, dzięki którym jest w stanie wdrożyć aplikacje wielo-kontenerowe.

Kubernetes jest platformą zarządzającą klastrami kontenerów. Natomiast to z czym miałem problem, na początku swojej nauki to zrozumienie czym jest taki klaster. Kubernetes posiada bardzo dobrą dokumentację. Pod adresem https://kubernetes.io/pl/docs/concepts/overview/components/ odnajdziesz szczegółowe informacje, z którymi warto się zapoznać. Natomiast wzorując się na podanej stronie, klaster jest to zestaw maszyn roboczych, nazywanych węzłami, na których uruchamiane są aplikacje w kontenerach. Każdy klaster musi posiadać przynajmniej jeden węzeł.

Teraz następuje pewien związek pomiędzy Kubernetesem, a Dockerem. Ponieważ aby wdrożyć aplikację musi powstać obraz. Aby powstał obraz, musimy skorzystać z Dockera, a dokładnie stworzyć Dockerfile, z którego powstanie taki. Kubernetes obsługuje platformę Docker Hub, dlatego wszystkie obrazy, które znajdują się w rejestrze, mogą być użyte przez niego. Różnica jednak następuje po wdrożeniu takich aplikacji. Kubernetes zapewnia już wspomniane samonaprawianie. Z innych wartych wspomnienia funkcji wymienić można automatyczne skalowanie czy też łatwe aktualizowanie wersji oprogramowania.

W związku z powyższymi punktami proces wdrażania zarówno w jednym, jak i drugim narzędziu jest identyczny. Jednak jak wspomniałem, Kubernetes korzysta z obrazów Dockera, dlatego występuje pomiędzy nimi pewna zależność. W przypadku wdrażania przy uruchomieniu pojedynczych nie złożonych aplikacji Docker sprawdzi się lepiej. Natomiast jeżeli chcemy wdrożyć duże, wielo-kontenerowe aplikacje powinniśmy użyć Kubernetesa.

Skalowanie

W tym miejscu występuje znaczna różnica pomiędzy platformami. Lepiej opracowane skalowanie ma Kubernetes, a dlaczego tak uważam, prezentuję poniżej.

W przypadku Dockera, aby skalować aplikację, musisz skorzystać z takich narzędzi jak Docker Compose lub Docker Swarm. Służą one do uruchamiania wielu kontenerów, jak i również wielu instancji kontenerów w klastrze. Jednak podstawową różnicą z tym związaną jest zarządzanie. Wykorzystując Dockera, wprowadzić musisz wszystko ręcznie. Na przykład musisz zwiększyć lub zmniejszyć liczbę kontenerów dla uruchomionej aplikacji.

W przypadku Kubernetes jest on typowym orkiestratorem kontenerów. Konfiguracja najczęściej polega jedynie na wpisaniu ilości replik danej aplikacji, jaka ma powstać. Pozostałe czynności wykonuje sam. Jest to o tyle istotne, że przy wprowadzaniu jakichkolwiek zmian na początku są tworzone pody z nową aplikacją. Dopiero po ich poprawnym uruchomieniu następuje podmiana starych na nowe. Po wykonaniu powyższych czynności stare pody są automatycznie usuwane. Ten mechanizm zapewnia ciągłość i niezawodność funkcjonowania aplikacji. Gdy zmiany wprowadzone spowodują, że nowy pod nie uruchomi się, nie będzie miało to wpływu na działającą aplikację. Użytkownik nie zauważy, że coś się działo, że chcieliśmy wprowadzić jakieś zmiany.

W tym przypadku Kubernetes znacznie się wyróżnia. Dzięki swojemu mechanizmowi automatyzacji zwalnia nas z wielu czynności, jakie musimy wykonać ręcznie, korzystając z Dockera. Gwarantuje to w pewnym sensie niezawodność w funkcjonowaniu aplikacji. Dlatego w złożonych aplikacjach do zarządzania wybierany jest właśnie on.

Monitorowanie

Zarówno Docker, jak i Kubernetes posiadają narzędzia umożliwiające monitorowanie aplikacji.

W przypadku Dockera narzędziami do tego służącymi są:

docker stats – służy do wyświetlania statystyk wykorzystania zasobów kontenerów. Więcej informacji https://docs.docker.com/engine/reference/commandline/stats/

docker events – pobiera zdarzenia w czasie rzeczywistym z serwera. Więcej informacji https://docs.docker.com/engine/reference/commandline/events/

docker logs – pobiera logi kontenera. Więcej informacji https://docs.docker.com/engine/reference/commandline/logs/

W przypadku Kubernetes narzędziami służącymi monitorowaniu są:

kubernetes dashboard – umożliwia w graficzny sposób przeglądanie w czasie rzeczywistym wskaźników wydajności podów oraz węzłów. Więcej informacji https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

kubectl events –  lista zdarzeń związanych z podami i węzłami

kubectl logs –  logi kontenera znajdującego się w podzie.

W tym przypadku w związku z tym, że Kubernetes posiada graficzny dashboard czyni go bardziej czytelnym pod względem monitorowania oraz przeglądania logów.

Bezpieczeństwo

Jedna z najważniejszych elementów, o jaki musi zadbać każda platforma. Zarówno Docker, jak i Kubernetes posiadają dość rozbudowane funkcje bezpieczeństwa, jednak w tym przypadku nie istnieje idealne rozwiązanie. Każdy z omawianych platform posiada swoje unikatowe funkcje, które postaram się wymienić poniżej.

Do najważniejszych funkcji bezpieczeństwa, jakie umożliwia docker, możemy zaliczyć:

Do najważniejszych funkcji bezpieczeństwa, jakie umożliwia kubernetes, możemy zaliczyć:

Pod względem bezpieczeństwa, jeżeli kontenery są dodatkowo opakowane przy pomocy Kubernetesa, to same w sobie wydają się bezpieczniejsze. Jednak bezpieczeństwo, jakie zapewnia nam Docker, w wielu przypadkach wystarczy.

Kiedy używać Dockera, a kiedy Kubernetes

Jeżeli wnikliwie zapoznałeś się z materiałem, to mogłeś dojść do wniosku, że w każdym przypadku powinniśmy używać Kubernetesa. Jednak czy tak naprawdę jest?

Kubernetes ma swoją pewną przewagę nad Dockerem. Jednak wymaga więcej umiejętności niż Docker. Docker w przypadkach mniejszych aplikacji sprawdzi się znacznie lepiej. Jest to spowodowane swoim minimalistycznym podejściem. Natomiast nieodzownie Kubernetes lepiej spełni się w aplikacjach bardziej złożonych. W związku z tym postanowiłem przygotować listę, w której wymieniam sytuacje, w których użyłbym jednej czy też drugiej platformy.

Docker

  • mikroserwisy;
  • małe i średnie aplikacje;
  • w przypadku sporych ograniczeń w zasoby sprzętowe;
  • w przypadku konieczności wykonywania szybkiego skalowania;

Ogólnie Docker powinien być pierwszym narzędziem, którego uczyć się musi, każdy, kto chce rozpocząć swoją przygodę z kontenerami. Jest on o wiele prostszy w zrozumieniu niż Kubernetes. Dlatego większość uczy się tej platformy jako pierwszej.

Kubernetes

  • duże projekty;
  • gdzie występować musi rozproszenie aplikacji;
  • wszędzie tam, gdzie wymagane są zaawansowane konfiguracje;

Choć punktów jest mniej niż w przypadku Dockera, to Kubernetes w dzisiejszych czasach odnajduje większe zastosowanie. Jednak wymaga o wiele więcej zasobów, niż docker dlatego nie zawsze warto korzystać z niego.

Podsumowanie

W całym tym artykule nie chodzi o wykazanie wyższości jednej platformy nad drugą. Tak naprawdę najlepiej jest nauczyć się zarówno Dockera, jak i Kubernetesa i wykorzystywać obie technologie jednocześnie. Zwróć jednak uwagę na pewną zależność, którą wykazałem w tekście. Obrazy, z których korzysta Kubernetes, powstają dzięki Dockerowi. Dlatego w pewnym sensie Kubernetes jest związany z Dockerem.

Chcesz wiedzieć więcej o Dockerze i Kubernetesie? Przeczytaj nasze wpisy na ten temat!

 

 

 

Sprawdź, czego nauczysz się dzięki kursowi Grafany!

Udostępniamy darmowo ponad godzinny materiał z kursu. Przekonaj się, że jest idealny dla Ciebie!

Chcesz wziąć udział w kursie? Kliknij w link i obejrzyj co Cię czeka: https://asdevops.pl/demo-grafana/

 
 
 

Lekcja demo kursu Grafany!

X