Kubernetes to platforma typu open source do zarządzania aplikacjami kontenerowymi w klastrze maszyn fizycznych lub wirtualnych. Oryginalną inspiracją dla Kubernetes był system Borg Google. Borg to system zarządzania klastrami, który obsługuje setki tysięcy zadań i aplikacji w ogromnych centrach danych Google. Kubernetes miał być bardziej przyjazną wersją systemu zarządzania klastrami, z której każdy mógłby użyć.
Popularność kontenerów w procesie tworzenia oprogramowania jest popularna Kubernetes. W starym procesie tworzenia oprogramowania aplikacje zostały wdrożone na fizycznych maszynach hosta. Deweloperzy pracujący nad różnymi komponentami aplikacji potrzebnej do utrzymania spójnego środowiska. Działanie i personel IT potrzebny do starannego zarządzania wykonywaniem, konfiguracjami i bibliotekami. Różne elementy aplikacji mogą napotkać konflikt podczas procesu integracji. Ponadto proces był podatny na błędy ludzkie i nieporozumienia.
Maszyny wirtualne (VM) pomogły wprowadzić pewien poziom niezawodności procesu. Ale nadal trudno było zarządzać aplikacjami. Ponadto, maszyny wirtualne są drogie w utrzymaniu. Pojemniki zmieniły krajobraz. W przypadku kontenerów deweloperzy pracowali nad różnymi komponentami tego samego oprogramowania, aby utrzymać osobne środowiska. Pojemniki są lekkie, niedrogie i szybkie. Korzyści te spowodowały pomysł opracowania oprogramowania za pomocą mikrousług, w których każdy kontener służy konkretnemu zadaniu aplikacji.
Wraz ze wzrostem użycia kontenera Kubernetes stał się skutecznym narzędziem do planowania i uruchamiania aplikacji w klastrach. Jako platforma może uwolnić programiści od ciężaru radzenia sobie z wszelkiego rodzaju maszynami. Zamiast projektować infrastrukturę skoncentrowaną na hosta z rozważaniami fizycznymi lub wirtualnymi, programiści mogą rozpocząć projektowanie infrastruktury zorientowanej na kontener. Kubernetes zapewnia niezbędną warstwę abstrakcji.
Część 1: Pojęcia
Komponenty główne to usługi kontrolne dla klastra. Te komponenty obsługują globalne decyzje i wydarzenia. Każdy węzeł w klastrze może je uruchomić. Jednak przypisanie poszczególnych węzłów do tych komponentów jest uważane za dobrą praktykę.
Kube-apiserver
Kube-apiserver serwuje interfejs API Kubernetes. Kubernetes API implementuje interfejs RESTful. Działa jako pomost między różnymi komponentami Kubernetes, takimi jak kapsuły, usługi, kontrolery replikacji i inne. Odpowiada za spójność komunikacji między sklepem ETCD a wdrożonymi kontenerami.
itp
ETCD jest odpowiedzialny za przechowywanie wszystkich danych klastrów Kubernetes. Projekt ETCD został opracowany przez zespół CoreOS. Jest to lekki, rozproszony sklep z kluczami, który używa interfejsu API HTTP/JSON. Węzły w klastrze mogą wykorzystywać dane konfiguracyjne z ETCD w celu odkrycia usług i odzyskiwania z nieudanych stanów. Ze względu na znaczenie danych itp.
Kube-Controller-Manager
Kube-Controller-Manager prowadzi różne kontrolery w celu zapewnienia różnych usług. Na przykład kontrolery węzłów odzyskują nieudane węzły i kontrolery replikacji utrzymują prawidłową liczbę kapsułek. Każdy kontroler działa jako osobny wątek i zależy od informacji ETCD w celu wykonywania swoich zadań.
Cloud-Controller-Manager
Cloud-Controller-Manager zapewnia kontrolery specyficzne dla chmury. Można go wyłączyć w Kube-Controller-Manager. Cloud-Controller-Manager został oddzielony od rdzenia, aby umożliwić rdzeniu Kubernetes ewoluować niezależnie od kodu specyficznego dla dostawcy chmur. W przeszłości zależności powodowały problemy.
Kube-Scheduler
Kube-Scheduler jest odpowiedzialny za dystrybucję obciążenia. Śledzi wymagania dotyczące zasobów i przypisuje węzły dla nowo utworzonych PODS. Dba także o jakość wymagań serwisowych.
dodatki
Dodatki są kapsułami i usługami używanymi do wdrażania funkcji klastra. Użytkownicy mogą korzystać z menedżera dodatku do tworzenia i utrzymywania dodatków. Niektóre ważne i przydatne dodatki to DNS, interfejs internetowy (pulpit nawigacyjny), monitorowanie zasobów kontenerowych i rejestrowanie na poziomie klastrów.
Maszyna pracownicze w Kubernetes nazywa się węzłem. Komponenty węzłów są obecne w każdym węźle i obsługują różne aspekty obciążenia.
kubelet
Usługa Kubelet w każdym węźle jest głównym agentem. Śledzi POD przypisane do swojego węzła za pośrednictwem pliku konfiguracyjnego APISERVER lub lokalnego. Komunikuje się z komponentami głównymi, aby znaleźć wnioski o pracę i zgłosić status jego węzła.
Kube-proxy
Kube-proxy to niewielka usługa proxy w każdym węźle, aby poradzić sobie z indywidualnym podsiecią hosta. Może wykonywać podstawowe równoważenie obciążenia dla TCP i UDP.
doker
Kubernetes zależą przede wszystkim od Docker do uruchamiania kontenerów. Jest w stanie tworzyć aplikacje z obrazów Docker.
rkt
Kubernetes obsługuje również kontenery RKT. Wsparcie jest obecnie eksperymentalne.
Supervisord
Supervisord może być używany do monitorowania i kontrolowania kubletów i kontenerów Docker.
Fleentd
Fluentd to deamon do zapewnienia rejestrowania na poziomie Custer.
Obciążenia Kubernetes można zdefiniować w następujący sposób:
Strąki
POD to fundamentalna jednostka w obciążeniu Kubernetes. Kontenery nie są indywidualnie przypisywane do hostów. Grupy kontenerów, ogólnie należące do aplikacji, są reprezentowane jako kapsułki, a kapsuł. Oczywiście kapsułka może zawierać tylko jeden pojemnik. Jest to ogólnie bardziej powszechne w Kubernetes. Jednak kontenery są zgrupowane razem na podstawie potrzeb zasobów i aplikacji. Grupowanie ma na celu zoptymalizowanie udostępniania zasobów.
Kontrolery
Kontrolery, takie jak zestawy repliki, kontroler replikacji, wdrożenia, zestawy stanowe, pobór śmieci i zadania CRON pomagają zarządzać obciążeniami Kubernetes. Kontrolery replikacji zarządzają liczbą kapsułów. Zaczyna się i kończy kapsuły, aby utrzymać prawidłową liczbę działających kapsułek. Kontroler wdrażania pomaga zmienić zasady i obiekty wdrażania w celu osiągnięcia pożądanego stanu wdrażania.
Usługi
Kubernetes kapsuły są tworzone i niszczone regularnie. Dlatego trudno jest ich śledzić za pomocą adresów IP. Dynamiczna natura kapsułów utrudnia im komunikowanie się ze sobą. Usługa działa jako abstrakcja. Zapewnia zasady osiągnięcia logicznego zestawu kapsuł. W Kubernetes usługa jest obiektem odpoczynku. Usługi upraszczają projekt kontenera.
Etykiety
Etykiety to potężny sposób śledzenia i zarządzania grupami komponentów roboczych. Etykiety to pary wartości kluczowej, które działają jako dowolne znaczniki, które pomagają uzyskać drobniejszą kontrolę nad różnymi funkcjami systemu.
Część 2: Projekt praktyczny
MiniKube to binarna, która konfiguruje pojedynczy klaster Kubernetes na komputerze lokalnym. W tym projekcie węzeł.Aplikacja JS zostanie przekształcona w obraz kontenera Docker, a obraz zostanie uruchomiony na minikube.
Instalowanie MiniKube, Kubectl, Hypervisor, Nodejs i Docker
Możesz zainstalować narzędzie linii poleceń MiniKube i Kubernetes Kubectl na Mac OS X, Linux i Windows z różnymi hiperwizorami. Instrukcje dotyczące różnych systemów operacyjnych są dostępne tutaj. Będziesz także potrzebować nodejów zainstalowanych na swoim komputerze, aby uruchomić przykładową aplikację Helloworld. Możesz zainstalować Dockera tutaj.
Uruchamianie klastra
Użyj następującego polecenia, aby uruchomić klaster:
$ minikube rozpocznij lokalne kubernetes v1.7.5 klaster… początek maszyny wirtualnej… pobieranie Minikube ISO 106.36 MB / 106.36 MB [===========================================] 100.00% 0s Uzyskiwanie adresu IP VM… przenoszenie plików do klastra… Konfigurowanie certyfikatów… Podłączanie do klastra… Konfigurowanie Kubeconfig… Uruchamianie komponentów klastra… Kubectl jest teraz skonfigurowany do korzystania z klastra.
Użyj poniższego polecenia, aby sprawdzić, czy klaster działa poprawnie:
$ Kubectl Cluster-info Kubernetes Master działa na stronie https: // 192.168.99.100: 8443
Utwórz obraz aplikacji
Utwórzmy serwer.plik JS z następującą zawartością:
var http = wymaga („http”); |
var handlerequest = funkcja (żądanie, odpowiedź) |
konsola.Log („Otrzymane żądanie adresu URL:” + żądanie.URL); |
odpowiedź.Writehead (200); |
odpowiedź.koniec („Witaj świat!'); |
; |
var www = http.CreateServer (HandleRequest); |
www.Słuchaj (8080); |
Możesz uruchomić następujące polecenie:
$ Node Server.JS
I sprawdź, czy serwer działa na http: // localhost: 8080. Powinieneś zobaczyć „Witaj świat!„Tekst na stronie internetowej.
Konwertuj na kontener Docker
W tym samym katalogu co serwer.JS Utwórz plik Dockerfile z następującym tekstem:
Od węzła: 6.9.2 |
Expose 8080 |
Kopiuj serwer.JS . |
Serwer węzłów CMD.JS |
Dockerfile utworzy obraz, który rozpocznie się od węzła: 6.9.2 Zdjęcie na hubie dokera.
Chcemy uruchomić obrazy Docker lokalnie. Zatem następujące polecenie poinformuje Dockera, aby użył Minikube Deamon do przechowywania obrazu Docker:
$ eval $ (minikube Docker-env)
Możesz użyć eval $ (miniKube Docker -env -u), aby zmienić go z powrotem na domyślne.
Teraz zbudujmy obraz dokera:
$ Docker Build -t My -Node: v1 . Wysyłanie kontekstu kompilacji do Docker Daemon 3.072KB Krok 1: Od węzła: 6.9.2 6.9.2: Wyciąganie z biblioteki/węzła 75A822CD7888: Pull Complete 57DE64C72267: Pull Complete 4306Be1e8943: Pull Complete 871436AB7225: Pull Complete 0110C26A367a: Pull Complete 1F04Fe713f1b 0FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043 Status: Pobrano nowszy obraz dla węzła: 6.9.2 ---> faaadb4aaf9b Krok 2: Expose 8080 ---> Uruchomienie w DA7D251B3FD5 ---> 881F9FB69B2C Usuwanie pośredniego kontenera DA7D251B3FD5 Krok 3: Kopiuj serwer serwer.JS . ---> 0ACF61D9E75E Usuwanie pośredniego kontenera 3A4025539cf6 Krok 4: Serwer węzłów CMD.JS ---> Uruchamianie w 8AA9A4CBD723 ---> 41445E5C48FE Usuwanie pośredniego kontenera 8AA9A4CBD723 z powodzeniem zbudowanym 41445e5c48fe
Wdrażać w klastrze
Aby wdrożyć My-Node: v1, uruchom następujące polecenie:
$ kubectl Uruchom my-node --Mage = my-Node: v1 --port = 8080 Wdrożenie „My-Node” Utworzone
Utworzy kapsułkę na klastrze. Możemy sprawdzić statusy POD za pomocą następujących poleceń:
$ kubectl otrzymuj nazwę wdrożeń pożądana aktualna aktualna dostępna wiek My-Node 1 1 1 1 34s
$ kubectl zdobądź pods Nazwa Got Status Restarts Age My-Node-276881918-QTH5S 1/1 Uruchomienie 0 1m
$ kubectl zdarzenia lastseen w pierwszej lifu nazwa Nazwa Subobject Typ przyczyny źródła Komunikat 32M 32M 1 Węzeł minikube Normalny początek kube-proksym, minikube początkowe kube-proksoy. 32m 32m 1 węzeł minikube normalny kubelet, minikube początkowe kubelet. 32M 32M 2 Minikube Node Normal NodeHasslusterldiskDisk Kubelet, Minikube Node Minikube Status jest teraz: NodeHassUptingDisk Disk 32M 32M Node Normal NodehassUptilust Mememory Kubelet, Minikube Node Minikube to teraz: Nodehassflustermory 32M 32M 2 Minikube Nodehaselet NORDEHASUELTESSURESUSURESUSURE CUBUSURESURESUS Status minikube jest teraz: Nodehasnodiskressure 32M 32M 1 Minikube Node Normal NodealLoCatableen EFORMED KUBELE, MINIKUBE zaktualizowane ograniczenie Node AlloCATAble DOUS 32M 32M 1 MINIKUBE NODE NORMEDNODE Controller Minikube Minikube Minikube: zarejestrowany Node Minikube. Teraz: NodeReady 6m 6m 1 Minikube Node Normal Controller Minikube Controller Minikubeminikube początkowe kubelet. 5M 5M 1 Minikube węzeł Normalny NodealLoCatableen Kubelet, Minikube zaktualizowany limit węzłów dla podss 5m 5m 1 Minikube Node Normal Nodehasslusterdisk Kubelet, minikube węzeł Minikube Status: Nodehasilyfilydisk 5m 5 miniKube Node Node Nodelusfily Kubelet: itentMemory 5M 5M 1 Minikube Node Normal Nodehasnodisk SPRESSUEL, Minikube Węzło Minikube Status jest teraz: Nodehasnodiskressure 5m 5m 5 Minikube Węzeł Norma Normalna Kubelet NodenotReady Kubelet, Minikube Węzeł Minikube jest teraz Status: NodenotReady 5m 5m 1 MiniKube Nod. 5M 5M 1 Minikube Node Normalny Nodeready Kubelet, Minikube Node Minikube Status jest teraz: NodeReady 2M 2M 1 My-Node-276881918-QTH5S Normal Planowany Domyślny Scheduk. -276881918-QTH5S POD NORMAL SUKCESOMOUNTVOLUME KUBELE, MINIKUBE MOUNTVOLUME.Konfiguracja powiodła się dla woluminu „Default-Token-R5PL1” 2M 2M 1 My-Node-276881918-QTH5S POD.pojemniki My-Node normalnie ciągnięte kubelet, Minikube Container Image „My-Node: V1” już obecny na maszynie 2M 2M 1 My-Node-276881918-QTH5S POD.kontenery My-Node Normalny Kubelet, Minikube utworzony pojemnik 2M 2M 1 My-Node-276881918-QTH5S POD.kontenery my-node normy Kubelet, minikube uruchomiono pojemnik 2M 2M 1 My-Node-276881918 Replikaset Normalny powodzenie Create Controller Controller COME: My-Node-276881918-QTH5S 2M 2M 1 My-Node Dyployment Normal ScalingReplicaset-Contoller-Controller Scalled-Scalleler Scalled-Controller Up Replica Ustaw My-Node-276881918
Utwórz usługę
Kapsułka jest niedostępna. Musisz utworzyć usługę, aby strąk był dostępny dla świata. Poniższe polecenie powinno utworzyć niezbędną usługę:
$ kubectl Expose wdrożenie my-node-Type = LOADBALANCER SERVICE „MY-NODE” Exposed
Możesz sprawdzić status usługi w ten sposób:
$ kubectl Uzyskaj usługi Nazwa nazwy klaster-ip zewnętrzny porty ip) wiek Kubernetes 10.0.0.1443/TCP 34M My-Node 10.0.0.213 8080: 31460/TCP 31S
Jeśli użyjesz następującego polecenia, otworzy usługę w przeglądarce internetowej:
$ Minikube Service My-Node Otwarcie usługa Kubernetes Domyślna/My-Node w domyślnej przeglądarce…
Możesz sprawdzić, co dzieje się w swoim POD za pomocą polecenia „dzienniki” - dzienniki kubectl [nameofthePod].
$ Kubectl Logs My-Node-276881918-QTH5S OFFICE WNIOSEK ORL: / Otrzymane żądanie URL: / Favicon.i co
Powyższe dzienniki pokazują żądania złożone na serwerze.Aplikacja JS działająca w klastrze.
Sprzątanie
Możesz usunąć usługę i POD z następującymi poleceniami:
$ Kubectl Usuń usługę My-Node „My-Node” usunięto $ kubectl Usuń wdrożenie my-węzeł [/kod] wdrożenie „my-węzeł” usunięte
Możesz zatrzymać minikube:
$ Minikube Stop zatrzymanie lokalnego klastra Kubernetes… Maszyna zatrzymana.
Kubernetes to rozległy system z możliwościami na dużą skalę. Dokumentacja Kubernetes jest najlepszym miejscem do poznania tej potężnej technologii.
Dalsze badanie:
Kubernetes Dokumentacja: https: // kubernetes.IO/DOC