Toepassingen implementeren met Helm
Van toepassing op: AKS in Azure Local 22H2, AKS op Windows Server
Helm is een opensource-pakketprogramma waarmee u de levenscyclus van Kubernetes-toepassingen kunt installeren en beheren. Helm beheert Kubernetes-grafieken, zoals APT en Yum, net als Linux-pakketbeheerders, pakketten met vooraf geconfigureerde Kubernetes-resources.
In dit artikel wordt beschreven hoe u Helm gebruikt om toepassingen in AKS te verpakken en te implementeren wanneer u Azure Kubernetes Service gebruikt die is ingeschakeld door Azure Arc.
Voordat u begint
Controleer of u de volgende vereisten hebt ingesteld:
- Een Kubernetes-cluster met ten minste één Windows- of Linux-werkknooppunt dat actief is.
- U hebt uw lokale
kubectl
omgeving zo geconfigureerd dat deze verwijst naar uw cluster. U kunt de Opdracht Get-AksHciCredential PowerShell gebruiken om toegang te krijgen tot uw cluster met behulp vankubectl
. - Helm v3-opdrachtregel en -vereisten geïnstalleerd.
- Een beschikbaar containerregister, zoals DockerHub of Azure Container Registry.
In dit artikel wordt een ASP.NET Core-toepassing gebruikt als voorbeeld. U kunt de voorbeeldtoepassing downloaden vanuit deze GitHub-opslagplaats.
Omdat de toepassing is geïmplementeerd in Kubernetes, is het volgende voorbeeld een eenvoudig Dockerfile voor het project:
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"]
De voorbeeldtoepassing bouwen en pushen naar een containerregister
Navigeer naar de toepassingsmap en gebruik het Dockerfile om een installatiekopieën te bouwen en te pushen met behulp van de volgende opdracht:
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Notitie
Met de punt (.) aan het einde van de opdracht wordt de locatie van het Dockerfile ingesteld (in dit geval de huidige map).
Met deze opdracht maakt u de installatiekopieën mymicroservice:0.1.0
op de lokale computer. Voer de volgende opdracht docker images
uit om te controleren of de installatiekopieën zijn gemaakt:
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
Push vervolgens uw installatiekopieën naar een containerregister, zoals DockerHub of Azure Container Registry. In dit voorbeeld wordt de containerinstallatiekopieën gepusht naar Azure Container Registry. Zie Pull-installatiekopieën van een ACR naar een Kubernetes-cluster voor meer informatie:
docker push acr.azurecr.io/mymicroservice:0.1.0
Uw Helm-grafiek maken
Nu de voorbeeldtoepassing gereed is, is de volgende stap het genereren van een Helm-grafiek met behulp van de helm create
opdracht als volgt:
helm create mymicroserviceapp
Werk mymicroserviceapp/values.yaml als volgt bij:
- Wijzig
image.repository
inacr.azurecr.io/mymicroservice
. - Wijzig
service.type
inNodePort
.
Voorbeeld:
# 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
...
Navigeer naar het bestand mymicroserviceapp/templates/deployment.yaml om statuscontroles te configureren. Kubernetes maakt gebruik van statuscontroles om uw toepassingsimplementaties te beheren. Vervang het pad naar beide liveness
en readiness
tests door path: /weatherforecast
, zoals wordt weergegeven in het volgende voorbeeld:
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Uw Helm-grafiek implementeren in Kubernetes
Voer vanaf de map charts\mymicroserviceapp in de oplossingsmap de volgende opdracht uit:
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
Met deze opdracht wordt een bestaande release gemaakt (of bijgewerkt) met behulp van de naam mymicroserviceapp
in de local
naamruimte in het Kubernetes-cluster en wordt uitvoer geproduceerd die vergelijkbaar is met dit voorbeeld:
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
Nadat u de Helm-grafiek hebt geïmplementeerd, kunt u controleren of de resources correct zijn geïmplementeerd door uit te voeren kubectl get all -n local
.
De uitvoer van het uitvoeren van de opdracht is:
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
Uw implementatie testen
De toepassing wordt geïmplementeerd met een service en een knooppuntpoort, zodat u de API van buiten het cluster kunt aanroepen. Als u deze aanroep wilt doen, verzendt u een aanvraag naar: 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
Het cluster opschonen
De laatste stap is het opschonen van het cluster. Voer de volgende opdracht uit om Kubernetes-implementatiebronnen te verwijderen:
helm uninstall mymicroserviceapp -n local
U moet uitvoer krijgen die vergelijkbaar is met het volgende voorbeeld:
release "mymicroserviceapp" uninstalled