Wdrażanie aplikacji za pomocą programu Helm

Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server

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

W tym artykule opisano sposób używania programu Helm do tworzenia pakietów i wdrażania aplikacji w usłudze AKS podczas korzystania z Azure Kubernetes Service włączonej przez usługę Azure Arc.

Zanim rozpoczniesz

Sprawdź, czy zostały skonfigurowane następujące wymagania:

  • Klaster Kubernetes z co najmniej jednym węzłem procesu roboczego systemu Windows lub Linux, który jest uruchomiony.
  • Skonfigurowano środowisko lokalne kubectl tak, aby wskazywało klaster. Aby uzyskać dostęp do klastra, możesz użyć polecenia Get-AksHciCredential Programu PowerShell przy użyciu polecenia kubectl.
  • Zainstalowany wiersz polecenia programu Helm w wersji 3 i wymagania wstępne.
  • Dostępny rejestr kontenerów, taki jak DockerHub lub Azure Container Registry.

W tym temacie aplikacja ASP.NET Core jest używana jako przykład. Przykładową aplikację można pobrać z tego repozytorium GitHub.

Ponieważ aplikacja jest wdrażana na platformie Kubernetes, poniższy przykład jest prostym plikiem Dockerfile dla projektu:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /src
COPY ["MyMicroservice.csproj", "./"]
RUN dotnet restore "MyMicroservice.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyMicroservice.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyMicroservice.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]

Kompilowanie i wypychanie przykładowej aplikacji do rejestru kontenerów

Przejdź do folderu aplikacji i użyj pliku Dockerfile, aby skompilować i wypchnąć obraz przy użyciu następującego polecenia:

docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .

Uwaga

Kropka (.) na końcu polecenia ustawia lokalizację pliku Dockerfile (w tym przypadku bieżący katalog).

To polecenie tworzy obraz mymicroservice:0.1.0 na komputerze lokalnym. Aby sprawdzić, czy obraz został pomyślnie utworzony, uruchom polecenie docker images , aby potwierdzić.

REPOSITORY              TAG     IMAGE ID       CREATED            SIZE  
acr.azurecr.io/mymicroservice 0.1.0   5be713db571b   About a minute ago 107MB
....

Następnie wypchnij obraz do rejestru kontenerów, takiego jak DockerHub lub Azure Container Registry. W tym przykładzie obraz kontenera jest wypychany do Azure Container Registry (ACR). Aby uzyskać więcej informacji, zobacz Ściąganie obrazów z usługi ACR do klastra Kubernetes.

docker push acr.azurecr.io/mymicroservice:0.1.0

Tworzenie wykresu helm

Teraz, gdy przykładowa aplikacja jest gotowa, następnym krokiem jest wygenerowanie wykresu helm create helm przy użyciu polecenia w następujący sposób:

helm create mymicroserviceapp

Zaktualizuj plik mymicroserviceapp/values.yaml w następujący sposób:

  • Zmień wartość image.repository na acr.azurecr.io/mymicroservice.
  • Zmień wartość service.type na NodePort.

Na przykład:

# Default values for webfrontend.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: acr.azurecr.io/mymicroservice
  pullPolicy: IfNotPresent
...
service:
  type: NodePort
  port: 80
...

Przejdź do pliku mymicroserviceapp/templates/deployment.yaml , aby skonfigurować testy kondycji. Platforma Kubernetes używa kontroli kondycji do zarządzania wdrożeniami aplikacji. Zastąp ścieżkę do parametru liveness i readiness sondami , path: /weatherforecastjak pokazano w poniższym przykładzie:

...
 livenessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    initialDelaySeconds: 0
    periodSeconds: 10
    timeoutSeconds: 1
    failureThreshold: 3
 readinessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    successThreshold: 3
...

Wdrażanie wykresu helm w usłudze Kubernetes

Począwszy od katalogu charts\mymicroserviceapp w katalogu rozwiązania, uruchom następujące polecenie:

helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0" 

To polecenie tworzy (lub uaktualnia) istniejącą wersję przy użyciu nazwy mymicroserviceapp w przestrzeni nazw w local klastrze Kubernetes i generuje dane wyjściowe podobne do tego przykładu:

Release "mymicroserviceapp" does not exist. Installing it now.
NAME: mymicroserviceapp
LAST DEPLOYED: Fri Apr  2 08:47:24 2021
NAMESPACE: local
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace local -o jsonpath="{.spec.ports[0].nodePort}" services mymicroserviceapp)
  export NODE_IP=$(kubectl get nodes --namespace local -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

Po wdrożeniu wykresu programu Helm możesz sprawdzić, czy zasoby zostały prawidłowo wdrożone, uruchamiając polecenie kubectl get all -n local.

Dane wyjściowe z uruchamiania polecenia to:

NAME                                     READY   STATUS    RESTARTS   AGE
pod/mymicroserviceapp-7849f949df-fwgbn   1/1     Running   0          101s

NAME                        TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/mymicroserviceapp   NodePort   10.100.149.1   <none>        80:30501/TCP   101s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mymicroserviceapp   1/1     1            1           101s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/mymicroserviceapp-7849f949df   1         1         1       101s

Testowanie wdrożenia

Aplikacja jest wdrażana za pomocą usługi i portu węzła, dzięki czemu można wywołać interfejs API spoza klastra. Aby wykonać to wywołanie, wyślij żądanie do: http://$NODE_IP:$NODE_PORT:

curl http://10.193.2.103:30501/WeatherForeCast/
StatusCode        : 200
StatusDescription : OK
Content           : [{"date":"2021-04-03T15:51:04.795216+00:00","temperatureC":45,"temperatureF":112,"summary":"Balmy"},{"date":"2021-04-04T15:51:04.
                    7952176+00:00","temperatureC":23,"temperatureF":73,"summary":"Cool"},{"...
RawContent        : HTTP/1.1 200 OK
                    Transfer-Encoding: chunked
                    Content-Type: application/json; charset=utf-8
                    Date: Fri, 02 Apr 2021 15:51:04 GMT
                    Server: Kestrel

                    [{"date":"2021-04-03T15:51:04.795216+00:00","tempera...
Forms             : {}
Headers           : {[Transfer-Encoding, chunked], [Content-Type, application/json; charset=utf-8], [Date, Fri, 02 Apr 2021 15:51:04 GMT], [Server,
                    Kestrel]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 494

Czyszczenie klastra

Ostatnim krokiem jest wyczyszczenie klastra. Aby usunąć zasoby wdrożenia platformy Kubernetes, uruchom następujące polecenie:

helm uninstall mymicroserviceapp -n local

Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:

release "mymicroserviceapp" uninstalled

Następne kroki