Oefening: de functionaliteit van een Kubernetes-cluster verkennen
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:
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.
Download en installeer de nieuwste versie van Multipass voor Windows vanaf GitHub.
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
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.
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.
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
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
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.
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
Als u de status van de geïnstalleerde invoegtoepassingen in uw cluster wilt weergeven, voert u de status
opdracht uit in MicroK8s. Deze invoegtoepassingen bieden diverse services, waarvan een aantal eerder is besproken. Een voorbeeld hiervan is de DNS-functionaliteit.
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
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.
Voer de opdracht
snap alias
uit om vanmicrok8s.kubectl
een alias te maken naarkubectl
. 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.
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 dekubectl 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. Stel 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 kernelversie en de containerruntime.
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
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
enkube-system
. Hier ziet u de instantiesregistry
,kube-dns
enkubernetes-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. Deze bestanden helpen ook bij het document maken van de configuratie van een cluster.
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
Voer het volgende uit
kubectl get deployments
om 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
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.
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>
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.
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.
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.