Oefening: de functionaliteit van een Kubernetes-cluster verkennen

Voltooid

Er zijn verschillende opties beschikbaar wanneer u Kubernetes lokaal uitvoert. U kunt Kubernetes installeren op fysieke computers of VM's. U kunt ook een cloudoplossing gebruiken, zoals Azure Kubernetes Service (AKS).

Het doel van deze oefening is om een Kubernetes-installatie te verkennen met een cluster met één knooppunt. In deze oefening leert u hoe u een MicroK8s-omgeving configureert en installeert die u eenvoudig kunt instellen en afbreken. Vervolgens implementeert u een Kubernetes-service en schaalt u deze uit naar meerdere exemplaren om een website te hosten.

Notitie

Deze oefening is optioneel en bevat stappen die laten zien hoe u de software en resources verwijdert die u in de oefening gaat gebruiken.

Bedenk dat er andere opties zijn, zoals MiniKube en Kubernetes-ondersteuning in Docker, waarmee u hetzelfde kunt doen.

Wat is MicroK8s?

MicroK8s is een optie voor het implementeren van een Kubernetes-cluster met één knooppunt als één pakket met als bestemming werkstations en IoT-apparaten (Internet of Things). Canonical, de maker van Ubuntu Linux, oorspronkelijk ontwikkeld en onderhoudt momenteel MicroK8s.

U kunt MicroK8s installeren in Linux, Windows en macOS. De installatie-instructies verschillen echter enigszins voor elk besturingssysteem. Kies de optie die het beste past bij uw omgeving.

MicroK8s installeren in Linux

De Linux-installatie van MicroK8s is de installatie-optie met het minste aantal stappen. Ga naar een terminalvenster en voer de opdrachten in de volgende instructies uit:

  1. Installeer de MicroK8s-snap-app. Het kan enkele minuten duren voordat deze stap is voltooid, afhankelijk van de snelheid van uw internetverbinding en desktop.

    sudo snap install microk8s --classic
    

    Bij een geslaagde installatie wordt het volgende bericht weergegeven.

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

U kunt nu invoegtoepassingen in het cluster installeren.

MicroK8s installeren in Windows

Gebruik Multipass om MicroK8s uit te voeren in Windows. Multipass is een lichtgewicht VM-manager voor Linux, Windows en macOS.

  1. Download en installeer de nieuwste versie van Multipass voor Windows vanaf GitHub.

  2. Voer in een opdrachtconsole de opdracht voor het starten van Multipass uit om de installatiekopie van microk8s-vm te configureren en uit te voeren. Het kan enkele minuten duren voordat deze stap is voltooid, afhankelijk van de snelheid van uw internetverbinding en desktop.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Nadat u de startbevestiging voor microk8s-vm hebt ontvangen, voert u de multipass shell microk8s-vm opdracht uit om toegang te krijgen tot het VM-exemplaar.

    multipass shell microk8s-vm
    

    Zodra multipass werkt, hebt u toegang tot de Ubuntu-VM om uw cluster te hosten en MicroK8s te installeren.

  4. Installeer de MicroK8s-snap-app. Het kan enkele minuten duren voordat deze stap is voltooid, afhankelijk van de snelheid van uw internetverbinding en desktop.

    sudo snap install microk8s --classic
    

    Bij een geslaagde installatie wordt het volgende bericht weergegeven:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

U kunt nu invoegtoepassingen in het cluster installeren.

MicroK8s installeren in macOS

Gebruik Multipass om MicroK8s uit te voeren in macOS. Multipass is een lichtgewicht VM-manager voor Linux, Windows en macOS.

  1. U hebt twee mogelijkheden om Multipass te installeren op macOS. Download en installeer de meest recente versie van Multipass voor macOS vanuit GitHub, of gebruik Homebrew om Multipass te installeren met de opdracht brew cask install multipass.

    brew install --cask multipass
    
  2. Voer in een opdrachtconsole de opdracht voor het starten van Multipass uit om de installatiekopie van microk8s-vm te configureren en uit te voeren. Het kan enkele minuten duren voordat deze stap is voltooid, afhankelijk van de snelheid van uw internetverbinding en desktop.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Nadat u de startbevestiging voor microk8s-vm hebt ontvangen, voert u de multipass shell microk8s-vm opdracht uit om het VM-exemplaar in te voeren.

    multipass shell microk8s-vm
    

    Op dit moment hebt u toegang tot de Ubuntu-VM om uw cluster te hosten. U moet nog steeds MicroK8s installeren. Volg deze stappen.

  4. Installeer de MicroK8s-snap-app. Het kan enkele minuten duren voordat deze stap is voltooid, afhankelijk van de snelheid van uw internetverbinding en desktop.

    sudo snap install microk8s --classic
    

    Bij een geslaagde installatie wordt het volgende bericht weergegeven:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

U kunt nu invoegtoepassingen in het cluster installeren.

Het cluster voorbereiden

Voer de statusopdracht in MicroK8s uit om de status van de geïnstalleerde invoegtoepassingen in uw cluster weer te geven. Deze invoegtoepassingen bieden diverse services, waarvan een aantal eerder is besproken. Een voorbeeld hiervan is de DNS-functionaliteit.

  1. Als u de status van de installatie wilt controleren, voert u de opdracht microk8s.status --wait-ready uit.

    sudo microk8s.status --wait-ready
    

    U ziet dat er verschillende uitgeschakelde invoegtoepassingen in uw cluster zijn. Maakt u zich geen zorgen over de invoegtoepassingen die u niet herkent.

    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. In de lijst moet u de invoegtoepassingen DNS, Dashboard en Register inschakelen. Dit zijn de doelen van elke invoegtoepassing:

    Invoegtoepassingen Doel
    DNS Hiermee wordt de service coreDNS geïmplementeerd.
    Dashboard Hiermee worden de service kubernetes-dashboard en enkele andere services geïmplementeerd die ondersteuning bieden voor de functionaliteit. Het is een algemene webgebruikersinterface voor Kubernetes-clusters.
    Register Hiermee worden een privéregister en verschillende services geïmplementeerd die de functionaliteit ondersteunen. Gebruik dit register om persoonlijke containers op te slaan.

    Voer de volgende opdracht uit om de invoegtoepassingen te installeren.

    sudo microk8s.enable dns dashboard registry
    

U bent nu klaar om toegang te krijgen tot uw cluster met kubectl.

Het Kubernetes-cluster verkennen

MicroK8s biedt een versie van kubectl die u kunt gebruiken om te communiceren met uw nieuwe Kubernetes-cluster. Met dit exemplaar van kubectl kunt u over een parallelle installatie van een andere systeembrede kubectl-instantie beschikken zonder dat dit van invloed is op de functionaliteit.

  1. Voer de opdracht snap alias uit om van microk8s.kubectl een alias te maken naar kubectl. Met deze stap wordt het gebruik vereenvoudigd.

    sudo snap alias microk8s.kubectl kubectl
    

    De volgende uitvoer wordt weergegeven wanneer de opdracht is voltooid:

    Added:
      - microk8s.kubectl as kubectl
    

Clusterknooppuntinformatie weergeven

Zoals u weet, bestaat een Kubernetes-cluster uit besturingsvlakken en werkknooppunten. Laten we het nieuwe cluster verkennen om te zien wat er is geïnstalleerd.

  1. Controleer de knooppunten die in het cluster worden uitgevoerd.

    U weet dat MicroK8s een clusterinstallatie met één knooppunt is en u verwacht dus slechts één knooppunt te zien. Bedenk echter wel dat dit knooppunt zowel het besturingsvlak als een werkknooppunt in het cluster is. Bevestig deze configuratie door de opdracht kubectl get nodes uit te voeren. Voer de kubectl get opdracht uit om informatie over alle resources in uw cluster op te halen:

    sudo kubectl get nodes
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. Hier ziet u dat er slechts één knooppunt in het cluster is met de naam microk8s-vm. U ziet dat het knooppunt de status Gereed heeft. De status Gereed geeft aan dat het besturingsvlak workloads kan plannen op dit knooppunt.

    NAME          STATUS   ROLES    AGE   VERSION
    microk8s-vm   Ready    <none>   35m   v1.17.3
    

    U kunt meer informatie verkrijgen voor de specifieke resource die is aangevraagd. Laten we bijvoorbeeld aannemen dat u het IP-adres van het knooppunt moet vinden. Voer de -o wide parameter uit om extra informatie op te halen van de API-server:

    sudo kubectl get nodes -o wide
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet nu het interne IP-adres van het knooppunt, het besturingssysteem dat wordt uitgevoerd op het knooppunt, de kernel-versie en de container-runtime.

    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. De volgende stap is het verkennen van de services die worden uitgevoerd op uw cluster. Net als bij knooppunten voert u de opdracht kubectl get uit om informatie te vinden over de services die op het cluster worden uitgevoerd.

    sudo kubectl get services -o wide
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld, maar u ziet dat er slechts één service wordt vermeld. U hebt eerder invoegtoepassingen op het cluster geïnstalleerd en u verwacht ook deze services te zien.

    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   37m   <none>
    

    De reden voor de vermelding van één service is dat Kubernetes gebruikmaakt van een concept dat naamruimten wordt genoemd om een cluster logisch te verdelen in meerdere virtuele clusters.

    Als u alle services in alle naamruimten wilt ophalen, geeft u de --all-namespaces parameter door:

    sudo kubectl get services -o wide --all-namespaces
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet dat er drie naamruimten in uw cluster zijn. Dit zijn de standaardnaamruimte, en de naamruimten container-registry en kube-system. Hier ziet u de instanties registry, kube-dns en kubernetes-dashboard die u hebt geïnstalleerd. Er zijn ook ondersteunende services die naast enkele van de invoegtoepassingen zijn geïnstalleerd.

    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
    

    Nu u de services kunt zien die worden uitgevoerd in het cluster, kunt u een workload op het werkknooppunt plannen.

Een webserver installeren in een cluster

U wilt een webserver in het cluster plannen om uw klanten een website aan te bieden. U kunt verschillende opties kiezen. In dit voorbeeld gebruikt u NGINX.

Zoals u al weet, kunt u podmanifestbestanden gebruiken om uw pods, replicasets en implementaties te beschrijven om workloads te definiëren. Omdat u deze bestanden niet gedetailleerd hebt behandeld, voert u uit kubectl om de gegevens rechtstreeks door te geven aan de API-server.

Hoewel het gebruik van kubectl handig is, kunt u het beste manifestbestanden gebruiken. Met manifestbestanden kunt u eenvoudig implementaties in uw cluster vooruitrollen of terugdraaien. Met deze bestanden kunt u ook de configuratie van een cluster documenteren.

  1. Voer de opdracht kubectl create deployment uit om uw NGINX-implementatie te maken. Geef de naam van de implementatie en de containerinstallatiekopie op om één instantie van de pod te maken.

    sudo kubectl create deployment nginx --image=nginx
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld:

    deployment.apps/nginx created
    
  2. Voer het volgende uit kubectl get deploymentsom de informatie over uw implementatie op te halen:

    sudo kubectl get deployments
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet dat de naam van de implementatie overeenkomt met de naam die u hebt opgegeven en dat een implementatie met deze naam de status Gereed heeft en beschikbaar is.

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. De implementatie heeft een pod gemaakt. Voer de kubectl get pods opdracht uit om informatie over de pods van uw cluster op te halen:

    sudo kubectl get pods
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet dat de naam van de pod een gegenereerde waarde is die wordt voorafgegaan door de naam van de implementatie en dat de pod de status Actief heeft.

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-86c57db685-dj6lz   1/1     Running   0          33s
    

De website-installatie testen

Test de NGINX-installatie door verbinding te maken met de webserver via het IP-adres van de pod.

  1. Als u het adres van de pod wilt vinden, geeft u de -o wide parameter door:

    sudo kubectl get pods -o wide
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet dat de opdracht zowel het IP-adres van het knooppunt retourneert als de naam van het knooppunt waarop de workload is gepland.

    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. Als u toegang wilt krijgen tot de website, voert u het volgende uit wget op het IP-adres dat eerder wordt vermeld:

    wget <POD_IP>
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld:

    --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]
    

Een webserverimplementatie in een cluster schalen

Stel dat u plotseling een toename ziet van gebruikers die uw website bezoeken en dat de website steeds minder goed reageert vanwege de belasting. U kunt in uw cluster meer instanties van de site implementeren en de belasting over de instanties verdelen.

Voer de opdracht kubectl scale uit om het aantal replica's in uw implementatie te schalen. U geeft het aantal replica's op dat u nodig hebt en de naam van de implementatie.

  1. Als u het totaal van NGINX-pods wilt schalen naar drie, voert u de kubectl scale opdracht uit:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld:

    deployment.apps/nginx scaled
    

    Met de schaalopdracht kunt u het aantal instanties omhoog of omlaag schalen.

  2. Als u het aantal actieve pods wilt controleren, voert u de kubectl get opdracht uit en geeft u de -o wide parameter opnieuw door:

    sudo kubectl get pods -o wide
    

    Het resultaat is vergelijkbaar met het volgende voorbeeld. U ziet nu drie actieve pods, elk met een uniek IP-adres.

    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:~$
    

U moet nog enkele configuraties toepassen op het cluster om uw website effectief beschikbaar te maken als een openbare website. U kunt bijvoorbeeld een load balancer installeren en IP-adressen van knooppunten toewijzen. Dit type configuratie maakt deel uit van geavanceerde aspecten die u later gaat bestuderen. In het overzicht vindt u instructies als u ervoor kiest om uw VIRTUELE machine te verwijderen en op te schonen.