Развертывание приложений с помощью Helm
Область применения: AKS в Azure Stack HCI 22H2, AKS на Windows Server
Helm — это средство упаковки с открытым кодом, которое помогает установить приложения Kubernetes и управлять их жизненным циклом. Как и диспетчеры пакетов Linux, такие как APT и Yum, Helm управляет диаграммами Kubernetes, которые являются пакетами предварительно настроенных ресурсов Kubernetes.
В этой статье описывается, как использовать Helm для упаковки и развертывания приложений в AKS при использовании Служба Azure Kubernetes включенной Azure Arc.
Подготовка к работе
Убедитесь, что настроены следующие требования:
- Кластер Kubernetes с по крайней мере одним рабочим узлом Windows или Linux, работающим и работающим.
- Вы настроили локальную
kubectl
среду, чтобы указать кластер. Для доступа к кластеруkubectl
можно использовать команду Get-AksHciCredential PowerShell. - Установленная командная строка Helm версии 3 и предварительные требования.
- Доступный реестр контейнеров, например DockerHub или Реестр контейнеров Azure.
В этой статье в качестве примера используется приложение ASP.NET Core. Пример приложения можно скачать из этого репозитория GitHub.
Так как приложение развертывается в Kubernetes, следующий пример — это простой файл Dockerfile для проекта:
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"]
Создание и отправка примера приложения в реестр контейнеров
Перейдите в папку приложения и используйте Dockerfile для сборки и отправки образа с помощью следующей команды:
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Примечание.
Период (.) в конце команды задает расположение Dockerfile (в данном случае текущий каталог).
Эта команда создает образ mymicroservice:0.1.0
на локальном компьютере. Чтобы убедиться, что образ был успешно создан, выполните команду docker images
, чтобы подтвердить:
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
Затем отправьте образ в реестр контейнеров, например DockerHub или Реестр контейнеров Azure. В этом примере образ контейнера отправляется в Реестр контейнеров Azure. Дополнительные сведения см. в статье "Извлечение изображений из ACR в кластер Kubernetes"
docker push acr.azurecr.io/mymicroservice:0.1.0
Создание чарта Helm
Теперь, когда пример приложения готов, следующий шаг — создать диаграмму Helm с помощью helm create
команды следующим образом:
helm create mymicroserviceapp
Обновите mymicroserviceapp/values.yaml следующим образом:
- Измените
image.repository
наacr.azurecr.io/mymicroservice
. - Измените
service.type
наNodePort
.
Например:
# 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
...
Перейдите к файлу mymicroserviceapp/templates/deployment.yaml , чтобы настроить проверки работоспособности. Kubernetes использует проверки работоспособности для управления развертываниями приложений. Замените путь к обоим liveness
и readiness
пробам path: /weatherforecast
, как показано в следующем примере:
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Развертывание диаграммы Helm в Kubernetes
Начиная с каталога chart\mymicroserviceapp в каталоге решения выполните следующую команду:
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
Эта команда создает (или обновляет) существующий выпуск с помощью имени mymicroserviceapp
в пространстве имен в local
кластере Kubernetes и создает выходные данные, аналогичные этому примеру:
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
После развертывания диаграммы Helm можно проверить правильность развертывания ресурсов с помощью запуска kubectl get all -n local
.
Выходные данные выполнения команды:
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
Выполните тестирование развертывания
Приложение развертывается с помощью службы и порта узла, чтобы можно было вызвать API извне кластера. Чтобы сделать этот вызов, отправьте запрос по адресу 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
Очистка кластера
Последний шаг — очистка кластера. Чтобы удалить ресурсы развертывания Kubernetes, выполните следующую команду:
helm uninstall mymicroserviceapp -n local
Вы должны получить выходные данные, аналогичные следующему примеру:
release "mymicroserviceapp" uninstalled