Baca dalam bahasa Inggris

Bagikan melalui


Menyebarkan SpinKube ke Azure Kubernetes Service (AKS) untuk menjalankan beban kerja WebAssembly (Wasm) tanpa server

Artikel ini menunjukkan cara menyebarkan SpinKube ke Azure Kubernetes Service (AKS) untuk menjalankan beban kerja WebAssembly (Wasm) tanpa server.

Gambaran Umum

WebAssembly (Wasm) adalah format biner yang dioptimalkan untuk unduhan cepat dan kecepatan eksekusi hampir asli. Ini berjalan di kotak pasir yang diisolasi dari komputer host yang disediakan oleh runtime Wasm. Secara default, modul WebAssembly tidak dapat mengakses sumber daya, termasuk soket dan variabel lingkungan, pada host di luar kotak pasir kecuali jika diizinkan secara eksplisit. Standar WebAssembly System Interface (WASI) mendefinisikan sekumpulan antarmuka untuk runtime Wasm untuk menyediakan akses ke modul WebAssembly ke lingkungan dan sumber daya di luar host menggunakan model keamanan berbasis kemampuan.

SpinKube adalah proyek sumber terbuka yang menjalankan beban kerja Wasm tanpa server (Spin Apps) yang dibangun dengan Spin sumber terbuka di Kubernetes. Berbeda dengan runtime Wasm sebelumnya untuk Kubernetes, SpinKube menjalankan Spin Apps secara asli pada node Kubernetes yang mendasarinya dan tidak bergantung pada kontainer. Spin Apps adalah modul Wasm reguler yang selaras dengan spesifikasi Model Komponen WebAssembly.

Dengan menjalankan Spin Apps di Kubernetes dengan SpinKube, Anda dapat menjalankan beban kerja berikut:

  • Jalankan beban kerja Wasm di samping aplikasi kontainer yang ada.
  • Jalankan beban kerja serupa sambil menggunakan lebih sedikit sumber daya.
  • Jalankan lebih banyak beban kerja pada sekumpulan sumber daya tertentu.
  • Jalankan beban kerja pada arsitektur yang berbeda (seperti amd64 dan arm64) tanpa mengkompilasi silangnya.

SpinKube terdiri dari dua komponen tingkat atas:

  • spin-operator: Operator Kubernetes yang memungkinkan penyebaran dan manajemen Aplikasi Spin dengan menggunakan sumber daya kustom.
  • kube plugin untuk spin: spin Plugin CLI yang memungkinkan pengguna untuk membuat perancah manifes penyebaran Kubernetes untuk Spin Apps.

Prasyarat

  • Azure CLI versi 2.64.0 atau yang lebih baru. Untuk menginstal atau meningkatkan, lihat Menginstal Azure CLI.
  • kubectl versi atau yang lebih 1.31.0 baru.
  • helm versi atau yang lebih 3.15.4 baru.
  • spin versi atau yang lebih 2.7.0 baru.
  • versi 21.6.2Node.js .
  • Kluster AKS yang sudah ada. Jika Anda tidak memilikinya, lihat Membuat kluster AKS.

Batasan

  • Simpul os-type Kubernetes harus Linux.
  • Anda tidak dapat menggunakan portal Azure untuk menyebarkan SpinKube ke kluster AKS.

Menyebarkan SpinKube ke kluster yang ada

Menyambungkan ke kluster AKS Anda

  • Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials.

    az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
    

Menyebarkan cert-manager

Jika Anda belum menyebarkan cert-manager ke kluster AKS, Anda dapat menginstalnya dengan menyebarkan Definisi Sumber Daya Kustom (CRD) yang diikuti oleh cert-manager bagan Helm yang disediakan melalui jetstack repositori.

  1. Sebarkan cert-manager bagan CRD dan Helm menggunakan kubectl apply perintah .

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yaml
    
  2. Tambahkan dan perbarui repositori Jetstack menggunakan helm repo add perintah dan helm repo update .

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    
  3. cert-manager Instal bagan Helm menggunakan helm install perintah .

    helm install \
      cert-manager jetstack/cert-manager --version v1.14.3 \
      --namespace cert-manager --create-namespace \
      --wait
    

Sebarkan runtime-class-manager (juga dikenal sebagai KWasm)

runtime-class-manager (juga dikenal sebagai KWasm) bertanggung jawab untuk menyebarkan dan mengelola containerd-shim pada simpul Kubernetes yang diinginkan.

  1. Tambahkan repositori KWasm Helm menggunakan helm repo add perintah .

    helm repo add kwasm http://kwasm.sh/kwasm-operator/
    
  2. Instal operator KWasm menggunakan helm install perintah .

    helm install \
      kwasm-operator kwasm/kwasm-operator \
      --namespace kwasm --create-namespace \
      --version 0.2.3 \
      --set kwasmOperator.installerImage=ghcr.io/spinkube/containerd-shim-spin/node-installer:v0.15.1
    

Memprovisikan containerd-shim-spin ke simpul Kubernetes

Setelah runtime-class-manager diinstal pada kluster AKS, Anda harus membuat anotasi simpul Kubernetes yang seharusnya dapat menjalankan Spin Apps dengan kwasm.sh/kwasm-node=true. Anda dapat menggunakan kubectl annotate node untuk membuat anotasi semua simpul atau hanya simpul tertentu di kluster AKS Anda. Dalam contoh ini, kami membuat anotasi semua simpul di kluster AKS dengan kwasm.sh/kwasm-node=true anotasi.

  1. Provisikan containerd-shim-spin ke semua simpul di kluster AKS menggunakan kubectl annotate node --all perintah .

    kubectl annotate node --all kwasm.sh/kwasm-node=true
    
  2. Setelah Anda membuat anotasi simpul Kubernetes, runtime-class-manager gunakan Pekerjaan Kubernetes untuk memodifikasi simpul yang diinginkan. Setelah penyebaran containerd-shim-spinberhasil , simpul diberi label dengan kwasm.sh/kwasm-provisioned label. Anda dapat memeriksa apakah simpul yang diinginkan memiliki label yang kwasm.sh/kwasm-provisioned ditetapkan menggunakan kubectl get nodes --show-labels perintah .

    kubectl get nodes --show-labels
    

Menyebarkan spin-operator

spin-operator Terdiri dari dua Definisi Sumber Daya Kustom (CRD) yang perlu Anda sebarkan ke kluster AKS Anda: RuntimeClass untuk spin dan SpinAppExecutor.

  1. Sebarkan CRD dan RuntimeClass untuk spin menggunakan kubectl apply perintah .

    kubectl apply -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.crds.yaml
    kubectl apply -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.runtime-class.yaml
    
  2. Sebarkan spin-operator menggunakan helm install perintah .

    helm install spin-operator --version 0.2.0 \
      --namespace spin-operator --create-namespace \
      --wait oci://ghcr.io/spinkube/charts/spin-operator
    
  3. SpinAppExecutor Buat di namespace default menggunakan kubectl apply perintah .

    kubectl apply -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.shim-executor.yaml
    

Menjalankan Aplikasi Spin di AKS

Di bagian ini, Anda memverifikasi penginstalan SpinKube dengan membuat Aplikasi Spin sederhana menggunakan spin CLI dan JavaScript.

Membuat Aplikasi Spin baru

  1. Buat Aplikasi Spin baru menggunakan spin new perintah dengan http-js templat.

    spin new -t http-js --accept-defaults hello-spinkube
    
  2. Ubah ke hello-spinkube direktori menggunakan cd perintah .

    cd hello-spinkube
    
  3. Instal dependensi menggunakan npm install perintah .

    npm install
    
  4. spin Gunakan CLI membuat aplikasi Hello, World dasar.

    spin build
    

Membuat registri kontainer dan mengautentikasi spin CLI

  1. Spin Apps di kemas sebagai artefak OCI dan didistribusikan melalui registri yang mematuhi OCI seperti Azure Container Registry (ACR). Buat instans ACR baru menggunakan az acr create perintah .

    az acr create --name <acr-name> --resource-group <resource-group-name> --location <location> --sku Basic --admin-enabled true
    
  2. Dapatkan titik akhir server masuk ACR dan kata sandi admin menggunakan az acr show perintah dan az acr credential show .

    ACR_LOGIN_SERVER=$(az acr show -n <acr-name> -g <resource-group-name> --query 'loginServer' -otsv)
    ACR_PASSWORD=$(az acr credential show -n <acr-name> -g <resource-group-name> --query 'passwords[0].value' -otsv)
    
  3. Autentikasi CLI Anda spin menggunakan spin registry login perintah .

    spin registry login -u $ACR_NAME -p $ACR_PASSWORD $ACR_LOGIN_SERVER
    

Mengemas, mendistribusikan, dan menyebarkan Aplikasi Spin

  1. Sekarang setelah spin CLI diautentikasi terhadap instans ACR, Anda dapat mengemas dan mendistribusikan <your acr login server>/<repository-name>:<tag> Aplikasi Spin menggunakan spin registry push perintah diikuti dengan referensi artefak OCI (yang mengikuti skema penamaan).

    spin registry push $ACR_LOGIN_SERVER/hello-spinkube:0.0.1
    
  2. Buat Rahasia Kubernetes jenis docker-registry untuk mereferensikan selama penyebaran Aplikasi Spin ke kluster AKS Anda menggunakan kubectl create secret perintah . Dalam contoh ini, rahasia diberi nama spinkube-on-aks.

    kubectl create secret docker-registry spinkube-on-aks \
      --docker-server=$ACR_LOGIN_SERVER \
      --docker-username=$ACR_NAME\
      --docker-password $ACR_PASSWORD
    
  3. Buat manifes penyebaran Kube yang diperlukan menggunakan spin kube scaffold perintah .

    spin kube scaffold --from $ACR_LOGIN_SERVER/hello-spinkube:0.0.1 -s spinkube-on-aks > spinapp.yaml
    

    File spinapp.yaml berisi instans SpinApp CRD yang telah dikonfigurasi sebelumnya, yang akan terlihat seperti ini:

    apiVersion: core.spinoperator.dev/v1alpha1
    kind: SpinApp
    metadata:
      name: hello-spinkube
    spec:
      image: "<your acr name>.azurecr.io/hello-spinkube:0.0.1"
      executor: containerd-shim-spin
      replicas: 2
      imagePullSecrets:
        - name: spinkube-on-aks
    
  4. Sebarkan Aplikasi Spin ke kluster AKS menggunakan kubectl apply perintah .

    kubectl apply -f spinapp.yaml
    

Menjelajahi Aplikasi Spin di AKS

Mengambil daftar Aplikasi Spin

  • Ambil daftar Spin Apps menggunakan kubectl get spinapps perintah .

    kubectl get spinapps
    
    NAME             READY   DESIRED   EXECUTOR
    hello-spinkube   2       2         containerd-shim-spin
    

Mengambil primitif Kubernetes yang dibuat oleh spin-operator

Setelah penyebaran, spin-operator membuat primitif Kubernetes yang mendasar seperti Layanan, Penyebaran, dan Pod yang sesuai.

  1. Ambil daftar layanan menggunakan kubectl get service perintah .

    kubectl get service
    
    NAME             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
    hello-spinkube   ClusterIP   10.43.35.78   <none>        80/TCP    24s
    
  2. Ambil daftar penyebaran menggunakan kubectl get deployment perintah .

    kubectl get deployment
    
    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    hello-spinkube   2/2     2            2           38s
    
  3. Ambil daftar pod menggunakan kubectl get pod perintah .

    kubectl get pod
    
    NAME                              READY   STATUS    RESTARTS   AGE
    hello-spinkube-5b8579448d-zmc6x   1/1     Running   0          51s
    hello-spinkube-5b8579448d-bhkp9   1/1     Running   0          51s
    

Memanggil Aplikasi Spin

Untuk memanggil Aplikasi Spin, Anda mengonfigurasi penerusan port ke layanan yang spin-operator disediakan oleh dan menggunakan curl untuk mengirim permintaan HTTP.

  1. Tetapkan penerusan port ke hello-spinkube layanan menggunakan kubectl port-forward perintah .

    kubectl port-forward svc/hello-spinkube 8080:80
    
    Forwarding from 127.0.0.1:8080 -> 80
    Forwarding from [::1]:8080 -> 80
    
  2. Buka instans terminal baru dan gunakan perintah berikut curl untuk mengirim permintaan HTTP ke localhost:8080.

    curl -iX GET localhost:8080
    
    HTTP/1.1 200 OK
    content-type: text/plain
    content-length: 17
    date: Tue, 28 May 2024 08:55:50 GMT
    Hello from JS-SDK
    

Membersihkan sumber daya

  1. Hapus Aplikasi Spin dari kluster AKS menggunakan kubectl delete perintah .

    kubectl delete spinapp hello-spinkube
    
  2. Hapus Docker-registry Secret (spinkube-on-aks) menggunakan kubectl delete secret perintah .

    kubectl delete secret spinkube-on-aks
    
  3. Hapus instans ACR yang Anda buat sebagai bagian dari tutorial ini menggunakan az acr delete perintah .

    az acr delete --name <acr-name> --resource-group <resource-group-name> --yes
    
  4. Hapus komponen SpinKube dari kluster AKS menggunakan perintah berikut.

    # Remove the spin-operator
    helm delete spin-operator --namespace spin-operator
    
    # Remove the SpinAppExecutor
    kubectl delete -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.shim-executor.yaml
    
    # Remove the RuntimeClass for Spin
    kubectl delete -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.runtime-class.yaml
    
    # Remove the SpinKube CRDs
    kubectl delete -f https://github.com/spinkube/spin-operator/releases/download/v0.2.0/spin-operator.crds.yaml
    
    # Remove runtime-class-manager (also known as KWasm)
    helm delete kwasm-operator --namespace kwasm
    
    # Remove cert-manager Helm Release
    helm delete cert-manager --namespace cert-manager
    
    # Remove cert-manager CRDs
    kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yaml
    

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara menyebarkan SpinKube ke Azure Kubernetes Service (AKS) untuk menjalankan beban kerja WebAssembly (Wasm) tanpa server. Untuk menyebarkan lebih banyak beban kerja di AKS, lihat artikel berikut ini: