Instalowanie istniejących aplikacji za pomocą programu Helm w Azure Kubernetes Service (AKS)

Helm to narzędzie do tworzenia pakietów typu open source, które ułatwia instalowanie cyklu życia aplikacji Kubernetes i zarządzanie nimi. Podobnie jak w przypadku menedżerów pakietów systemu Linux, takich jak APT i Yum, program Helm służy do zarządzania wykresami Kubernetes, które są pakietami wstępnie skonfigurowanych zasobów kubernetes.

W tym artykule pokazano, jak skonfigurować program Helm i używać go w klastrze Kubernetes w u usługi AKS.

Zanim rozpoczniesz

W tym artykule przyjęto założenie, że masz istniejący klaster usługi AKS. Jeśli potrzebujesz klastra usługi AKS, zobacz przewodnik Szybki start usługi AKS przy użyciu interfejsu wiersza polecenia platformy Azure lub Azure Portal .

Ponadto w tym artykule przyjęto założenie, że masz istniejący klaster usługi AKS ze zintegrowanym usługą ACR. Aby uzyskać więcej informacji na temat tworzenia klastra usługi AKS ze zintegrowanym usługą ACR, zobacz Authenticate with Azure Container Registry from Azure Kubernetes Service(Uwierzytelnianie za pomocą Azure Container Registry z Azure Kubernetes Service ).

Musisz również zainstalować interfejs wiersza polecenia programu Helm, który jest klientem uruchomionym w systemie deweloperskim. Umożliwia uruchamianie i zatrzymywanie aplikacji oraz zarządzanie nimi za pomocą programu Helm. Jeśli używasz interfejsu Azure Cloud Shell, interfejs wiersza polecenia helm jest już zainstalowany. Aby uzyskać instrukcje instalacji na platformie lokalnej, zobacz Instalowanie programu Helm.

Ważne

Program Helm jest przeznaczony do uruchamiania w węzłach systemu Linux. Jeśli w klastrze Windows węzły serwera, upewnij się, że zasobniki programu Helm są zaplanowane do uruchamiania tylko w węzłach systemu Linux. Należy również upewnić się, że wszystkie zainstalowane wykresy Helm są również zaplanowane do uruchamiania w odpowiednich węzłach. Polecenia w tym artykule używają [selektorów węzłów][k8s-node-selector], aby upewnić się, że zasobniki są zaplanowane dla odpowiednich węzłów, ale nie wszystkie wykresy programu Helm mogą ujawniać selektor węzłów. Możesz również rozważyć użycie innych opcji w klastrze, takich jak taints.

Weryfikowanie wersji programu Helm

Użyj polecenia helm version , aby sprawdzić, czy masz zainstalowany program Helm 3:

helm version

W poniższym przykładzie pokazano zainstalowany program Helm w wersji 3.0.0:

$ helm version

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

Instalowanie aplikacji za pomocą programu Helm w wersji 3

Dodawanie repozytoriów programu Helm

Użyj polecenia helm repo, aby dodać repozytorium ingress-nginx.

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

Znajdowanie wykresów helm

Wykresy helm służą do wdrażania aplikacji w klastrze Kubernetes. Aby wyszukać wstępnie utworzone wykresy Helm, użyj polecenia helm search:

helm search repo ingress-nginx

Poniższe skrócone przykładowe dane wyjściowe pokazują niektóre wykresy helm dostępne do użycia:

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

Aby zaktualizować listę wykresów, użyj polecenia helm repo update.

helm repo update

W poniższym przykładzie pokazano pomyślną aktualizację repo:

$ 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!⎈

Importowanie obrazów używanych przez wykres Helm docr

W tym artykule użyto wykresu Helm kontrolera ruchu przychodzących NGINX,który opiera się na trzech obrazach kontenerów. az acr importZaimportuj te obrazy do swojego konta ACR za pomocą funkcji .

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

Uwaga

Oprócz importowania obrazów kontenerów do rejestru ACR można również zaimportować wykresy helm do rejestru ACR. Aby uzyskać więcej informacji, zobacz Push and pull Helm charts to an Azure container registry (Wypychanie i ściąganie wykresów programu Helm do rejestru kontenerów platformy Azure).

Uruchamianie wykresów helm

Aby zainstalować wykresy za pomocą programu Helm, użyj polecenia helm install i określ nazwę wydania oraz nazwę pakietu do zainstalowania. Aby zobaczyć, jak instalować pakiet Helm w akcji, zainstalujmy podstawowe wdrożenie nginx przy użyciu pakietu Helm.

Porada

Poniższy przykład tworzy przestrzeń nazw Kubernetes dla zasobów przychodzących o nazwie ingress-basic i jest przeznaczona do pracy w tej przestrzeni nazw. Określ przestrzeń nazw dla własnego środowiska zgodnie z potrzebami.

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

Poniższe skrócone przykładowe dane wyjściowe pokazują stan wdrożenia zasobów kubernetes utworzonych przez pakiet 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'
...

Użyj polecenia kubectl get services , aby uzyskać zewnętrzny adres IP usługi.

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

Na przykład poniższe polecenie pokazuje external-IP dla usługi 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

Lista wydań

Aby wyświetlić listę wydań zainstalowanych w klastrze, użyj helm list polecenia .

helm list --namespace ingress-basic

W poniższym przykładzie pokazano wydanie my-nginx-ingress wdrożone w poprzednim 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

Czyszczenie zasobów

Podczas wdrażania planu helm jest tworzona liczba zasobów kubernetes. Te zasoby obejmują zasobniki, wdrożenia i usługi. Aby wyczyścić te zasoby, użyj polecenia helm uninstall i określ nazwę wydania, jak po wcześniejszym helm list poleceniu.

helm uninstall --namespace ingress-basic nginx-ingress

W poniższym przykładzie pokazano, że wydanie o nazwie my-nginx-ingress zostało odinstalowane:

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

release "nginx-ingress" uninstalled

Aby usunąć całą przykładową przestrzeń nazw, użyj kubectl delete polecenia i określ nazwę przestrzeni nazw. Wszystkie zasoby w przestrzeni nazw zostaną usunięte.

kubectl delete namespace ingress-basic

Następne kroki

Aby uzyskać więcej informacji na temat zarządzania wdrożeniami aplikacji Kubernetes za pomocą programu Helm, zobacz dokumentację programu Helm.