Bagikan melalui


Menyebarkan aplikasi dengan Helm

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Helm adalah alat pengemasan sumber terbuka yang membantu Anda memasang dan mengelola siklus hidup aplikasi Kubernetes. Mirip dengan manajer paket Linux, seperti APT dan Yum, Helm mengelola bagan Kubernetes, yang merupakan paket sumber daya Kubernetes yang telah dikonfigurasi sebelumnya.

Artikel ini menjelaskan cara menggunakan Helm untuk mengemas dan menyebarkan aplikasi di AKS saat Anda menggunakan Azure Kubernetes Service yang diaktifkan oleh Azure Arc.

Sebelum Anda mulai

Pastikan Anda sudah menyiapkan persyaratan berikut:

  • Kluster Kubernetes dengan setidaknya satu simpul pekerja Windows atau Linux yang aktif dan berjalan.
  • Anda mengonfigurasi lingkungan lokal kubectl untuk menunjuk ke kluster Anda. Anda dapat menggunakan perintah PowerShell Get-AksHciCredential untuk mengakses kluster Anda menggunakan kubectl.
  • Baris perintah Helm v3 dan prasyarat yang dipasang.
  • Registri kontainer yang tersedia, seperti DockerHub atau Azure Container Registry.

Artikel ini menggunakan aplikasi ASP.NET Core sebagai contoh. Anda dapat mengunduh aplikasi contoh dari repositori GitHub ini.

Karena aplikasi disebarkan ke Kubernetes, contoh berikut adalah Dockerfile sederhana untuk proyek:

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

Membangun dan mendorong aplikasi contoh ke registri kontainer

Navigasikan ke folder aplikasi dan gunakan Dockerfile untuk membangun dan mendorong gambar menggunakan perintah berikut:

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

Catatan

Titik (.) di akhir perintah mengatur lokasi Dockerfile (dalam hal ini yaitu direktori saat ini).

Perintah ini membuat gambar mymicroservice:0.1.0 pada komputer lokal. Untuk memverifikasi bahwa gambar berhasil dibuat, jalankan docker images untuk mengonfirmasi:

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

Selanjutnya, dorong gambar Anda ke registri kontainer, seperti DockerHub atau Azure Container Registry. Dalam contoh ini, gambar kontainer didorong ke Azure Container Registry. Untuk informasi selengkapnya, lihat Menarik gambar dari ACR ke kluster Kubernetes:

docker push acr.azurecr.io/mymicroservice:0.1.0

Membuat bagan Helm Anda

Sekarang setelah aplikasi sampel siap, langkah selanjutnya adalah menghasilkan bagan Helm menggunakan helm create perintah , sebagai berikut:

helm create mymicroserviceapp

Perbarui mymicroserviceapp/values.yaml, sebagai berikut:

  • Ubah image.repository ke acr.azurecr.io/mymicroservice.
  • Ubah service.type ke NodePort.

Contohnya:

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

Navigasi ke file mymicroserviceapp/templates/deployment.yaml untuk mengonfigurasi pemeriksaan kesehatan. Kubernetes menggunakan pemeriksaan kesehatan untuk mengelola penyebaran aplikasi Anda. Ganti jalur ke kedua liveness dan readiness probe dengan path: /weatherforecast, seperti yang ditunjukkan dalam contoh berikut:

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

Menyebarkan bagan helm ke Kubernetes

Mulai dari direktori charts\mymicroserviceapp di direktori solusi, jalankan perintah berikut:

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

Perintah ini membuat (atau meningkatkan) rilis yang ada menggunakan nama mymicroserviceapp di local namespace di kluster Kubernetes, dan menghasilkan output yang mirip dengan contoh ini:

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

Setelah Anda menyebarkan bagan Helm, Anda dapat memeriksa bahwa sumber daya disebarkan dengan benar dengan menjalankan kubectl get all -n local.

Output dari menjalankan perintah adalah:

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

Menguji penyebaran Anda

Aplikasi ini disebarkan dengan layanan dan port node, sehingga Anda dapat memanggil API dari luar kluster. Untuk melakukan panggilan ini, kirim permintaan ke: 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

Membersihkan kluster

Langkah terakhir adalah membersihkan kluster. Untuk menghapus sumber daya penyebaran Kubernetes, jalankan perintah berikut:

helm uninstall mymicroserviceapp -n local

Anda harus mendapatkan output yang mirip dengan contoh berikut:

release "mymicroserviceapp" uninstalled

Langkah berikutnya