Övning – Utforska funktionerna i ett Kubernetes-kluster

Slutförd

Det finns flera alternativ när du kör Kubernetes lokalt. Du kan installera Kubernetes på fysiska datorer eller virtuella datorer eller använda en molnbaserad lösning som Azure Kubernetes Service (AKS).

Målet i den här övningen är att utforska en Kubernetes-installation med ett kluster med en nod. I den här övningen får du lära dig hur du konfigurerar och installerar en MicroK8s miljö som är enkel att konfigurera och ta ned. Sedan distribuerar du en Kubernetes-tjänst och skalar ut den till flera instanser som värd för en webbplats.

Obs.

Den här övningen är valfri och innehåller steg som visar hur du tar bort och avinstallerar den programvara och de resurser som du ska använda i övningen.

Tänk på att det finns andra alternativ, till exempel MiniKube- och Kubernetes-stöd i Docker, för att göra detsamma.

Vad är MicroK8s?

MicroK8s är ett alternativ för att distribuera ett Kubernetes-kluster med en nod som ett enda paket till målarbetsstationer och IoT-enheter (Internet of Things). Canonical, skaparen av Ubuntu Linux, utvecklade ursprungligen och underhåller för närvarande MicroK8s.

Du kan installera MicroK8s på Linux, Windows och macOS. Installationsinstruktionerna skiljer sig dock något åt för varje operativsystem. Välj det alternativ som passar din miljö bäst.

Installera MicroK8s på Linux

Linux-installationen av MicroK8s är det installationsalternativ som har det lägsta antalet steg. Växla till ett terminalfönster och kör kommandona i följande instruktioner:

  1. Installera Snap-appen MicroK8s. Det här steget kan ta några minuter att slutföra, beroende på hastigheten på internetanslutningen och skrivbordet.

    sudo snap install microk8s --classic
    

    En lyckad installation visar följande meddelande.

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

Nu är du redo att installera tillägg i klustret.

Installera MicroK8s i Windows

Om du vill köra MicroK8s i Windows använder du Multipass. Multipass är en lätt VM-hanterare för Linux, Windows och macOS.

  1. Ladda ned och installera den senaste versionen av Multipass för Windows från GitHub.

  2. I en kommandokonsol kör du kommandot Multipass launch för att konfigurera och köra avbildningen microk8s-vm. Det här steget kan ta några minuter att slutföra, beroende på hastigheten på internetanslutningen och skrivbordet.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. När du har fått startbekräftelsen för microk8s-vm kör du kommandot multipass shell microk8s-vm för att få åtkomst till den virtuella datorinstansen.

    multipass shell microk8s-vm
    

    När multipass fungerar kan du komma åt den virtuella Ubuntu-datorn som värd för klustret och installera MicroK8s.

  4. Installera Snap-appen MicroK8s. Det här steget kan ta några minuter att slutföra, beroende på hastigheten på internetanslutningen och skrivbordet.

    sudo snap install microk8s --classic
    

    En lyckad installation visar följande meddelande:

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

Nu är du redo att installera tillägg i klustret.

Installera MicroK8s på macOS

Om du vill köra MicroK8s på macOS använder du Multipass. Multipass är en lätt VM-hanterare för Linux, Windows och macOS.

  1. Du har två alternativ för att installera Multipass på macOS. Ladda ned och installera den senaste versionen av Multipass för macOS från GitHub, eller för att installera Multipass med kommandot brew cask install multipass använder du Homebrew.

    brew install --cask multipass
    
  2. I en kommandokonsol kör du kommandot multipass launch för att konfigurera och köra avbildningen microk8s-vm. Det här steget kan ta några minuter att slutföra, beroende på hastigheten på internetanslutningen och skrivbordet.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. När du har fått startbekräftelsen för microk8s-vm kör du kommandot multipass shell microk8s-vm för att ange vm-instansen.

    multipass shell microk8s-vm
    

    Nu kan du komma åt den virtuella Ubuntu-datorn som värd för klustret. Du måste fortfarande installera MicroK8s. Följ dessa steg.

  4. Installera Snap-appen MicroK8s. Det här steget kan ta några minuter att slutföra, beroende på hastigheten på internetanslutningen och skrivbordet.

    sudo snap install microk8s --classic
    

    En lyckad installation visar följande meddelande:

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

Nu är du redo att installera tillägg i klustret.

Förbereda klustret

Om du vill visa status för de installerade tilläggen i klustret kör du kommandot status i MicroK8s. Dessa tillägg tillhandahåller flera tjänster, varav några du beskrev tidigare. Ett exempel är DNS-funktioner.

  1. Kontrollera installationens status genom att köra kommandot microk8s.status --wait-ready.

    sudo microk8s.status --wait-ready
    

    Observera att det finns flera inaktiverade tillägg i klustret. Oroa dig inte för de tillägg som du inte känner igen.

    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. Från listan måste du aktivera tilläggen DNS, Instrumentpanel och Register. Här är syftet med varje tillägg:

    Tillägg Avsikt
    DNS Distribuerar coreDNS-tjänsten.
    instrumentpanel Distribuerar kubernetes-dashboard-tjänsten och flera andra tjänster som stöder dess funktioner. Det är ett allmänt, webbaserat användargränssnitt för Kubernetes-kluster.
    Registry Distribuerar ett privat register och flera tjänster som stöder dess funktioner. Om du vill lagra privata containrar använder du det här registret.

    Kör följande kommando för att installera tilläggen.

    sudo microk8s.enable dns dashboard registry
    

Nu är du redo att komma åt klustret med kubectl.

Utforska Kubernetes-klustret

MicroK8s innehåller en version av kubectl som du kan använda för att interagera med ditt nya Kubernetes-kluster. Med den här kopian av kubectl kan du ha en parallell installation av en annan systemomfattande kubectl-instans utan att påverka dess funktioner.

  1. Kör kommandot snap alias för att skapa aliaset microk8s.kubectl till kubectl. Det här steget förenklar användningen.

    sudo snap alias microk8s.kubectl kubectl
    

    Följande utdata visas när kommandot har slutförts:

    Added:
      - microk8s.kubectl as kubectl
    

Visa information om klusternoder

Kom ihåg sedan tidigare att ett Kubernetes-kluster består av kontrollplan och arbetsnoder. Nu ska vi utforska det nya klustret för att se vad som är installerat.

  1. Kontrollera de noder som körs i ditt kluster.

    Du vet att MicroK8s är en klusterinstallation med en nod, så du förväntar dig att bara se en nod. Tänk dock på att den här noden är både kontrollplanet och en arbetsnod i klustret. Bekräfta den här konfigurationen genom att köra kommandot kubectl get nodes. Om du vill hämta information om alla resurser i klustret kör du kommandot kubectl get:

    sudo kubectl get nodes
    

    Resultatet liknar följande exempel, som visar att det bara finns en nod i klustret med namnet microk8s-vm. Observera att noden är i tillståndet Redo. Tillståndet redo anger att kontrollplanet kan schemalägga arbetsbelastningar på den här noden.

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

    Du kan få mer information om den specifika resurs som begärs. Anta till exempel att du måste hitta nodens IP-adress. Om du vill hämta extra information från API-servern kör du parametern -o wide:

    sudo kubectl get nodes -o wide
    

    Resultatet liknar följande exempel. Observera att du nu kan se nodens interna IP-adress, operativsystemet som körs på noden, kernelversionen och containerkörningen.

    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. Nästa steg är att utforska de tjänster som körs i klustret. Precis som med noder kör du kommandot kubectl get för att hitta information om de tjänster som körs i klustret.

    sudo kubectl get services -o wide
    

    Resultatet liknar följande exempel, men observera att endast en tjänst visas. Du installerade tillägg i klustret tidigare och du förväntar dig även att se dessa tjänster.

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

    Orsaken till den enskilda tjänstlistan är att Kubernetes använder ett begrepp som kallas namnområden för att logiskt dela upp ett kluster i flera virtuella kluster.

    Om du vill hämta alla tjänster i alla namnområden skickar du parametern --all-namespaces:

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

    Resultatet liknar följande exempel. Observera att du har tre namnområden i klustret. De är standardnamnrymderna container-registryoch kube-system. Här kan du se de registry, kube-dnsoch kubernetes-dashboard instanser som du har installerat. Det finns också stödtjänster som har installerats tillsammans med några av tilläggen.

    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 när du kan se de tjänster som körs i klustret kan du schemalägga en arbetsbelastning på arbetsnoden.

Installera en webbserver i ett kluster

Du vill schemalägga en webbserver i klustret för att betjäna en webbplats till dina kunder. Du kan välja mellan flera alternativ. I det här exemplet använder du NGINX.

Kom ihåg att du kan använda poddmanifestfiler för att beskriva dina poddar, replikuppsättningar och distributioner för att definiera arbetsbelastningar. Eftersom du inte har gått igenom dessa filer i detalj kör du kubectl för att skicka informationen direkt till API-servern.

Även om användningen av kubectl är praktisk är det bästa praxis att använda manifestfiler. Med manifestfiler kan du enkelt rulla framåt eller återställa distributioner i klustret. De här filerna hjälper också till att dokumentera konfigurationen av ett kluster.

  1. Om du vill skapa NGINX-distributionen kör du kommandot kubectl create deployment. Ange namnet på distributionen och containerbilden för att skapa en enda instans av pod.

    sudo kubectl create deployment nginx --image=nginx
    

    Resultatet liknar följande exempel:

    deployment.apps/nginx created
    
  2. Om du vill hämta information om distributionen kör du kubectl get deployments:

    sudo kubectl get deployments
    

    Resultatet liknar följande exempel. Observera att namnet på distributionen matchar det namn du gav det och att en distribution med det här namnet är redo och tillgänglig.

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. Distributionen skapade en pod. Om du vill hämta information om klustrets poddar kör du kommandot kubectl get pods:

    sudo kubectl get pods
    

    Resultatet liknar följande exempel. Observera att namnet på podden är ett genererat värde med namnet på distributionen och att podden har statusen Running.

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

Testa webbplatsinstallationen

Testa NGINX-installationen genom att ansluta till webbservern via poddens IP-adress.

  1. Skicka parametern -o wide för att hitta poddens adress:

    sudo kubectl get pods -o wide
    

    Resultatet liknar följande exempel. Observera att kommandot returnerar både IP-adressen för noden och nodnamnet som arbetsbelastningen är schemalagd för.

    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. Om du vill komma åt webbplatsen kör du wget på ip-adressen som anges tidigare:

    wget <POD_IP>
    

    Resultatet liknar följande exempel:

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

Skala en webbserverdistribution i ett kluster

Anta att du plötsligt ser en ökning av användare som kommer åt din webbplats och att webbplatsen börjar misslyckas på grund av belastningen. Du kan distribuera fler instanser av platsen i klustret och dela upp belastningen mellan instanserna.

Om du vill skala antalet repliker i distributionen kör du kommandot kubectl scale. Du anger antalet repliker som du behöver och namnet på distributionen.

  1. Om du vill skala summan av NGINX-poddar till tre kör du kommandot kubectl scale:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    Resultatet liknar följande exempel:

    deployment.apps/nginx scaled
    

    Med skalningskommandot kan du skala upp eller ned antalet instanser.

  2. Kontrollera antalet poddar som körs genom att köra kommandot kubectl get och skicka parametern -o wide igen:

    sudo kubectl get pods -o wide
    

    Resultatet liknar följande exempel. Observera att du nu ser tre körande poddar, var och en med en unik IP-adress.

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

Du skulle behöva tillämpa flera konfigurationer på klustret för att effektivt exponera din webbplats som en offentlig webbplats. Exempel är att installera en lastbalanserare och mappa nod-IP-adresser. Den här typen av konfiguration är en del av avancerade aspekter som du kommer att utforska i framtiden. I sammanfattningen finns instruktioner om du väljer att avinstallera och rensa den virtuella datorn.