Close

Porównanie platform Kubernetes i Docker

Kluczowe różnice między platformami Kubernetes i Docker oraz ich zastosowanie w konteneryzacji

Zdjęcie portretowe Josha Campbella
Josh Campbell

Menedżer produktu

OPRACOWANIE REDAKCYJNE: CHANDLER HARRIS

Docker to platforma konteneryzacji i środowisko uruchomieniowe, a Kubernetes to platforma do uruchamiania kontenerów z wielu środowisk uruchomieniowych i zarządzania nimi. Kubernetes obsługuje wiele środowisk uruchomieniowych kontenerów, w tym Dockera.

Kiedy Docker został wprowadzony w 2013 roku, zapoczątkował współczesną erę kontenerów i model obliczeniowy oparty na mikrousługach. Ponieważ kontenery nie są zależne od własnego systemu operacyjnego, ułatwiają tworzenie luźno powiązanych i skalowalnych mikrousług, pozwalając zespołom na deklaratywne spakowanie aplikacji, jej zależności i konfiguracji do postaci obrazu kontenera.

Jednak w miarę jak aplikacje stawały się coraz bardziej złożone i obejmowały kontenery rozmieszczone na wielu serwerach, pojawiły się wyzwania, np. jak koordynować i planować pracę wielu kontenerów, jak umożliwić komunikację między kontenerami, jak skalować instancje kontenerów i wiele innych. W odpowiedzi na te wyzwania powstała platforma Kubernetes.

Jeśli chodzi o technologię kontenerów, często spotykamy się z nazwami Docker i Kubernetes. Możesz zapytać: które z tych rozwiązań jest lepsze? Często jednak nie chodzi o to, które jest lepsze, ale o to, jak można wykorzystać oba na swoją korzyść.

Logo Compass.

Wypróbuj Compass bezpłatnie

Ulepsz środowisko programistyczne, skataloguj wszystkie usługi i popraw kondycję oprogramowania.

Czym jest Docker?


Docker to komercyjna platforma konteneryzacji i środowisko uruchomieniowe, które pomaga programistom kompilować, wdrażać i uruchamiać kontenery. Wykorzystuje architekturę klient-serwer z prostymi poleceniami i automatyzacją za pomocą pojedynczego interfejsu API.

Docker udostępnia również zestaw narzędzi, który jest powszechnie używany do pakowania aplikacji do postaci niezmiennych obrazów kontenerów poprzez zapisanie pliku Dockerfile, a następnie wykonania odpowiednich poleceń w celu skompilowania obrazu przy użyciu serwera Docker. Programiści mogą tworzyć kontenery bez platformy Docker, ale dzięki niej jest to łatwiejsze. Te obrazy kontenerów można następnie wdrażać i uruchamiać na dowolnej platformie obsługującej kontenery, takiej jak Kubernetes, Docker Swarm, Mesos czy HashiCorp Nomad.

Chociaż platforma Docker zapewnia wydajny sposób pakowania i dystrybuowania skonteneryzowanych aplikacji, uruchamianie kontenerów przy jej użyciu i zarządzanie nimi nie jest łatwe. Koordynacja i planowanie pracy kontenerów na wielu serwerach/klastrach, uaktualnianie lub wdrażanie aplikacji bez przestojów oraz monitorowanie kondycji kontenerów to tylko niektóre z czynników, które należy wziąć pod uwagę.

Aby zaradzić tym i innym problemom, pojawiły się rozwiązania do orkiestracji kontenerów w postaci Kubernetes, Docker Swarm, Mesos, HashiCorp Nomad itd. Umożliwiają one organizacjom zarządzanie dużą liczbą kontenerów i użytkowników oraz wydajne równoważenie obciążeń, a także zapewniają uwierzytelnianie i bezpieczeństwo, wdrażanie wieloplatformowe i wiele więcej.

ikona magazynu kodu
materiały pokrewne

Porównanie mikrousług z architekturą monolityczną

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Ulepsz swoje środowisko programistyczne dzięki narzędziu Compass

Czym jest Kubernetes?


Kubernetes (czasami nazywany K8s) to popularna platforma open source do orkiestracji systemów uruchomieniowych kontenerów w klastrze zasobów sieciowych. Kubernetes można używać z platformą Docker lub bez niej.

Kubernetes został pierwotnie opracowany przez firmę Google, która potrzebowała nowego sposobu uruchamiania miliardów kontenerów tygodniowo na duża skalę. Kubernetes został udostępniony jako oprogramowanie open source przez Google w 2014 r. i jest obecnie powszechnie uważany za wiodące na rynku i stanowiące standard branżowy narzędzie orkiestracji kontenerów i wdrażania aplikacji rozproszonych. Google zwraca uwagę, że „głównym celem Kubernetes jest ułatwienie wdrażania złożonych systemów rozproszonych i zarządzania nimi przy jednoczesnym korzystaniu z możliwości, jakie zapewniają kontenery”.

Kubernetes łączy zestaw kontenerów w grupę, którą można zarządzać na pojedynczym komputerze, aby zmniejszyć obciążenie sieci i zwiększyć efektywność wykorzystania zasobów. Przykładem zestawu kontenerów jest serwer aplikacji, pamięć podręczna Redis i baza danych SQL. Kontenery Docker zawierają jeden proces na kontener.

Kubernetes przydaje się szczególnie zespołom DevOps, ponieważ oferuje funkcje odnajdowania usług, równoważenia obciążenia w klastrze, zautomatyzowanego wprowadzania i wycofywania zmian, samonaprawiania kontenerów, które uległy awarii, oraz zarządzania konfiguracją. Ponadto Kubernetes jest kluczowym narzędziem do tworzenia niezawodnych pipeline'ów CI/CD w ramach DevOps.

Kubernetes nie jest jednak kompletną platformą jako usługą (PaaS) i podczas budowania klastrów Kubernetes i zarządzania nimi trzeba uwzględnić wiele kwestii. Złożoność zarządzania Kubernetes jest jednym z głównych powodów, dla których wielu klientów decyduje się na korzystanie z zarządzanych usług Kubernetes oferowanych przez dostawców rozwiązań chmurowych.

Zalety platformy Kubernetes


Kubernetes, często określany jako „Linux chmury”, nie bez powodu jest najpopularniejszą platformą orkiestracji kontenerów. Oto niektóre z nich:

Zautomatyzowane operacje

Kubernetes udostępnia zaawansowany interfejs API i narzędzie wiersza polecenia o nazwie kubectl, które przejmuje znaczną część pracy związanej z zarządzaniem kontenerami, umożliwiając automatyzację operacji. Wzorzec kontrolera w Kubernetes gwarantuje, że aplikacje/kontenery działają dokładnie tak, jak powinny.

Abstrakcja infrastruktury

Kubernetes zarządza w Twoim imieniu zasobami, które zostały mu udostępnione. Dzięki temu programiści mogą skupić się na pisaniu kodu aplikacji, a nie na podstawowej infrastrukturze obliczeniowej, sieciowej lub pamięci masowej.

Monitorowanie kondycji usług

Kubernetes monitoruje działające środowisko i porównuje je z pożądanym stanem. Przeprowadza automatyczne kontrole kondycji usług i ponownie uruchamia kontenery, które uległy awarii lub zostały zatrzymane. Kubernetes udostępnia usługi tylko wtedy, gdy są one uruchomione i gotowe.

Porównanie platform Kubernetes i Docker


Obraz porównania platform Kubernetes i Docker

O ile Docker to środowisko uruchomieniowe kontenerów, to Kubernetes jest platformą do uruchamiania kontenerów z wielu środowisk uruchomieniowych i zarządzania nimi. Kubernetes obsługuje wiele środowisk uruchamiania kontenerów, w tym Docker, containerd, CRI-O oraz dowolną implementację interfejsu Kubernetes CRI (Container Runtime Interface). Kubernetes można porównać do „systemu operacyjnego”, a kontenery Docker do „aplikacji”, które instaluje się w „systemie operacyjnym”.

Docker jest sam w sobie bardzo korzystny dla tworzenia nowoczesnych aplikacji. Rozwiązuje klasyczny problem pt. „u mnie działa”, ale nigdzie indziej już nie. Narzędzie do orkiestracji kontenerów Docker Swarm jest w stanie obsłużyć wdrożenie kilku kontenerów w ramach obciążenia produkcyjnego. Gdy system się rozrasta i trzeba dodać wiele kontenerów połączonych ze sobą w sieć, samodzielny Docker może napotkać pewne problemy, które Kubernetes pomaga rozwiązać.

Porównując te dwa rozwiązania, lepiej jest zestawić Kubernetes z Docker Swarm. Docker Swarm, czyli tryb swarm platformy Docker, jest narzędziem do orkiestracji kontenerów, takim jak Kubernetes, co oznacza, że umożliwia zarządzanie wieloma kontenerami rozmieszczonymi na wielu hostach z serwerem Docker. Tryb swarm jest domyślnie wyłączony i musi zostać skonfigurowany przez zespół DevOps.

Kubernetes umożliwia orkiestrację klastrów komputerów pod kątem współpracy i planuje uruchamianie kontenerów na tych komputerach w oparciu o dostępne zasoby. Kontenery są grupowane na podstawie deklaratywnej definicji w pody, które są podstawową jednostką Kubernetes. Kubernetes automatycznie zarządza takimi procesami, jak odnajdowanie usług, równoważenie obciążenia, alokacja zasobów, izolacja i skalowanie podów w pionie lub w poziomie. Został on zaadaptowany przez społeczność open source i obecnie jest częścią Cloud Native Computing Foundation. Amazon, Microsoft i Google oferują zarządzane usługi Kubernetes na swoich platformach przetwarzania w chmurze, co znacznie zmniejsza obciążenie operacyjne związane z uruchamianiem i utrzymywaniem klastrów Kubernetes i ich skonteneryzowanych obciążeń.

Docker czy Kubernetes: które rozwiązanie jest odpowiednie dla Ciebie?


Docker czy Kubernetes: które rozwiązanie jest odpowiednie dla Ciebie?

Jeśli zarówno Docker Swarm, jak i Kubernetes są platformami orkiestracji kontenerów, którą wybrać?

Docker Swarm wymaga zazwyczaj mniej ustawień i konfiguracji niż Kubernetes, jeśli budujesz i uruchamiasz własną infrastrukturę. Oferuje on te same korzyści co Kubernetes, takie jak wdrażanie aplikacji za pomocą deklaratywnych plików YAML, automatyczne skalowanie usług do pożądanego stanu, równoważenie obciążenia kontenerów w ramach klastra oraz bezpieczeństwo i kontrolę dostępu do usług. Jeśli obsługujesz niewiele obciążeń, nie przeszkadza Ci zarządzanie własną infrastrukturą lub nie potrzebujesz konkretnych funkcji oferowanych przez Kubernetes, to Docker Swarm może być świetnym wyborem.

Początkowa konfiguracja Kubernetes jest bardziej skomplikowana, ale oferuje on większą elastyczność i liczbę funkcji. Ma również szerokie wsparcie ze strony aktywnej społeczności open source. Kubernetes standardowo obsługuje wiele strategii wdrażania i zapewnia wgląd w kontenery, a także może zarządzać ruchem przychodzącym sieci. Wszyscy główni dostawcy rozwiązań chmurowych oferują zarządzane usługi Kubernetes, które znacznie ułatwiają rozpoczęcie pracy i korzystanie z natywnych funkcji chmury, takich jak automatyczne skalowanie. Jeśli obsługujesz wiele obciążeń i wymagasz współdziałania natywnego z chmurą oraz masz w swojej organizacji wiele zespołów, co oznacza potrzebę większej izolacji usług, to warto rozważyć platformę Kubernetes.

Compass i orkiestracja kontenerów


Niezależnie od tego, jakie rozwiązanie do orkiestracji kontenerów wybierzesz, ważne jest, aby używać narzędzia do zarządzania złożonością architektury rozproszonej w miarę skalowania. Atlassian Compass to rozszerzalna platforma środowiska programistycznego, która w centralnej lokalizacji z możliwością wyszukiwania łączy niepowiązane informacje o wynikach prac inżynierskich i współpracy zespołowej. Oprócz pomocy w uporaniu się ze wzrostem liczby mikrousług dzięki katalogowi komponentów rozwiązanie Compass ułatwia ustalenie najlepszych praktyk i pomiar kondycji oprogramowania przy użyciu kart wyników oraz zapewnia dane i analizy dotyczące całego zestawu narzędzi DevOps za pomocą rozszerzeń opartych na platformie Atlassian Forge.

Josh Campbell
Josh Campbell

Josh Campbell is a product manager for Atlassian and has worn many hats in his career. He enjoys working on things that make the job of an engineer easier and has deep customer empathy, especially when it comes to working with bad technology tools. In his spare time, Josh likes biking with his daughters, eating and drinking things that are bad for him, and playing with new technologies.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up