Implementación de aplicaciones con Helm
Se aplica a: AKS en Azure Stack HCI 22H2, AKS en Windows Server
Helm es una herramienta de empaquetado de código abierto que ayuda a instalar y administrar el ciclo de vida de las aplicaciones de Kubernetes. Al igual que los administradores de paquetes de Linux, como APT y Yum, Helm administra los gráficos de Kubernetes, que son paquetes de recursos de Kubernetes preconfigurados.
En este artículo se describe cómo usar Helm para empaquetar e implementar aplicaciones en AKS cuando se usa Azure Kubernetes Service habilitado por Azure Arc.
Antes de empezar
Compruebe que tiene configurados los requisitos siguientes:
- Un clúster de Kubernetes con al menos un nodo de trabajo de Windows o Linux que esté en funcionamiento.
- Configuró el entorno local
kubectl
para que apunte al clúster. Puede usar el comando de PowerShell Get-AksHciCredential para acceder al clúster mediantekubectl
. - La línea de comandos y los requisitos previos de Helm v3 instalados.
- Un registro de contenedor disponible, como DockerHub o Azure Container Registry.
En este artículo se usa una aplicación ASP.NET Core como ejemplo. Puede descargar la aplicación de ejemplo de este repositorio de GitHub.
Dado que la aplicación se implementa en Kubernetes, el ejemplo siguiente es un Dockerfile sencillo para el proyecto:
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"]
Creación e inserción de la aplicación de ejemplo en un registro de contenedor
Vaya a la carpeta de la aplicación y use el archivo Dockerfile para crear e insertar una imagen con el siguiente comando:
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Nota:
El punto (.) al final del comando establece la ubicación del archivo Dockerfile (en este caso, el directorio actual).
Este comando crea la imagen mymicroservice:0.1.0
en el equipo local. Para comprobar que la imagen se creó correctamente, ejecute para confirmar lo siguiente docker images
:
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
A continuación, inserte la imagen en un registro de contenedor, como DockerHub o Azure Container Registry. En este ejemplo, la imagen de contenedor se inserta en Azure Container Registry. Para más información, consulte Extracción de imágenes de un ACR a un clúster de Kubernetes:
docker push acr.azurecr.io/mymicroservice:0.1.0
Creación del gráfico de Helm
Ahora que la aplicación de ejemplo está lista, el siguiente paso es generar un gráfico de Helm mediante el helm create
comando , como se indica a continuación:
helm create mymicroserviceapp
Actualice mymicroserviceapp/values.yaml, como se indica a continuación:
- Cambie
image.repository
aacr.azurecr.io/mymicroservice
. - Cambie
service.type
aNodePort
.
Por ejemplo:
# 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
...
Vaya al archivo mymicroserviceapp/templates/deployment.yaml para configurar las comprobaciones de estado. Kubernetes usa comprobaciones de estado para administrar las implementaciones de aplicaciones. Reemplace la ruta de acceso a los sondeos y liveness
readiness
por path: /weatherforecast
, como se muestra en el ejemplo siguiente:
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Implementación del gráfico de Helm en Kubernetes
A partir del directorio charts\mymicroserviceapp del directorio de la solución, ejecute el siguiente comando:
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
Este comando crea (o actualiza) una versión existente con el nombre mymicroserviceapp
en el local
espacio de nombres del clúster de Kubernetes y genera una salida similar a la de este ejemplo:
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
Después de implementar el gráfico de Helm, puede comprobar que los recursos se implementaron correctamente ejecutando kubectl get all -n local
.
La salida de la ejecución del comando es:
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
Prueba de la implementación
La aplicación se implementa con un puerto de nodo y un servicio, por lo que puede llamar a la API desde fuera del clúster. Para realizar esta llamada, envíe una solicitud a: 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
Limpieza del clúster
El último paso es limpiar el clúster. Para eliminar los recursos de implementación de Kubernetes, ejecute el siguiente comando:
helm uninstall mymicroserviceapp -n local
Debe obtener una salida similar al siguiente ejemplo:
release "mymicroserviceapp" uninstalled