Distribuera program med Helm
Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server
Helm är ett paketeringsverktyg med öppen källkod som hjälper dig att installera och hantera livscykeln för Kubernetes-program. Precis som Linux-pakethanterare, till exempel APT och Yum, hanterar Helm Kubernetes-diagram, som är paket med förkonfigurerade Kubernetes-resurser.
Den här artikeln beskriver hur du använder Helm för att paketera och distribuera program i AKS när du använder Azure Kubernetes Service som aktiveras av Azure Arc.
Innan du börjar
Kontrollera att du har konfigurerat följande krav:
- Ett Kubernetes-kluster med minst en Windows- eller Linux-arbetsnod som är igång.
- Du har konfigurerat din lokala
kubectl
miljö så att den pekar på klustret. Du kan använda Kommandot Get-AksHciCredential PowerShell för att komma åt klustret med hjälp avkubectl
. - Helm v3-kommandorad och krav installerade.
- Ett tillgängligt containerregister, till exempel DockerHub eller Azure Container Registry.
Den här artikeln använder ett ASP.NET Core-program som exempel. Du kan ladda ned exempelprogrammet från den här GitHub-lagringsplatsen.
Eftersom programmet distribueras till Kubernetes är följande exempel en enkel Dockerfile för projektet:
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"]
Skapa och push-överföra exempelprogrammet till ett containerregister
Gå till programmappen och använd Dockerfile för att skapa och push-överföra en avbildning med följande kommando:
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Kommentar
Perioden (.) i slutet av kommandot anger platsen för Dockerfile (i det här fallet den aktuella katalogen).
Det här kommandot skapar avbildningen mymicroservice:0.1.0
på den lokala datorn. Kontrollera att avbildningen har skapats genom att köra docker images
för att bekräfta:
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
Skicka sedan avbildningen till ett containerregister, till exempel DockerHub eller Azure Container Registry. I det här exemplet skickas containeravbildningen till Azure Container Registry. Mer information finns i Hämta avbildningar från en ACR till ett Kubernetes-kluster:
docker push acr.azurecr.io/mymicroservice:0.1.0
Skapa ditt Helm-diagram
Nu när exempelprogrammet är klart är nästa steg att generera ett Helm-diagram med hjälp av helm create
kommandot enligt följande:
helm create mymicroserviceapp
Uppdatera mymicroserviceapp/values.yaml på följande sätt:
- Ändra
image.repository
tillacr.azurecr.io/mymicroservice
. - Ändra
service.type
tillNodePort
.
Till exempel:
# 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
...
Gå till filen mymicroserviceapp/templates/deployment.yaml för att konfigurera hälsokontroller. Kubernetes använder hälsokontroller för att hantera dina programdistributioner. Ersätt sökvägen till både liveness
och readiness
avsökningar med path: /weatherforecast
, som du ser i följande exempel:
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Distribuera ditt Helm-diagram till Kubernetes
Kör följande kommando från katalogen charts\mymicroserviceapp i lösningskatalogen:
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
Det här kommandot skapar (eller uppgraderar) en befintlig version med namnet mymicroserviceapp
i local
namnområdet i Kubernetes-klustret och genererar utdata som liknar det här exemplet:
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
När du har distribuerat Helm-diagrammet kan du kontrollera att resurserna har distribuerats korrekt genom att köra kubectl get all -n local
.
Utdata från att köra kommandot är:
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
Testa distributionen
Programmet distribueras med en tjänst och en nodport, så att du kan anropa API:et utanför klustret. Om du vill göra det här anropet skickar du en begäran till: 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
Rensa klustret
Det sista steget är att rensa klustret. Kör följande kommando för att ta bort Kubernetes-distributionsresurser:
helm uninstall mymicroserviceapp -n local
Du bör få utdata som liknar följande exempel:
release "mymicroserviceapp" uninstalled