Cvičení – zkoumání funkcí clusteru Kubernetes
Při místním spouštění Kubernetes je k dispozici několik možností. Kubernetes se dá nainstalovat na fyzické a virtuální počítače, případně se dá používat v rámci cloudových řešení, jako je Azure Kubernetes Service (AKS).
Vaším cílem v tomto cvičení je prozkoumat instalaci Kubernetes v clusteru s jedním uzlem. V tomto cvičení se dozvíte, jak nakonfigurovat a nainstalovat prostředí MicroK8s , které se snadno nastavuje a ruší. Pak nasadíte službu Kubernetes a škálujete ji na více instancí pro hostování webu.
Poznámka:
Toto cvičení není povinné a obsahuje kroky, ve kterých zjistíte, jak odstranit a odinstalovat software a prostředky, které během cvičení použijete.
Nezapomeňte, že stejných cílů je možné dosáhnout i dalšími způsoby, třeba pomocí MiniKube a podpory Kubernetes v Dockeru.
Co je MicroK8s?
MicroK8s je možnost nasazení clusteru Kubernetes s jedním uzlem jako jednoho balíčku na cílové pracovní stanice a zařízení internetu věcí (IoT). Canonical, tvůrce Ubuntu Linuxu, původně vyvinutý a aktuálně udržuje MicroK8s.
MicroK8s můžete nainstalovat na Linux, Windows a macOS. Pro každý operační systém se však pokyny k instalaci mírně liší. Zvolte možnost, která nejlépe odpovídá vašemu prostředí.
Instalace MicroK8s v Linuxu
Linuxová instalace MicroK8s je možnost instalace s nejmenším počtem kroků. Přepněte na okno terminálu a spusťte příkazy v následujících pokynech:
Nainstalujte aplikaci snap MicroK8s. V závislosti na rychlosti připojení k internetu a počítače může tento krok trvat několik minut.
sudo snap install microk8s --classic
Po úspěšné instalaci se zobrazí následující zpráva.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teď jste připravení nainstalovat do clusteru doplňky.
Instalace MicroK8s ve Windows
Ke spuštění MicroK8s ve Windows použijte Multipass. Multipass je jednoduchý správce virtuálních počítačů pro Linux, Windows a macOS.
Stáhněte a nainstalujte si nejnovější verzi Multipassu pro Windows z GitHubu.
V příkazové konzole zadejte příkaz pro spuštění Multipassu, aby se nakonfigurovala a spustila image microk8s-vm. V závislosti na rychlosti připojení k internetu a počítače může tento krok trvat několik minut.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Po přijetí potvrzení spuštění pro microk8s-vm spusťte
multipass shell microk8s-vm
příkaz pro přístup k instanci virtuálního počítače.multipass shell microk8s-vm
Jakmile multipass funguje, můžete k virtuálnímu počítači s Ubuntu přistupovat, abyste mohli hostovat cluster a nainstalovat MicroK8s.
Nainstalujte aplikaci snap MicroK8s. V závislosti na rychlosti připojení k internetu a počítače může tento krok trvat několik minut.
sudo snap install microk8s --classic
Úspěšná instalace zobrazí následující zprávu:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teď jste připravení nainstalovat do clusteru doplňky.
Instalace MicroK8s v macOS
Ke spuštění MicroK8s v macOS použijte Multipass. Multipass je jednoduchý správce virtuálních počítačů pro Linux, Windows a macOS.
Nainstalovat Multipass na macOS se dá dvěma způsoby. Buď si stáhněte a nainstalujte nejnovější verzi Multipassu pro macOS z GitHubu, nebo použijte Homebrew k instalaci Multipassu pomocí příkazu
brew cask install multipass
.brew install --cask multipass
V příkazové konzole zadejte příkaz pro spuštění Multipassu, aby se nakonfigurovala a spustila image microk8s-vm. V závislosti na rychlosti připojení k internetu a počítače může tento krok trvat několik minut.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Po přijetí potvrzení spuštění pro microk8s-vm spusťte
multipass shell microk8s-vm
příkaz pro zadání instance virtuálního počítače.multipass shell microk8s-vm
V tomto okamžiku máte přístup k virtuálnímu počítači s Ubuntu pro hostování clusteru. Stále ale musíte nainstalovat MicroK8s. Postupujte podle těchto kroků.
Nainstalujte aplikaci snap MicroK8s. V závislosti na rychlosti připojení k internetu a počítače může tento krok trvat několik minut.
sudo snap install microk8s --classic
Úspěšná instalace zobrazí následující zprávu:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Teď jste připravení nainstalovat do clusteru doplňky.
Příprava clusteru
Pokud chcete zobrazit stav nainstalovaných doplňků v clusteru, spusťte status
příkaz v MicroK8s. Tyto doplňky poskytují několik služeb, z nichž některé už máte za sebou. Jedním z příkladů je funkce DNS.
Pokud chcete zkontrolovat stav instalace, spusťte příkaz
microk8s.status --wait-ready
.sudo microk8s.status --wait-ready
Všimněte si, že v clusteru je několik zakázaných doplňků. S doplňky, které nepoznáváte, si nedělejte starosti.
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
V seznamu je potřeba povolit doplňky DNS, Řídicí panel a Registr. Tady jsou účely každého doplňku:
Doplňky Účel DNS Nasadí službu coreDNS
.Řídicí panely Nasadí službu kubernetes-dashboard
a několik dalších služeb, které podporují tuto funkci. Je to webové uživatelské rozhraní pro obecné účely v clusterech Kubernetes.Registr Nasadí privátní registr a několik služeb, které podporují tuto funkci. Tento registr používejte k ukládání privátních kontejnerů. Doplňky nainstalujete spuštěním následujícího příkazu.
sudo microk8s.enable dns dashboard registry
Teď jste připraveni k přístupu ke clusteru pomocí kubectl
nástroje .
Zkoumání clusteru Kubernetes
MicroK8s nabízí verzi kubectl
, pomocí které můžete pracovat s novým clusterem Kubernetes. Tato kopie kubectl
umožňuje mít paralelní instalaci jiné instance kubectl
pro celý systém, aniž by to mělo vliv na jeho funkce.
Spusťte příkaz
snap alias
, aby se promicrok8s.kubectl
vytvořil aliaskubectl
. Tento krok zjednodušuje použití.sudo snap alias microk8s.kubectl kubectl
Po úspěšném dokončení příkazu se zobrazí následující výstup:
Added: - microk8s.kubectl as kubectl
Zobrazení informací o uzlu clusteru
Připomeňme si, že cluster Kubernetes se skládá z řídicích rovin a pracovních uzlů. Pojďme prozkoumat nový cluster a zjistit, co je nainstalované.
Zkontrolujte uzly, které jsou spuštěné v clusteru.
Jak víte, MicrosK8s je instalace clusteru s jedním uzlem, proto očekáváte, že se zobrazí jen jeden uzel. Nezapomeňte ale, že tento uzel je v clusteru jak řídicí rovinou, tak pracovním uzlem. Potvrďte tuto konfiguraci pomocí příkazu
kubectl get nodes
. Pokud chcete načíst informace o všech prostředcích v clusteru, spusťtekubectl get
příkaz:sudo kubectl get nodes
Výsledek je podobný následujícímu příkladu, který ukazuje, že v clusteru je pouze jeden uzel s názvem
microk8s-vm
. Všimněte si, že uzel je ve stavu Připraveno . Připravený stav znamená, že řídicí rovina může plánovat úlohy na tomto uzlu.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
Pro konkrétní požadovaný prostředek si můžete zobrazit další informace. Předpokládejme například, že potřebujete najít IP adresu uzlu. Pokud chcete načíst další informace ze serveru rozhraní API, spusťte
-o wide
parametr:sudo kubectl get nodes -o wide
Výsledek je podobný následujícímu příkladu. Všimněte si, že teď vidíte interní IP adresu uzlu, operační systém spuštěný na uzlu, verzi jádra a modul runtime kontejneru.
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
Dalším krokem je prozkoumat služby spuštěné na clusteru. Podobně jako u uzlů najdete informace o službách, které v clusteru běží, pomocí příkazu
kubectl get
.sudo kubectl get services -o wide
Výsledek je podobný následujícímu příkladu, ale všimněte si, že je uvedena pouze jedna služba. Do clusteru jste nainstalovali doplňky dříve a očekáváte také, že tyto služby uvidíte.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Důvodem pro výpis jedné služby je, že Kubernetes používá koncept označovaný jako obory názvů k logickému rozdělení clusteru do několika virtuálních clusterů.
Pokud chcete načíst všechny služby ve všech oborech názvů, předejte
--all-namespaces
parametr:sudo kubectl get services -o wide --all-namespaces
Výsledek je podobný následujícímu příkladu. Všimněte si, že v clusteru máte tři obory názvů. Jsou to výchozí obor názvů a obory názvů
container-registry
akube-system
. Tady najdete instanceregistry
,kube-dns
akubernetes-dashboard
, které jste nainstalovali. K dispozici jsou také podpůrné služby, které byly nainstalovány spolu s některými doplňky.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
Když teď vidíte služby spuštěné v clusteru, můžete naplánovat úlohu na pracovním uzlu.
Instalace webového serveru do clusteru
Chcete v clusteru naplánovat webový server, který bude pro vaše zákazníky obsluhovat web. Můžete zvolit z několika možností. V tomto příkladu použijete NGINX.
Připomeňme si, že pomocí souborů manifestu podů můžete popisovat své pody, sady replik a nasazení a definovat tak úlohy. Vzhledem k tomu, že jste tyto soubory podrobně nepokryli, spustíte spuštění kubectl
, abyste přímo předali informace na server rozhraní API.
I když použití kubectl
je užitečné, je osvědčeným postupem používat soubory manifestu. Soubory manifestu umožňují snadno v clusteru posouvat nasazení vpřed nebo zpět. Tyto soubory také pomáhají zdokumentovat konfiguraci clusteru.
Spuštěním příkazu
kubectl create deployment
vytvořte nasazení NGINX. Pokud chcete vytvořit jednu instanci podu, zadejte název nasazení a image kontejneru.sudo kubectl create deployment nginx --image=nginx
Výsledek je podobný následujícímu příkladu:
deployment.apps/nginx created
Pokud chcete načíst informace o vašem nasazení, spusťte
kubectl get deployments
příkaz :sudo kubectl get deployments
Výsledek je podobný následujícímu příkladu. Všimněte si, že název nasazení odpovídá názvu, který jste mu dali, a že jedno nasazení s tímto názvem je v připraveném stavu a k dispozici.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Nasazení vytvořilo pod. Pokud chcete načíst informace o podech clusteru, spusťte
kubectl get pods
příkaz:sudo kubectl get pods
Výsledek je podobný následujícímu příkladu. Všimněte si, že název podu je vygenerovaná hodnota s předponou názvu nasazení a pod má stav Spuštěno.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Test instalace webu
Otestujte instalaci NGINX tak, že se k webovému serveru připojíte pomocí IP adresy podu.
Pokud chcete najít adresu podu
-o wide
, předejte parametr:sudo kubectl get pods -o wide
Výsledek je podobný následujícímu příkladu. Všimněte si, že příkaz vrátí jak IP adresu, tak název uzlu, na kterém je úloha naplánovaná.
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>
Pokud chcete získat přístup k webu, spusťte
wget
na IP adrese uvedené dříve:wget <POD_IP>
Výsledek je podobný následujícímu příkladu:
--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]
Škálování nasazení webového serveru v clusteru
Předpokládejme, že zjistíte náhlý nárůst přístupů uživatelů na web a že web začne kvůli zatížení selhávat. Můžete v clusteru nasadit více instancí webu a zatížení rozdělit mezi ně.
Pomocí příkazu kubectl scale
můžete přizpůsobit počet replik v nasazení. Počet replik, které potřebujete, a název nasazení určujete vy.
Pokud chcete celkový počet podů NGINX škálovat na tři, spusťte
kubectl scale
příkaz:sudo kubectl scale --replicas=3 deployments/nginx
Výsledek je podobný následujícímu příkladu:
deployment.apps/nginx scaled
Příkaz pro škálování umožňuje zvyšovat a snižovat počet instancí.
Pokud chcete zkontrolovat počet spuštěných podů, spusťte
kubectl get
příkaz a znovu předejte-o wide
parametr:sudo kubectl get pods -o wide
Výsledek je podobný následujícímu příkladu. Všimněte si, že teď se zobrazují tři spuštěné pody a každý má jedinečnou IP adresu.
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:~$
Abyste mohli web efektivně vystavit jako veřejný web, musíte u clusteru použít několik dalších konfigurací. Patří sem třeba instalace nástroje pro vyrovnávání zatížení a mapování IP adres uzlů. Tento typ konfigurace utváří část pokročilých aspektů, které budete zkoumat v budoucnu. V souhrnu najdete pokyny, pokud se rozhodnete virtuální počítač odinstalovat a vyčistit.