Alkalmazások üzembe helyezése a Helm-lel

A következőkre vonatkozik: AKS Windows Serveren

A Helm egy nyílt forráskódú csomagolóeszköz, amely segít a Kubernetes-alkalmazások életciklusának telepítésében és kezelésében. A Linux-csomagkezelőkhöz, például az APT-hez és a Yumhoz hasonlóan a Helm kezeli a Kubernetes-diagramokat, amelyek előre konfigurált Kubernetes-erőforrások csomagjai.

Ez a cikk azt ismerteti, hogyan használhatja a Helmet alkalmazások csomagolására és üzembe helyezésére az AKS-ben, ha az AKS-t Windows Serveren használja.

Mielőtt hozzákezdene

Ellenőrizze, hogy a következő követelmények vannak-e beállítva:

  • Egy Kubernetes-fürt, amely legalább egy üzemelő Windows- vagy Linux-munkavégző csomóponttal rendelkezik.
  • A helyi kubectl környezetet úgy konfigurálta, hogy a klaszterre mutasson. Get-AksHciCredential PowerShell paranccsal elérheti a fürtöt a kubectl használatával.
  • Helm v3 parancssor és a telepített előfeltételek.
  • Elérhető tárolóregisztrációs adatbázis, például DockerHub vagy Azure Container Registry.

Ez a cikk egy ASP.NET Core alkalmazást használ példaként. A mintaalkalmazást ebből a GitHub adattárból töltheti le.

Mivel az alkalmazás a Kubernetesben van üzembe helyezve, a következő példa egy egyszerű Dockerfile a projekthez:

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"]

A mintaalkalmazás létrehozása és leküldése egy tárolóregisztrációs adatbázisba

Lépjen az alkalmazásmappára, és a Dockerfile használatával hozzon létre és küldjön le egy képet az alábbi paranccsal:

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

Note

A parancs végén lévő pont (.) beállítja a Dockerfile helyét (ebben az esetben az aktuális könyvtárat).

Ez a parancs létrehozza a rendszerképet mymicroservice:0.1.0 a helyi gépen. A rendszerkép sikeres létrehozásának ellenőrzéséhez futtassa docker images a következőt:

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

Ezután küldje le a rendszerképet egy tárolóregisztrációs adatbázisba, például a DockerHubra vagy Azure Container Registry. Ebben a példában a rendszerkép az Azure Container Registrybe lesz feltöltve. További információ: Képek lekérése ACR-ből Kubernetes-fürtbe:

docker push acr.azurecr.io/mymicroservice:0.1.0

A Helm-diagram létrehozása

Most, hogy a mintaalkalmazás elkészült, a következő lépés egy Helm-diagram létrehozása a parancs használatával, az helm create alábbiak szerint:

helm create mymicroserviceapp

Frissítse a mymicroserviceapp/values.yaml fájlt az alábbiak szerint:

  • Változtassa meg image.repository-t acr.azurecr.io/mymicroservice-re.
  • Változtassa meg service.type-t NodePort-re.

Például:

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

Lépjen a mymicroserviceapp/templates/deployment.yaml fájlra az állapot-ellenőrzések konfigurálásához. A Kubernetes állapotellenőrzésekkel kezeli az alkalmazástelepítéseket. Cserélje le a(z) liveness és readiness szondák elérési útját path: /weatherforecast értékre, ahogy az a következő példában látható:

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

Helm-diagram üzembe helyezése a Kubernetesben

A megoldáskönyvtárban található charts\mymicroserviceapp könyvtárból kiindulva futtassa a következő parancsot:

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

Ez a parancs létrehoz egy meglévő kiadást, vagy frissíti azt local néven a Kubernetes-fürt mymicroserviceapp nevű névterében, és az alábbi példához hasonló kimenetet ad:

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

A Helm-diagram üzembe helyezése után a futtatással kubectl get all -n localellenőrizheti, hogy az erőforrások megfelelően lettek-e üzembe helyezve.

A parancs futtatásának kimenete a következő:

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

Az üzembe helyezés tesztelése

Az alkalmazás egy szolgáltatással és egy NodePorttal együtt kerül telepítésre, így a fürtön kívülről is meghívhatja az API-t. A hívás indításához küldjön egy kérést a következő címre: 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

A klaszter megtisztítása

Az utolsó lépés a fürt megtisztítása. A Kubernetes üzembehelyezési erőforrásainak törléséhez futtassa a következő parancsot:

helm uninstall mymicroserviceapp -n local

A következő példához hasonló kimenetet kell kapnia:

release "mymicroserviceapp" uninstalled

Következő lépések