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:
- En az bir Windows veya Linux çalışan düğümü bulunan ve çalışır durumda olan bir Kubernetes kümesi.
- Yerel
kubectl
ortamınızı kümenize işaret eden şekilde yapılandırmışsınız. Kullanarak kümenizekubectl
erişmek için Get-AksHciCredential PowerShell komutunu kullanabilirsiniz. - Helm v3 komut satırı ve önkoşullar yüklü.
- DockerHub veya Azure Container Registry gibi kullanılabilir bir kapsayıcı kayıt defteri.
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ğeriniacr.azurecr.io/mymicroservice
olarak değiştirin.service.type
değeriniNodePort
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: /weatherforecast
değ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 local
kaynakları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