Nasazení clusteru Kubernetes s vysokou dostupností ve službě Azure Stack Hub

V tomto článku se dozvíte, jak vytvořit vysoce dostupné prostředí clusteru Kubernetes nasazené v několika instancích služby Azure Stack Hub v různých fyzických umístěních.

V tomto průvodci nasazením řešení se naučíte:

  • Stažení a příprava modulu AKS
  • Připojení k pomocnému virtuálnímu počítači modulu AKS
  • Nasazení clusteru Kubernetes
  • Připojení ke clusteru Kubernetes
  • Připojení Azure Pipelines ke clusteru Kubernetes
  • Konfigurace sledování
  • Nasazení aplikace
  • Automatické škálování aplikace
  • Konfigurace služby Traffic Manager
  • Upgrade Kubernetes
  • Škálování Kubernetes

Tip

Hybridní pilíře Microsoft Azure Stack Hub je rozšířením Azure. Azure Stack Hub přináší flexibilitu a inovace cloud computingu do vašeho místního prostředí a umožňuje tak jediný hybridní cloud, který umožňuje sestavovat a nasazovat hybridní aplikace kdekoli.

Článek Aspekty návrhu hybridních aplikací se zabývá pilíři kvality softwaru (umístění, škálovatelnost, dostupnost, odolnost, spravovatelnost a zabezpečení) pro návrh, nasazení a provoz hybridních aplikací. Aspekty návrhu pomáhají optimalizovat návrh hybridních aplikací a minimalizovat výzvy v produkčních prostředích.

Požadavky

Než začnete s tímto průvodcem nasazením, ujistěte se, že:

Stažení a příprava modulu AKS

Modul AKS je binární soubor, který je možné použít z libovolného hostitele s Windows nebo Linuxem, který se může dostat ke koncovým bodům Azure Resource Manager Azure Stack Hub. Tato příručka popisuje nasazení nového virtuálního počítače s Linuxem (nebo Windows) ve službě Azure Stack Hub. Použije se později, až modul AKS nasadí clustery Kubernetes.

Poznámka

K nasazení clusteru Kubernetes ve službě Azure Stack Hub pomocí modulu AKS můžete také použít existující virtuální počítač s Windows nebo Linuxem.

Podrobný postup a požadavky na modul AKS jsou popsané tady:

Modul AKS je pomocný nástroj pro nasazování a provoz (nespravovaných) clusterů Kubernetes (v Azure a ve službě Azure Stack Hub).

Podrobnosti a rozdíly modulu AKS ve službě Azure Stack Hub jsou popsané tady:

Ukázkové prostředí použije Terraform k automatizaci nasazení virtuálního počítače modulu AKS. Podrobnosti a kód najdete v doprovodné úložišti GitHub.

Výsledkem tohoto kroku je nová skupina prostředků ve službě Azure Stack Hub, která obsahuje virtuální počítač pomocného modulu AKS a související prostředky:

Prostředky virtuálních počítačů modulu AKS ve službě Azure Stack Hub

Poznámka

Pokud musíte nasadit modul AKS v odpojené prostředí se vzduchovou mezerou, přečtěte si téma Odpojené instance služby Azure Stack Hub , kde najdete další informace.

V dalším kroku použijeme nově nasazený virtuální počítač modulu AKS k nasazení clusteru Kubernetes.

Připojení k pomocnému virtuálnímu počítači modulu AKS

Nejprve se musíte připojit k dříve vytvořenému pomocnému virtuálnímu počítači modulu AKS.

Virtuální počítač by měl mít veřejnou IP adresu a měl by být přístupný přes SSH (port 22/TCP).

Stránka přehledu virtuálních počítačů modulu AKS

Tip

K připojení k virtuálnímu počítači s Linuxem pomocí SSH můžete použít nástroj podle svého výběru, jako je MobaXterm, puTTY nebo PowerShell v Windows 10.

ssh <username>@<ipaddress>

Po připojení spusťte příkaz aks-engine. Další informace o modulu AKS a verzích Kubernetes najdete v tématu Podporované verze modulu AKS .

Příklad příkazového řádku aks-engine

Nasazení clusteru Kubernetes

Samotný pomocný virtuální počítač modulu AKS ještě nevytvořil cluster Kubernetes ve službě Azure Stack Hub. Vytvoření clusteru je první akce, která se provede na pomocném virtuálním počítači modulu AKS.

Podrobný postup je zdokumentovaný tady:

Konečným výsledkem aks-engine deploy příkazu a příprav v předchozích krocích je plně funkční cluster Kubernetes nasazený do prostoru tenanta první instance služby Azure Stack Hub. Samotný cluster se skládá z komponent Azure IaaS, jako jsou virtuální počítače, nástroje pro vyrovnávání zatížení, virtuální sítě, disky atd.

Portál Azure Stack Hub pro komponenty clusteru IaaS

  1. Nástroj pro vyrovnávání zatížení Azure (koncový bod rozhraní API K8s) 2) Pracovní uzly (fond agentů) 3) hlavní uzly

Cluster je teď v provozu a v dalším kroku se k němu připojíme.

Připojení ke clusteru Kubernetes

Teď se můžete připojit k dříve vytvořenému clusteru Kubernetes, a to buď přes SSH (pomocí klíče SSH zadaného jako součást nasazení), nebo přes kubectl (doporučeno). Tady je k dispozici nástroj kubectl příkazového řádku Kubernetes pro Windows, Linux a macOS. Už je předinstalovaný a nakonfigurovaný na hlavních uzlech našeho clusteru:

ssh azureuser@<k8s-master-lb-ip>

Spuštění kubectl na hlavním uzlu

Nedoporučuje se používat hlavní uzel jako jumpbox pro úlohy správy. Konfigurace je uložená kubectl v .kube/config na hlavních uzlech a také na virtuálním počítači modulu AKS. Konfiguraci můžete zkopírovat na počítač pro správu s připojením ke clusteru Kubernetes a použít příkaz tam kubectl . Soubor se .kube/config později použije také ke konfiguraci připojení služby v Azure Pipelines.

Důležité

Tyto soubory zachovejte v bezpečí, protože obsahují přihlašovací údaje pro váš cluster Kubernetes. Útočník s přístupem k souboru má dostatek informací, aby k němu získal přístup správce. Všechny akce, které se provádějí pomocí počátečního .kube/config souboru, se provádějí pomocí účtu správce clusteru.

Teď můžete zkontrolovat stav clusteru pomocí kubectl různých příkazů. Tady jsou ukázkové příkazy:

kubectl get nodes
NAME                       STATUS   ROLE     VERSION
k8s-linuxpool-35064155-0   Ready    agent    v1.14.8
k8s-linuxpool-35064155-1   Ready    agent    v1.14.8
k8s-linuxpool-35064155-2   Ready    agent    v1.14.8
k8s-master-35064155-0      Ready    master   v1.14.8
kubectl cluster-info
Kubernetes master is running at https://aks.***
CoreDNS is running at https://aks.***/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
kubernetes-dashboard is running at https://aks.***/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
Metrics-server is running at https://aks.***/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

Důležité

Kubernetes má vlastní model Access Control na základě rolí (RBAC), který umožňuje vytvářet jemně odstupňované definice rolí a vazby rolí. Toto je vhodnější způsob řízení přístupu ke clusteru místo udělení oprávnění správce clusteru.

Připojení Azure Pipelines ke clusterům Kubernetes

K připojení Azure Pipelines k nově nasazeným clusteru Kubernetes potřebujeme jeho soubor kubeconfig (.kube/config), jak je vysvětleno v předchozím kroku.

  • Připojte se k jednomu z hlavních uzlů clusteru Kubernetes.
  • Zkopírujte obsah .kube/config souboru.
  • Přejděte do části Připojení služby Nastavení > projektu Azure DevOps > a vytvořte nové připojení služby Kubernetes (jako metodu ověřování použijte KubeConfig).

Důležité

Azure Pipelines (nebo její agenti sestavení) musí mít přístup k rozhraní Kubernetes API. Pokud existuje internetové připojení ze služby Azure Pipelines ke clusteru Kubernetes služby Azure Stack Hub, budete muset nasadit agenta sestavení Azure Pipelines v místním prostředí.

Při nasazování agentů v místním prostředí pro Azure Pipelines můžete nasazení provést buď ve službě Azure Stack Hub, nebo na počítač se síťovým připojením ke všem požadovaným koncovým bodům správy. Podrobnosti najdete tady:

Část Aspekty nasazení modelu (CI/CD) obsahuje rozhodovací postup, který vám pomůže pochopit, jestli použít agenty hostované Microsoftem nebo agenty v místním prostředí:

Diagram znázorňující rozhodovací postup agentů v místním prostředí

Stáhněte si soubor Visia se všemi diagramy v tomto článku.

V tomto ukázkovém řešení topologie zahrnuje agenta sestavení v místním prostředí pro každou instanci služby Azure Stack Hub. Agent má přístup ke koncovým bodům správy služby Azure Stack Hub a koncovým bodům rozhraní API clusteru Kubernetes.

Diagram znázorňující odchozí provoz

Stáhněte si soubor Visia se všemi diagramy v tomto článku.

Tento návrh splňuje běžný zákonný požadavek, kterým je mít pouze odchozí připojení z řešení aplikace.

Konfigurace sledování

K monitorování kontejnerů v řešení můžete použít Azure Monitor pro kontejnery. Tím azure Monitor odkazuje na cluster Kubernetes nasazený modulem AKS ve službě Azure Stack Hub.

Azure Monitor v clusteru můžete povolit dvěma způsoby. Oba způsoby vyžadují, abyste v Azure nastavili pracovní prostor služby Log Analytics.

  • Metoda 1 používá chart Helm
  • Metoda 2 jako součást specifikace clusteru modulu AKS

V ukázkové topologii se používá "Metoda jedna", která umožňuje automatizaci procesu a snadnější instalaci aktualizací.

V dalším kroku potřebujete pracovní prostor Azure LogAnalytics (ID a klíč) Helm (verze 3) a kubectl na svém počítači.

Helm je správce balíčků Kubernetes, který je k dispozici jako binární soubor, který běží v systémech macOS, Windows a Linux. Můžete si ho stáhnout na helm.sh. Helm spoléhá na konfigurační soubor Kubernetes použitý pro kubectl příkaz :

helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
helm repo update

helm install incubator/azuremonitor-containers \
--set omsagent.secret.wsid=<your_workspace_id> \
--set omsagent.secret.key=<your_workspace_key> \
--set omsagent.env.clusterName=<my_prod_cluster> \
--generate-name

Tento příkaz nainstaluje agenta Azure Monitoru do clusteru Kubernetes:

kubectl get pods -n kube-system
NAME                                       READY   STATUS
omsagent-8qdm6                             1/1     Running
omsagent-r6ppm                             1/1     Running
omsagent-rs-76c45758f5-lmc4l               1/1     Running

Agent Operations Management Suite (OMS) ve vašem clusteru Kubernetes bude odesílat data monitorování do pracovního prostoru služby Azure Log Analytics (pomocí odchozího protokolu HTTPS). Azure Monitor teď můžete použít k získání hlubších přehledů o clusterech Kubernetes ve službě Azure Stack Hub. Tento návrh představuje účinný způsob, jak předvést sílu analýz, které se dají automaticky nasadit s clustery vaší aplikace.

Clustery Azure Stack Hub ve službě Azure Monitor

Podrobnosti o clusteru Azure Monitoru

Důležité

Pokud Azure Monitor nezobrazuje žádná data služby Azure Stack Hub, ujistěte se, že jste pečlivě postupovali podle pokynů k přidání AzureMonitor-Containers řešení do pracovního prostoru služby Azure Log Analytics .

Nasazení aplikace

Před instalací ukázkové aplikace je potřeba v clusteru Kubernetes nakonfigurovat kontroler příchozího přenosu dat založený na nginx. Kontroler příchozího přenosu dat se používá jako nástroj pro vyrovnávání zatížení vrstvy 7 ke směrování provozu v našem clusteru na základě hostitele, cesty nebo protokolu. Příchozí přenos dat Nginx je k dispozici jako chart Helm. Podrobné pokyny najdete v úložišti Helm Chart na GitHubu.

Naše ukázková aplikace je také zabalená jako chart Helm, podobně jako agent monitorování Azure v předchozím kroku. Nasazení aplikace do našeho clusteru Kubernetes je proto jednoduché. Soubory Helm Chart najdete v doprovodné úložišti GitHub.

Ukázková aplikace je třívrstvé aplikace nasazená do clusteru Kubernetes v každé ze dvou instancí služby Azure Stack Hub. Aplikace používá databázi MongoDB. Další informace o tom, jak získat data replikovaná napříč několika instancemi, najdete v tématu Aspekty dat a úložiště.

Po nasazení chartu Helmu pro aplikaci uvidíte všechny tři vrstvy aplikace reprezentované jako nasazení a stavové sady (pro databázi) s jedním podem:

kubectl get pod,deployment,statefulset
NAME                                         READY   STATUS
pod/ratings-api-569d7f7b54-mrv5d             1/1     Running
pod/ratings-mongodb-0                        1/1     Running
pod/ratings-web-85667bfb86-l6vxz             1/1     Running

NAME                                         READY
deployment.extensions/ratings-api            1/1
deployment.extensions/ratings-web            1/1

NAME                                         READY
statefulset.apps/ratings-mongodb             1/1

Na straně služeb najdete kontroler příchozího přenosu dat založený na nginx a jeho veřejnou IP adresu:

kubectl get service
NAME                                         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)
kubernetes                                   ClusterIP      10.0.0.1       <none>        443/TCP
nginx-ingress-1588931383-controller          LoadBalancer   10.0.114.180   *public-ip*   443:30667/TCP
nginx-ingress-1588931383-default-backend     ClusterIP      10.0.76.54     <none>        80/TCP
ratings-api                                  ClusterIP      10.0.46.69     <none>        80/TCP
ratings-web                                  ClusterIP      10.0.161.124   <none>        80/TCP

Externí IP adresa je náš "koncový bod aplikace". Je to způsob, jak se uživatelé připojí, aby mohli aplikaci otevřít, a použije se také jako koncový bod pro náš další krok Konfigurace Traffic Manageru.

Automatické škálování aplikace

Volitelně můžete horizontální automatické škálování podů nakonfigurovat tak, aby vertikálně navyšoval nebo snižoval kapacitu na základě určitých metrik, jako je využití procesoru. Následující příkaz vytvoří horizontální automatické škálování podů, které udržuje 1 až 10 replik podů řízených nasazením ratings-web. HPA zvýší a sníží počet replik (prostřednictvím nasazení), aby se zachovalo průměrné využití procesoru u všech podů 80 %:

kubectl autoscale deployment ratings-web --cpu-percent=80 --min=1 --max=10

Aktuální stav automatického škálování můžete zkontrolovat spuštěním tohoto příkazu:

kubectl get hpa
NAME          REFERENCE                      TARGET    MINPODS   MAXPODS   REPLICAS   AGE
ratings-web   Deployment/ratings-web/scale   0% / 80%  1         10        1          18s

Konfigurace služby Traffic Manager

K distribuci provozu mezi dvě (nebo více) nasazení aplikace použijeme Azure Traffic Manager. Azure Traffic Manager je nástroj pro vyrovnávání zatížení provozu založený na DNS v Azure.

Poznámka

Traffic Manager pomocí DNS směruje požadavky klientů do nejvhodnějšího koncového bodu služby na základě metody směrování provozu a stavu koncových bodů.

Místo Azure Traffic Manageru můžete také použít jiná globální řešení pro vyrovnávání zatížení hostovaná místně. V ukázkovém scénáři použijeme Azure Traffic Manager k distribuci provozu mezi dvě instance naší aplikace. Můžou běžet na instancích služby Azure Stack Hub ve stejném nebo jiném umístění:

Diagram znázorňující místní správce provozu

Stáhněte si soubor Visia se všemi diagramy v tomto článku.

V Azure nakonfigurujeme Traffic Manager tak, aby odkazovat na dvě různé instance naší aplikace:

Profil koncového bodu TM

Jak vidíte, tyto dva koncové body ukazují na dvě instance nasazené aplikace z předchozí části.

V tomto okamžiku:

  • Vytvořila se infrastruktura Kubernetes, včetně kontroleru příchozího přenosu dat.
  • Clustery se nasadily do dvou instancí služby Azure Stack Hub.
  • Monitorování bylo nakonfigurováno.
  • Azure Traffic Manager bude vyrovnávat zatížení provozu mezi dvěma instancemi služby Azure Stack Hub.
  • Kromě této infrastruktury se ukázková třívrstvé aplikace nasadila automatizovaným způsobem pomocí Helm Charts.

Řešení by teď mělo být dostupné pro uživatele.

Existuje také několik provozních aspektů po nasazení, které stojí za to prodiskutovat, a které jsou popsány v následujících dvou částech.

Upgrade Kubernetes

Při upgradu clusteru Kubernetes zvažte následující témata:

Novější základní image operačního systému obsahují aktualizace zabezpečení a jádra. Za monitorování dostupnosti novějších verzí Kubernetes a imagí operačního systému zodpovídá operátor clusteru. Operátor by měl tyto upgrady naplánovat a spustit pomocí modulu AKS. Základní image operačního systému musí stáhnout z Marketplace služby Azure Stack Hub operátor služby Azure Stack Hub.

Škálování Kubernetes

Škálování je další operace 2. dne, kterou je možné orchestrovat pomocí modulu AKS.

Příkaz pro škálování znovu použije konfigurační soubor clusteru (apimodel.json) ve výstupním adresáři jako vstup pro nové nasazení Azure Resource Manager. Modul AKS provede operaci škálování pro konkrétní fond agentů. Po dokončení operace škálování aktualizuje modul AKS definici clusteru ve stejném souboru apimodel.json. Definice clusteru odráží počet nových uzlů, aby odrážela aktualizovanou aktuální konfiguraci clusteru.

Další kroky