Implante aplicativos com o Helm
Aplica-se a: AKS no Azure Stack HCI 22H2, AKS no Windows Server
O Helm é uma ferramenta de empacotamento de código aberto que ajuda você a instalar e gerenciar o ciclo de vida dos aplicativos Kubernetes. Semelhante aos gerenciadores de pacotes Linux, como APT e Yum, o Helm gerencia gráficos Kubernetes, que são pacotes de recursos Kubernetes pré-configurados.
Este artigo descreve como usar o Helm para empacotar e implantar aplicativos no AKS quando você estiver usando o Serviço Kubernetes do Azure habilitado pelo Azure Arc.
Antes de começar
Verifique se você tem os seguintes requisitos configurados:
- Um cluster Kubernetes com pelo menos um nó de trabalho Windows ou Linux em execução.
- Você configurou seu ambiente local
kubectl
para apontar para o cluster. Você pode usar o comando Get-AksHciCredential PowerShell para acessar seu cluster usandokubectl
o . - Linha de comando Helm v3 e pré-requisitos instalados.
- Um registro de contêiner disponível, como o DockerHub ou o Azure Container Registry.
Este artigo usa um aplicativo ASP.NET Core como exemplo. Você pode baixar o aplicativo de exemplo deste repositório GitHub.
Como o aplicativo é implantado no Kubernetes, o exemplo a seguir é um Dockerfile simples para o projeto:
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"]
Criar e enviar o aplicativo de exemplo para um registro de contêiner
Navegue até a pasta do aplicativo e use o Dockerfile para criar e enviar por push uma imagem usando o seguinte comando:
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Nota
O ponto (.) no final do comando define o local do Dockerfile (neste caso, o diretório atual).
Este comando cria a imagem mymicroservice:0.1.0
na máquina local. Para verificar se a imagem foi criada com êxito, execute docker images
para confirmar:
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
Em seguida, envie sua imagem para um registro de contêiner, como o DockerHub ou o Azure Container Registry. Neste exemplo, a imagem do contêiner é enviada por push para o Registro de Contêiner do Azure. Para obter mais informações, consulte Extrair imagens de um ACR para um cluster Kubernetes:
docker push acr.azurecr.io/mymicroservice:0.1.0
Crie seu gráfico de leme
Agora que o aplicativo de exemplo está pronto, a próxima etapa é gerar um gráfico Helm usando o helm create
comando, da seguinte maneira:
helm create mymicroserviceapp
Atualize mymicroserviceapp/values.yaml, da seguinte forma:
- Altere
image.repository
paraacr.azurecr.io/mymicroservice
. - Altere
service.type
paraNodePort
.
Por exemplo:
# 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
...
Navegue até o arquivo mymicroserviceapp/templates/deployment.yaml para configurar verificações de integridade. O Kubernetes usa verificações de integridade para gerenciar suas implantações de aplicativos. Substitua o caminho para ambos liveness
e readiness
os testes por path: /weatherforecast
, conforme mostrado no exemplo a seguir:
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Implante seu gráfico de leme no Kubernetes
A partir do diretório charts\mymicroserviceapp no diretório da solução, execute o seguinte comando:
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
Este comando cria (ou atualiza) uma versão existente usando o nome mymicroserviceapp
no local
namespace no cluster do Kubernetes e produz uma saída semelhante a este exemplo:
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
Depois de implantar o gráfico Helm, você pode verificar se os recursos foram implantados corretamente executando kubectl get all -n local
o .
A saída da execução do comando é:
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
Teste sua implantação
O aplicativo é implantado com um serviço e uma porta de nó, para que você possa chamar a API de fora do cluster. Para fazer esta chamada, envie uma solicitação para: 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
Limpar o cluster
A etapa final é limpar o cluster. Para excluir recursos de implantação do Kubernetes, execute o seguinte comando:
helm uninstall mymicroserviceapp -n local
Você deve obter uma saída semelhante ao exemplo a seguir:
release "mymicroserviceapp" uninstalled