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 tworzenia pakietów i wdrażania aplikacji w usłudze AKS przy użyciu usługi Azure Kubernetes Service włączonej przez usługę Azure Arc.
Zanim rozpoczniesz
Sprawdź, czy masz skonfigurowane następujące wymagania:
- Klaster Kubernetes z co najmniej jednym węzłem roboczym 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 poleceniakubectl
. - Zainstalowany wiersz polecenia i wymagania wstępne programu Helm w wersji 3 .
- Dostępny rejestr kontenerów, taki jak DockerHub lub Azure Container Registry.
W tym artykule użyto aplikacji ASP.NET Core jako przykładu. Przykładową aplikację można pobrać z tego repozytorium GitHub.
Ponieważ aplikacja jest wdrażana na platformie Kubernetes, poniższy przykład to prosty plik 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 usługi Azure Container Registry. 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 programu 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ń
image.repository
naacr.azurecr.io/mymicroservice
. - Zmień
service.type
naNodePort
.
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ć kontrole kondycji. Platforma Kubernetes używa kontroli kondycji do zarządzania wdrożeniami aplikacji. Zastąp path: /weatherforecast
ścieżkę do parametrów liveness
i readiness
, jak 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 na platformie 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 uruchomienia 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 przy użyciu 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 wdrażania 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