Cvičení – zkoumání funkcí clusteru Kubernetes

Dokončeno

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:

  1. 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.

  1. Stáhněte a nainstalujte si nejnovější verzi Multipassu pro Windows z GitHubu.

  2. 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
    
  3. 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.

  4. 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.

  1. 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
    
  2. 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
    
  3. 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ů.

  4. 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.

  1. 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
    
  2. 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í kubectlná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.

  1. Spusťte příkaz snap alias, aby se pro microk8s.kubectl vytvořil alias kubectl. 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é.

  1. 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ťte kubectl 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
    
  2. 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 a kube-system. Tady najdete instance registry, kube-dns a kubernetes-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.

  1. 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
    
  2. Pokud chcete načíst informace o vašem nasazení, spusťte kubectl get deploymentspří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
    
  3. 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.

  1. 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>
    
  2. 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.

  1. 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í.

  2. 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.