Ćwiczenie — Eksplorowanie funkcjonalności klastra Kubernetes

Ukończone

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:

  1. 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.

  1. Pobierz i zainstaluj najnowszą wersję rozwiązania Multipass dla systemu Windows z witryny GitHub.

  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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ść.

  1. Uruchom polecenie snap alias, aby utworzyć alias polecenia microk8s.kubectl w postaci kubectl. 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.

  1. 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, uruchom kubectl 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
    
  2. 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 i kube-system. Tutaj widać zainstalowane wystąpienia registry, kube-dns i kubernetes-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.

  1. 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
    
  2. 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
    
  3. 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.

  1. 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>
    
  2. 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.

  1. 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ół.

  2. 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ą.