Övning – Utforska funktionerna i ett Kubernetes-kluster
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:
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.
Hämta och installera den senaste versionen av MultiPass för Windows från GitHub.
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
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.
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.
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
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
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.
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.
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
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.
Kör kommandot
snap alias
för att använda aliasmicrok8s.kubectl
förkubectl
. 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.
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 klustretkubectl 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
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
ochkube-system
. Här kan du seregistry
-,kube-dns
- ochkubernetes-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.
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
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
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.
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>
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.
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.
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.