Övning – Utforska funktionerna i ett Kubernetes-kluster
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:
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 --classicEn 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.
Ladda ned och installera den senaste versionen av Multipass för Windows från GitHub.
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 40GNär du har fått startbekräftelsen för microk8s-vm kör du kommandot
multipass shell microk8s-vmför att få åtkomst till den virtuella datorinstansen.multipass shell microk8s-vmNär multipass fungerar kan du komma åt den virtuella Ubuntu-datorn som värd för klustret och installera MicroK8s.
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 --classicEn 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.
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 multipassanvänder du Homebrew.brew install --cask multipassI 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 40GNär du har fått startbekräftelsen för microk8s-vm kör du kommandot
multipass shell microk8s-vmför att ange vm-instansen.multipass shell microk8s-vmNu kan du komma åt den virtuella Ubuntu-datorn som värd för klustret. Du måste fortfarande installera MicroK8s. Följ dessa steg.
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 --classicEn 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.
Kontrollera installationens status genom att köra kommandot
microk8s.status --wait-ready.sudo microk8s.status --wait-readyObservera 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: disabledFrå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.
Kör kommandot
snap aliasför att skapa aliasetmicrok8s.kubectltillkubectl. Det här steget förenklar användningen.sudo snap alias microk8s.kubectl kubectlFö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.
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 kommandotkubectl get:sudo kubectl get nodesResultatet 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.3Du 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 wideResultatet 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.5Nästa steg är att utforska de tjänster som körs i klustret. Precis som med noder kör du kommandot
kubectl getför att hitta information om de tjänster som körs i klustret.sudo kubectl get services -o wideResultatet 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-namespacesResultatet liknar följande exempel. Observera att du har tre namnområden i klustret. De är standardnamnrymderna
container-registryochkube-system. Här kan du se deregistry,kube-dnsochkubernetes-dashboardinstanser 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=influxGrafanaNu 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.
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=nginxResultatet liknar följande exempel:
deployment.apps/nginx createdOm du vill hämta information om distributionen kör du
kubectl get deployments:sudo kubectl get deploymentsResultatet 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 18sDistributionen skapade en pod. Om du vill hämta information om klustrets poddar kör du kommandot
kubectl get pods:sudo kubectl get podsResultatet 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.
Skicka parametern
-o wideför att hitta poddens adress:sudo kubectl get pods -o wideResultatet 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>Om du vill komma åt webbplatsen kör du
wgetpå 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.
Om du vill skala summan av NGINX-poddar till tre kör du kommandot
kubectl scale:sudo kubectl scale --replicas=3 deployments/nginxResultatet liknar följande exempel:
deployment.apps/nginx scaledMed skalningskommandot kan du skala upp eller ned antalet instanser.
Kontrollera antalet poddar som körs genom att köra kommandot
kubectl getoch skicka parametern-o wideigen:sudo kubectl get pods -o wideResultatet 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.