Instalace existujících aplikací pomocí Helmu v Azure Kubernetes Service (AKS)

Helm je opensourcový nástroj pro balení, který pomáhá instalovat a spravovat životní cyklus aplikací Kubernetes. Podobně jako správci balíčků pro Linux, jako jsou APT a Yum, se Helm používá ke správě grafů Kubernetes, což jsou balíčky předkonfigurovaných prostředků Kubernetes.

V tomto článku se dozvíte, jak nakonfigurovat a používat Helm v clusteru Kubernetes v AKS.

Než začnete

Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, projděte si rychlý start pro AKS pomocí Azure CLI, Azure PowerShell nebo použití Azure Portal.

Tento článek navíc předpokládá, že máte existující cluster AKS s integrovanou službou ACR. Další podrobnosti o vytvoření clusteru AKS s integrovanou službou ACR najdete v tématu Ověřování pomocí Azure Container Registry z Azure Kubernetes Service.

Potřebujete také nainstalovat Helm CLI, což je klient, který běží ve vašem vývojovém systému. Umožňuje spouštět, zastavovat a spravovat aplikace pomocí Helmu. Pokud používáte Azure Cloud Shell, je rozhraní příkazového řádku Helmu už nainstalované. Pokyny k instalaci na místní platformě najdete v tématu Instalace Helmu.

Důležité

Helm je určený ke spuštění na uzlech Linuxu. Pokud máte v clusteru uzly Windows Serveru, musíte zajistit, aby pody Helm byly naplánované jenom na uzlech s Linuxem. Musíte také zajistit, aby všechny grafy Helm, které nainstalujete, byly naplánované tak, aby běžely na správných uzlech. Příkazy v tomto článku používají [node-selectors][k8s-node-selector] k tomu, aby se zajistilo, že pody jsou naplánované na správné uzly, ale ne všechny grafy Helmu můžou vystavit selektor uzlů. Můžete také zvážit použití dalších možností v clusteru, například taintů.

Ověření vaší verze Helmu

Pomocí příkazu helm version ověřte, že máte nainstalovaný Helm 3:

helm version

Následující příklad ukazuje nainstalovaný Helm verze 3.0.0:

$ helm version

version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}

Instalace aplikace s helmem v3

Přidání úložišť Helm

Pomocí příkazu úložiště helm přidejte úložiště ingress-nginx .

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

Vyhledání grafů Helmu

Grafy Helm se používají k nasazení aplikací do clusteru Kubernetes. Pokud chcete vyhledat předem vytvořené grafy Helm, použijte příkaz helm search :

helm search repo ingress-nginx

Následující zhuštěný příklad výstupu ukazuje některé grafy Helmu, které jsou k dispozici pro použití:

$ helm search repo ingress-nginx

NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
ingress-nginx/ingress-nginx     2.12.0          0.34.1          Ingress controller for Kubernetes using NGINX a...

Pokud chcete aktualizovat seznam grafů, použijte příkaz helm repo update .

helm repo update

Následující příklad ukazuje úspěšnou aktualizaci úložiště:

$ helm repo update

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈ Happy Helming!⎈

Import obrázků používaných grafem Helm do ACR

Tento článek používá chart Helm kontroleru příchozího přenosu dat NGINX, který se spoléhá na tři image kontejneru. Slouží az acr import k importu těchto obrázků do ACR.

REGISTRY_NAME=<REGISTRY_NAME>
CONTROLLER_REGISTRY=k8s.gcr.io
CONTROLLER_IMAGE=ingress-nginx/controller
CONTROLLER_TAG=v0.48.1
PATCH_REGISTRY=docker.io
PATCH_IMAGE=jettech/kube-webhook-certgen
PATCH_TAG=v1.5.1
DEFAULTBACKEND_REGISTRY=k8s.gcr.io
DEFAULTBACKEND_IMAGE=defaultbackend-amd64
DEFAULTBACKEND_TAG=1.5

az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG

Poznámka

Kromě importu imagí kontejneru do ACR můžete do ACR také importovat grafy Helm. Další informace najdete v tématu Vložení a vyžádání grafů Helm do registru kontejneru Azure.

Spuštění grafů Helm

Pokud chcete nainstalovat grafy s Helmem, použijte příkaz helm install a zadejte název verze a název grafu, který chcete nainstalovat. Pokud chcete vidět instalaci chartu Helm v akci, nainstalujme základní nasazení nginx pomocí chartu Helm.

Tip

Následující příklad vytvoří obor názvů Kubernetes pro prostředky příchozího přenosu dat s názvem ingress-basic a má fungovat v rámci tohoto oboru názvů. Podle potřeby zadejte obor názvů pro vlastní prostředí.

ACR_URL=<REGISTRY_URL>

# Create a namespace for your ingress resources
kubectl create namespace ingress-basic

# Use Helm to deploy an NGINX ingress controller
helm install nginx-ingress ingress-nginx/ingress-nginx \
    --version 4.0.13 \
    --namespace ingress-basic \
    --set controller.replicaCount=2 \
    --set controller.nodeSelector."kubernetes\.io/os"=linux \
    --set controller.image.registry=$ACR_URL \
    --set controller.image.image=$CONTROLLER_IMAGE \
    --set controller.image.tag=$CONTROLLER_TAG \
    --set controller.image.digest="" \
    --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
    --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
    --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
    --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
    --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
    --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
    --set defaultBackend.image.registry=$ACR_URL \
    --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
    --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
    --set defaultBackend.image.digest=""

Následující zhuštěný ukázkový výstup ukazuje stav nasazení prostředků Kubernetes vytvořených grafem Helm:

NAME: nginx-ingress
LAST DEPLOYED: Wed Jul 28 11:35:29 2021
NAMESPACE: ingress-basic
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller'
...

Pomocí příkazu kubectl get services získejte EXTERNAL-IP adresu vaší služby.

kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller

Například následující příkaz zobrazuje EXTERNAL-IP pro službu nginx-ingress-ingress-nginx-controller :

$ kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller

NAME                                     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE   SELECTOR
nginx-ingress-ingress-nginx-controller   LoadBalancer   10.0.254.93   <EXTERNAL_IP>   80:30004/TCP,443:30348/TCP   61s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx

Výpis vydaných verzí

Pokud chcete zobrazit seznam verzí nainstalovaných v clusteru, použijte příkaz helm list .

helm list --namespace ingress-basic

Následující příklad ukazuje verzi my-nginx-ingress nasazenou v předchozím kroku:

$ helm list --namespace ingress-basic
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
nginx-ingress   ingress-basic   1               2021-07-28 11:35:29.9623734 -0500 CDT   deployed        ingress-nginx-3.34.0    0.47.0

Vyčištění prostředků

Když nasadíte chart Helm, vytvoří se několik prostředků Kubernetes. Mezi tyto prostředky patří pody, nasazení a služby. Pokud chcete tyto prostředky vyčistit, použijte příkaz helm uninstall a zadejte název verze, jak je uvedeno v předchozím helm list příkazu.

helm uninstall --namespace ingress-basic nginx-ingress

Následující příklad ukazuje, že verze my-nginx-ingress byla odinstalována:

$ helm uninstall --namespace ingress-basic nginx-ingress

release "nginx-ingress" uninstalled

Pokud chcete odstranit celý ukázkový obor názvů, použijte kubectl delete příkaz a zadejte název oboru názvů. Odstraní se všechny prostředky v oboru názvů.

kubectl delete namespace ingress-basic

Další kroky

Další informace o správě nasazení aplikací Kubernetes pomocí Helmu najdete v dokumentaci k Helmu.