Aracılığıyla paylaş


Helm ile uygulama dağıtma

Şunlar için geçerlidir: Azure Stack HCI 22H2 üzerinde AKS, Windows Server'da AKS

Helm , Kubernetes uygulamalarının yaşam döngüsünü yüklemenize ve yönetmenize yardımcı olan bir açık kaynak paketleme aracıdır. Helm, APT ve Yum gibi Linux paket yöneticilerine benzer şekilde, önceden yapılandırılmış Kubernetes kaynaklarının paketleri olan Kubernetes grafiklerini yönetir.

Bu makalede, Azure Arc tarafından etkinleştirilen Azure Kubernetes Service kullanırken AKS'de uygulamaları paketlemek ve dağıtmak için Helm'in nasıl kullanılacağı açıklanmaktadır.

Başlamadan önce

Aşağıdaki gereksinimleri ayarladığınızdan emin olun:

Bu makalede örnek olarak bir ASP.NET Core uygulaması kullanılır. Örnek uygulamayı bu GitHub deposundan indirebilirsiniz.

Uygulama Kubernetes'e dağıtıldığından, aşağıdaki örnek proje için basit bir Dockerfile örneğidir:

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"]

Örnek uygulamayı derleme ve kapsayıcı kayıt defterine gönderme

Aşağıdaki komutu kullanarak bir görüntü oluşturmak ve göndermek için uygulama klasörüne gidin ve Dockerfile dosyasını kullanın:

docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .

Not

Komutun sonundaki nokta (.), Dockerfile'ın konumunu (bu örnekte geçerli dizin) ayarlar.

Bu komut görüntüyü mymicroservice:0.1.0 yerel makinede oluşturur. Görüntünün başarıyla oluşturulduğunu doğrulamak için komutunu çalıştırarak docker images şunu doğrulayın:

REPOSITORY              TAG     IMAGE ID       CREATED            SIZE  
acr.azurecr.io/mymicroservice 0.1.0   5be713db571b   About a minute ago 107MB
....

Ardından görüntünüzü DockerHub veya Azure Container Registry gibi bir kapsayıcı kayıt defterine gönderin. Bu örnekte kapsayıcı görüntüsü Azure Container Registry'ye gönderilir. Daha fazla bilgi için bkz . ACR'den Kubernetes kümesine görüntü çekme:

docker push acr.azurecr.io/mymicroservice:0.1.0

Helm grafiğinizi oluşturma

Örnek uygulama hazır olduğuna göre, sonraki adım komutunu kullanarak helm create aşağıdaki gibi bir Helm grafiği oluşturmaktır:

helm create mymicroserviceapp

mymicroserviceapp/values.yaml dosyasını aşağıdaki gibi güncelleştirin:

  • image.repository değerini acr.azurecr.io/mymicroservice olarak değiştirin.
  • service.type değerini NodePort olarak değiştirin.

Örneğin:

# 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
...

Sistem durumu denetimlerini yapılandırmak için mymicroserviceapp/templates/deployment.yaml dosyasına gidin. Kubernetes, uygulama dağıtımlarınızı yönetmek için sistem durumu denetimlerini kullanır. Aşağıdaki örnekte gösterildiği gibi hem hem de liveness readiness yoklamalarının yolunu ile path: /weatherforecastdeğiştirin:

...
 livenessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    initialDelaySeconds: 0
    periodSeconds: 10
    timeoutSeconds: 1
    failureThreshold: 3
 readinessProbe:
    httpGet:
      path: /weatherforecast
      port: http
    successThreshold: 3
...

Helm grafiğinizi Kubernetes'e dağıtma

Çözüm dizinindeki charts\mymicroserviceapp dizininden başlayarak aşağıdaki komutu çalıştırın:

helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0" 

Bu komut, Kubernetes kümesindeki ad alanında yer alan local adı mymicroserviceapp kullanarak var olan bir sürümü oluşturur (veya yükseltir) ve şu örneğe benzer bir çıkış oluşturur:

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 grafiğini dağıttıktan sonra, çalıştırarak kubectl get all -n localkaynakların doğru dağıtıldığını de kontrol edebilirsiniz.

komutu çalıştırılan çıkış şöyledir:

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

Dağıtımınızı test edin

Uygulama bir hizmet ve düğüm bağlantı noktası ile dağıtılır, böylece API'yi kümenin dışından çağırabilirsiniz. Bu çağrıyı yapmak için şu adresine bir istek gönderin: 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

Kümeyi temizleme

Son adım, kümeyi temizlemektir. Kubernetes dağıtım kaynaklarını silmek için aşağıdaki komutu çalıştırın:

helm uninstall mymicroserviceapp -n local

Aşağıdaki örneğe benzer bir çıktı almalısınız:

release "mymicroserviceapp" uninstalled

Sonraki adımlar