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 menggunakankubectl
. - 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
keacr.azurecr.io/mymicroservice
. - Ubah
service.type
keNodePort
.
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