Ćwiczenie — Eksplorowanie funkcjonalności klastra Kubernetes
W przypadku lokalnego uruchamiania platformy Kubernetes dostępnych jest kilka opcji. Oprogramowanie Kubernetes można zainstalować na maszynach fizycznych lub maszynach wirtualnych albo można użyć rozwiązań chmurowych, takich jak usługa Azure Kubernetes Service (AKS).
Celem tego ćwiczenia jest zapoznanie się z instalacją rozwiązania Kubernetes z klastrem z jednym węzłem. W tym ćwiczeniu dowiesz się, jak skonfigurować i zainstalować środowisko microK8s , które jest łatwe do skonfigurowania i usuwania. Następnie wdrożysz usługę Kubernetes i przeprowadź skalowanie jej w poziomie do wielu wystąpień w celu hostowania witryny internetowej.
Uwaga
To ćwiczenie jest opcjonalne i zawiera kroki, które pokazują, jak usunąć i odinstalować oprogramowanie i zasoby, które będą używane w ćwiczeniu.
Należy pamiętać, że dostępne są inne opcje umożliwiające wykonanie tych samych zadań, takie jak narzędzie MiniKube i obsługa rozwiązania Kubernetes na platformie Docker.
Co to jest MicroK8s?
MicroK8s to opcja umożliwiająca wdrożenie jednowęzłowego klastra Kubernetes jako pojedynczego pakietu w celu obsługi stacji roboczych i urządzeń Internetu rzeczy (IoT). Canonical, twórca ubuntu Linux, pierwotnie opracowany i obecnie utrzymuje MicroK8s.
Narzędzie microk8s można zainstalować w systemach Linux, Windows i macOS. Instrukcje instalacji różnią się nieco w zależności od systemu operacyjnego. Wybierz opcję, która najlepiej pasuje do Twojego środowiska.
Instalowanie narzędzia MicroK8s w systemie Linux
Instalacja narzędzia MicroK8s w systemie Linux jest opcją o najmniejszej liczbie kroków. Przejdź do okna terminalu i uruchom polecenia z poniższych instrukcji:
Zainstaluj aplikację przystawki narzędzia MicroK8s. Wykonanie tego kroku może potrwać kilka minut w zależności od szybkości połączenia internetowego i komputera.
sudo snap install microk8s --classic
Po pomyślnej instalacji zostanie wyświetlony następujący komunikat.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teraz wszystko jest gotowe do instalacji dodatków w klastrze.
Instalowanie narzędzia MicroK8s w systemie Windows
Aby uruchomić narzędzie MicroK8s w systemie Windows, użyj rozwiązania Multipass. Rozwiązanie Multipass jest lekkim menedżerem maszyny wirtualnej dla systemów Linux, Windows i macOS.
Pobierz i zainstaluj najnowszą wersję rozwiązania Multipass dla systemu Windows z witryny GitHub.
W konsoli poleceń uruchom polecenie uruchamiania rozwiązania Multipass, aby skonfigurować i uruchomić obraz microk8s-vm. Wykonanie tego kroku może potrwać kilka minut w zależności od szybkości połączenia internetowego i komputera.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Po otrzymaniu potwierdzenia uruchomienia mikrok8s-vm uruchom
multipass shell microk8s-vm
polecenie , aby uzyskać dostęp do wystąpienia maszyny wirtualnej.multipass shell microk8s-vm
Gdy funkcja multipass działa, możesz uzyskać dostęp do maszyny wirtualnej z systemem Ubuntu w celu hostowania klastra i instalowania mikroK8s.
Zainstaluj aplikację przystawki narzędzia MicroK8s. Wykonanie tego kroku może potrwać kilka minut w zależności od szybkości połączenia internetowego i komputera.
sudo snap install microk8s --classic
Pomyślna instalacja pokazuje następujący komunikat:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teraz wszystko jest gotowe do instalacji dodatków w klastrze.
Instalowanie narzędzia MicroK8s w systemie macOS
Aby uruchomić narzędzie MicroK8s w systemie macOS, użyj rozwiązania Multipass. Rozwiązanie Multipass jest lekkim menedżerem maszyny wirtualnej dla systemów Linux, Windows i macOS.
Dostępne są dwie opcje instalacji rozwiązania Multipass w systemie macOS. Pobierz i zainstaluj najnowszą wersję rozwiązania Multipass dla systemu macOS z witryny GitHub lub użyj oprogramowania Homebrew, aby zainstalować rozwiązanie Multipass za pomocą polecenia
brew cask install multipass
.brew install --cask multipass
W konsoli poleceń uruchom polecenie uruchamiania rozwiązania Multipass, aby skonfigurować i uruchomić obraz microk8s-vm. Wykonanie tego kroku może potrwać kilka minut w zależności od szybkości połączenia internetowego i komputera.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Po otrzymaniu potwierdzenia uruchomienia mikrok8s-vm uruchom
multipass shell microk8s-vm
polecenie , aby wprowadzić wystąpienie maszyny wirtualnej.multipass shell microk8s-vm
Na tym etapie możesz uzyskać dostęp do maszyny wirtualnej z systemem Ubuntu w celu hostowania klastra. Nadal musisz zainstalować narzędzie MicroK8s. Wykonaj te czynności.
Zainstaluj aplikację przystawki narzędzia MicroK8s. Wykonanie tego kroku może potrwać kilka minut w zależności od szybkości połączenia internetowego i komputera.
sudo snap install microk8s --classic
Pomyślna instalacja pokazuje następujący komunikat:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teraz wszystko jest gotowe do instalacji dodatków w klastrze.
Przygotowywanie klastra
Aby wyświetlić stan zainstalowanych dodatków w klastrze, uruchom status
polecenie w narzędziu MicroK8s. Te dodatki dostarczają kilka usług, a niektóre z nich omówiliśmy wcześniej. Jednym z przykładów jest funkcja DNS.
Aby sprawdzić stan instalacji, uruchom polecenie
microk8s.status --wait-ready
.sudo microk8s.status --wait-ready
Zwróć uwagę, że w klastrze istnieje kilka wyłączonych dodatków. Jeśli nie znasz jakichś dodatków, nie martw się.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabled
Z listy należy włączyć dodatki DNS, Pulpit nawigacyjny i Rejestr. Oto cele każdego dodatku:
Dodatki Purpose DNS Wdraża usługę coreDNS
.Pulpit nawigacyjny Wdraża usługę kubernetes-dashboard
i kilka innych usług, które obsługują jej funkcje. Jest to internetowy interfejs użytkownika ogólnego przeznaczenia dla klastrów Kubernetes.Rejestr Wdraża rejestr prywatny i kilka usług, które obsługują jego funkcje. Do przechowywania kontenerów prywatnych użyj tego rejestru. Aby zainstalować dodatki, uruchom poniższe polecenie.
sudo microk8s.enable dns dashboard registry
Teraz możesz uzyskać dostęp do klastra za pomocą polecenia kubectl
.
Eksplorowanie klastra Kubernetes
Narzędzie MicroK8s udostępnia wersję interfejsu kubectl
, za pomocą której możesz korzystać z nowego klastra Kubernetes. Ta kopia interfejsu kubectl
umożliwia równoległą instalację innego interfejsu kubectl
dla całego systemu bez wpływu na jego funkcjonalność.
Uruchom polecenie
snap alias
, aby utworzyć alias poleceniamicrok8s.kubectl
w postacikubectl
. Ten krok pozwala uprościć użycie.sudo snap alias microk8s.kubectl kubectl
Po pomyślnym zakończeniu polecenia zostanie wyświetlone następujące dane wyjściowe:
Added: - microk8s.kubectl as kubectl
Wyświetlanie informacji o węźle klastra
Przypomnij sobie z wcześniejszych lekcji, że klaster Kubernetes składa się z płaszczyzny sterowania i węzłów roboczych. Zbadamy nowy klaster, aby zobaczyć, co zostało zainstalowane.
Sprawdź węzły, które zostały uruchomione w klastrze.
Jak wiesz, narzędzie MicroK8s jest instalacją klastra z jednym węzłem, dlatego spodziewasz się zobaczyć tylko jeden węzeł. Pamiętaj jednak, że ten węzeł jest zarówno płaszczyzną sterowania, jak i węzłem roboczym w tym klastrze. Potwierdź tę konfigurację, uruchamiając polecenie
kubectl get nodes
. Aby pobrać informacje o wszystkich zasobach w klastrze, uruchomkubectl get
polecenie:sudo kubectl get nodes
Wynik jest podobny do poniższego przykładu, który pokazuje, że w klastrze znajduje się tylko jeden węzeł o nazwie
microk8s-vm
. Zwróć uwagę, że węzeł jest w stanie Gotowe . Stan gotowości wskazuje, że płaszczyzna sterowania może planować obciążenia w tym węźle.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
Możesz uzyskać więcej informacji dotyczących określonego żądanego zasobu. Załóżmy na przykład, że musisz znaleźć adres IP węzła. Aby pobrać dodatkowe informacje z serwera interfejsu API, uruchom
-o wide
parametr:sudo kubectl get nodes -o wide
Wynik jest podobny do poniższego przykładu. Zauważ, że teraz można zobaczyć wewnętrzny adres IP węzła, system operacyjny uruchomiony w węźle, wersję jądra i środowisko uruchomieniowe kontenera.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5
Następnym krokiem jest zapoznanie się z usługami uruchomionymi na klastrze. Podobnie jak w przypadku węzłów, aby znaleźć informacje o usługach uruchomionych w klastrze, uruchom polecenie
kubectl get
.sudo kubectl get services -o wide
Wynik jest podobny do poniższego przykładu, ale zwróć uwagę, że na liście znajduje się tylko jedna usługa. Wcześniej zainstalowano dodatki w klastrze i można oczekiwać, że te usługi również będą widoczne.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Przyczyną pojedynczej listy usług jest to, że platforma Kubernetes używa koncepcji nazywanej przestrzeniami nazw do logicznego dzielenia klastra na wiele klastrów wirtualnych.
Aby pobrać wszystkie usługi we wszystkich przestrzeniach nazw, przekaż
--all-namespaces
parametr :sudo kubectl get services -o wide --all-namespaces
Wynik jest podobny do poniższego przykładu. Zwróć uwagę, że w klastrze znajdują się trzy przestrzenie nazw. Są to domyślne przestrzenie nazw,
container-registry
ikube-system
. Tutaj widać zainstalowane wystąpieniaregistry
,kube-dns
ikubernetes-dashboard
. Istnieją również usługi pomocnicze, które zostały zainstalowane wraz z niektórymi dodatkami.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafana
Teraz, gdy widzisz usługi uruchomione w klastrze, możesz zaplanować obciążenie w węźle roboczym.
Instalowanie serwera internetowego w klastrze
Chcesz zaplanować serwer internetowy w klastrze, aby obsługiwał witrynę internetową dla klientów. Do wyboru jest kilka opcji. W tym przykładzie użyjesz serwera NGINX.
Przypomnij sobie z wcześniejszych lekcji, że możesz użyć plików manifestu zasobników, które umożliwiają opisanie zasobników, zestawów replik i wdrożeń w celu zdefiniowania obciążeń. Ponieważ te pliki nie zostały szczegółowo omówione, należy uruchomić polecenie kubectl
, aby bezpośrednio przekazać informacje do serwera interfejsu API.
Mimo że narzędzie kubectl
jest przydatne, najlepszym rozwiązaniem jest użycie plików manifestu. Pliki manifestu umożliwiają łatwe uruchamianie i wycofywanie wdrożeń w klastrze. Te pliki ułatwiają również dokumentowanie konfiguracji klastra.
Aby utworzyć wdrożenie serwera NGINX, uruchom polecenie
kubectl create deployment
. Określ nazwę wdrożenia i obraz kontenera, aby utworzyć pojedyncze wystąpienie zasobnika.sudo kubectl create deployment nginx --image=nginx
Wynik jest podobny do następującego przykładu:
deployment.apps/nginx created
Aby pobrać informacje o wdrożeniu, uruchom polecenie
kubectl get deployments
:sudo kubectl get deployments
Wynik jest podobny do poniższego przykładu. Zwróć uwagę, że nazwa wdrożenia jest zgodna z nazwą podaną przez Ciebie oraz że jedno wdrożenie o tej nazwie jest w stanie gotowości i jest dostępne.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Wdrożenie utworzyło zasobnik. Aby pobrać informacje o zasobnikach klastra, uruchom
kubectl get pods
polecenie:sudo kubectl get pods
Wynik jest podobny do poniższego przykładu. Zwróć uwagę, że nazwa zasobnika jest wygenerowaną wartością poprzedzoną nazwą wdrożenia, a zasobnik ma stan Uruchomiono.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Testowanie instalacji witryny internetowej
Przetestuj instalację serwera NGINX, łącząc się z serwerem internetowym przy użyciu adresu IP zasobnika.
Aby znaleźć adres zasobnika, przekaż
-o wide
parametr :sudo kubectl get pods -o wide
Wynik jest podobny do poniższego przykładu. Zwróć uwagę, że polecenie zwraca zarówno adres IP węzła, jak i nazwę węzła, w którym zaplanowano obciążenie.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>
Aby uzyskać dostęp do witryny internetowej, uruchom polecenie
wget
na liście adresów IP przed:wget <POD_IP>
Wynik jest podobny do następującego przykładu:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
Skalowanie wdrożenia serwera internetowego w klastrze
Załóżmy, że nagle zwiększa się liczba użytkowników, którzy uzyskują dostęp do Twojej witryny internetowej, i witryna zaczyna ulegać awariom z powodu obciążenia. Możesz wdrożyć więcej wystąpień tej witryny w klastrze i podzielić obciążenie między wystąpieniami.
Aby przeskalować liczbę replik we wdrożeniu, uruchom polecenie kubectl scale
. Należy określić wymaganą liczbę replik oraz nazwę wdrożenia.
Aby skalować sumę zasobników NGINX do trzech, uruchom
kubectl scale
polecenie:sudo kubectl scale --replicas=3 deployments/nginx
Wynik jest podobny do następującego przykładu:
deployment.apps/nginx scaled
Polecenie skalowania umożliwia skalowanie liczby wystąpień w górę lub w dół.
Aby sprawdzić liczbę uruchomionych zasobników, uruchom
kubectl get
polecenie i ponownie przekaż-o wide
parametr :sudo kubectl get pods -o wide
Wynik jest podobny do poniższego przykładu. Zwróć uwagę, że teraz widać trzy uruchomione zasobniki, każdy z unikatowym adresem IP.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
Aby efektywnie uwidocznić witrynę internetową jako publiczną witrynę internetową, należy zastosować kilka innych konfiguracji do klastra. Przykładowe konfiguracje to zainstalowanie modułu równoważenia obciążenia i zamapowanie adresów IP węzłów. Ten typ konfiguracji stanowi część zaawansowaną, którą poznasz w przyszłości. W podsumowaniu znajdują się instrukcje, jeśli zdecydujesz się odinstalować i wyczyścić maszynę wirtualną.