Övning – Utforska funktionerna i ett Kubernetes-kluster

Slutförd

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

Målet i den här övningen är dock att utforska en Kubernetes-installation av ett kluster med en enda 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 riva. Sedan distribuerar du en Kubernetes-tjänst och skalar ut den till flera instanser som värd för en webbplats.

Kommentar

Övningen är valfri och innehåller steg som visar hur du tar bort och avinstallerar den programvara och de resurser som du kommer att 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 samma sak.

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. Canonical, skaparen av Ubuntu Linux, utvecklades ursprungligen och underhåller för närvarande MicroK8s.

Du kan installera MicroK8s på Linux, Windows och macOS. Installationsanvisningarna 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 minst antal steg. Växla till ett terminalfönster och kör kommandona i följande instruktioner:

  1. Installera snap-appen för MicroK8s. Det här steget kan ta några minuter att slutföra beroende på Internet-anslutningens och den stationära datorns hastighet.

    sudo snap install microk8s --classic
    

    Vid en lyckad installation visas 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å Windows

Du använder Multipass för att köra MicroK8s på Windows. MultiPass är en lätt VM Manager för Linux, Windows och macOS.

  1. Hämta och installera den senaste versionen av MultiPass för Windows från GitHub.

  2. I en kommandokonsol kör du startkommandot för MultiPass för att konfigurera och köra avbildningen för den virtuella microk8s-datorn. Det här steget kan ta några minuter att slutföra beroende på Internet-anslutningens och den stationära datorns hastighet.

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

    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 för MicroK8s. Det här steget kan ta några minuter att slutföra beroende på Internet-anslutningens och den stationära datorns hastighet.

    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

Du använder Multipass för att köra MicroK8s på macOS. MultiPass är en lätt VM Manager för Linux, Windows och macOS.

  1. Det finns två alternativ för att installera MultiPass på macOS. Hämta och installera den senaste versionen av MultiPass för macOS från GitHub, eller använd Homebrew för att installera MultiPass med kommandot brew cask install multipass.

    brew install --cask multipass
    
  2. I en kommandokonsol kör du startkommandot för MultiPass för att konfigurera och köra avbildningen för den virtuella microk8s-datorn. Det här steget kan ta några minuter att slutföra beroende på Internet-anslutningens och den stationära datorns hastighet.

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

    multipass shell microk8s-vm
    

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

  4. Installera snap-appen för MicroK8s. Det här steget kan ta några minuter att slutföra beroende på Internet-anslutningens och den stationära datorns hastighet.

    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

Med statuskommandot i MicroK8s kan du visa statusen för de installerade tilläggen i klustret. De här tilläggen innehåller flera tjänster, och vissa av dem har du använt tidigare. Ett exempel är DNS-funktioner.

  1. Du kan kontrollera status för installationen genom att köra kommandot microk8s.status --wait-ready.

    sudo microk8s.status --wait-ready
    

    Observera att det finns flera inaktiverade tillägg i klustret. Bry dig inte om 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 Syfte
    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.
    Register Distribuerar ett privat register och flera tjänster som stöder dess funktioner. Använd det här registret för att lagra privata containrar.

    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 få en parallell installation av en annan systemomfattande kubectl-instans utan att påverka dess funktioner.

  1. Kör kommandot snap alias för att använda alias microk8s.kubectl för 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 klusternod

Kom ihåg att ett Kubernetes-kluster körs utanför 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 klustret.

    Du vet att MicroK8s är ett kluster för en enda nod, så du förväntar dig att bara se en nod. Tänk på att den här noden både är kontrollplan och arbetsnod i klustret. Bekräfta den här konfigurationen genom att köra kommandot kubectl get nodes. Kör kommandot för att hämta information om alla resurser i klustret 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 har statusen Klar. Statusen Klar indikerar 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 för den angivna resursen som begärts. Anta till exempel att du behöver 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 kan du köra 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>
    

    Anledningen 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 namnrymder i klustret. Dessa är standard, container-registry och kube-system. Här kan du se registry-, kube-dns- och kubernetes-dashboard-instanserna 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 på ett kluster

Du vill schemalägga en webbserver på klustret för att tillhandahålla en webbplats för dina kunder. Du kan välja mellan flera alternativ. I det här exemplet använder du NGINX.

Som vi tidigare sett kan du 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 kubectl du för att skicka informationen direkt till API-servern.

Även om det är praktiskt att använda kubectl är bästa praxis att använda manifestfiler. Med manifestfiler kan du snabbt och enkelt återställa distributioner i klustret. De här filerna bidrar också till att dokumentera konfigurationen av ett kluster.

  1. Kör kommandot kubectl create deployment för att skapa din NGINX-distribution. Ange namnet på distributionen och containeravbildningen för att skapa en enkel instans av podden.

    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. Lägg märke till att namnet på distributionen matchar det namn du gav den 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 har skapat en podd. Kör kommandot för att hämta information om klustrets poddar kubectl get pods :

    sudo kubectl get pods
    

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

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

Testa webbplatsens installation

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

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

    sudo kubectl get pods -o wide
    

    Resultatet liknar följande exempel. Observera att kommandot returnerar både nodens IP-adress och det nodnamn 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 wget du på den IP-adress 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 distribution av en webbserver i ett kluster

Anta att du plötsligt ser en ökning av användare som besöker din webbplats och att webbplatsen inte fungerar som den ska på grund av belastningen. Du kan distribuera fler instanser av platsen i klustret och dela upp belastningen över instanserna.

Kör kommandot kubectl scale för att skala antalet repliker i distributionen. 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 kubectl scale du kommandot:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    Resultatet liknar följande exempel:

    deployment.apps/nginx scaled
    

    Med hjälp av skalningskommandot kan du skala upp eller ned antalet instanser.

  2. Om du vill kontrollera antalet poddar som körs kör kubectl get du kommandot och skickar parametern -o wide igen:

    sudo kubectl get pods -o wide
    

    Resultatet liknar följande exempel. Observera att du nu ser tre aktiva poddar som var och en har 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. Exempelvis installera en lastbalanserare och mappa IP-adresser för noden. Den här typen av konfiguration är ett exempel på de avancerade aspekter som du ska utforska i framtiden. I sammanfattningen finns instruktioner om du väljer att avinstallera och rensa den virtuella datorn.