Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo mostra como implantar o SpinKube no Serviço Kubernetes do Azure (AKS) para executar cargas de trabalho WebAssembly (Wasm) sem servidor.
Descrição geral
WebAssembly (Wasm) é um formato binário otimizado para download rápido e velocidade de execução quase nativa. É executado numa sandbox isolada do computador anfitrião, fornecida por um tempo de execução Wasm. Por padrão, os módulos WebAssembly não podem acessar recursos, incluindo soquetes e variáveis de ambiente, no host fora da área restrita, a menos que sejam explicitamente permitidos. O padrão WebAssembly System Interface (WASI) define um conjunto de interfaces para tempos de execução do Wasm para fornecer acesso aos módulos WebAssembly para o ambiente e recursos fora do host usando um modelo de segurança baseado em recursos.
O SpinKube é um projeto de código aberto que executa tarefas Wasm sem servidor (Spin Apps) construídas com o Spin de código aberto no Kubernetes. Em contraste com os tempos de execução anteriores do Wasm para Kubernetes, o SpinKube executa Spin Apps nativamente nos nós subjacentes do Kubernetes e não depende de contêineres. Spin Apps são módulos Wasm regulares que se alinham com a especificação do Modelo de Componente WebAssembly.
Ao executar Spin Apps no Kubernetes com o SpinKube, você pode executar as seguintes cargas de trabalho:
- Execute cargas de trabalho do Wasm ao lado de aplicativos em contêineres existentes.
- Execute cargas de trabalho semelhantes enquanto consome menos recursos.
- Execute mais cargas de trabalho em um determinado conjunto de recursos.
- Execute cargas de trabalho em arquiteturas diferentes (como
amd64earm64) sem compilá-las cruzadamente.
O SpinKube consiste em dois componentes de nível superior:
-
spin-operator: Um operador Kubernetes que permite a implantação e o gerenciamento de Spin Apps usando recursos personalizados. -
kubeplugin paraspin: Umspinplugin CLI que permite aos utilizadores estruturar manifestos de implementação para o Kubernetes para as Spin Apps.
Pré-requisitos
- Versão
2.64.0do Azure CLI ou posterior. Para instalar ou atualizar, consulte Instalar a CLI do Azure. -
kubectlversão1.31.0ou posterior. -
helmversão3.15.4ou posterior. -
spinversão3.0.0ou posterior. -
Node.js versão
21.6.2. - Um cluster AKS existente. Caso não tenhas um, consulta Criar um cluster AKS.
Limitações
- O nó
os-typeKubernetes deve ser baseado em Linux. - Você não pode usar o portal do Azure para implantar o SpinKube em um cluster AKS.
Implantar o SpinKube em um cluster existente
Conecte-se ao cluster AKS
Configure
kubectlpara se conectar ao cluster do Kubernetes usando oaz aks get-credentialscomando.az aks get-credentials --name <aks-cluster-name> --resource-group <resource-group-name>
Implantar cert-manager
Se você ainda não implantou cert-manager no cluster AKS, pode instalá-lo implantando suas Definições de Recursos Personalizados (CRDs) seguidas pelo cert-manager gráfico Helm fornecido pelo jetstack repositório.
Implante os CRDs e o
cert-managergráfico Helm usando okubectl applycomando.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.3/cert-manager.crds.yamlAdicione e atualize o repositório Jetstack usando os comandos
helm repo addehelm repo update.helm repo add jetstack https://charts.jetstack.io helm repo updateInstale o gráfico Helm
cert-managerusando o comandohelm install.helm install \ cert-manager jetstack/cert-manager --version v1.14.3 \ --namespace cert-manager --create-namespace \ --wait
Deploy runtime-class-manager (também conhecido como KWasm)
O runtime-class-manager (também conhecido como KWasm) é responsável por implantar e gerenciar containerd-shim nos nós desejados do Kubernetes.
Adicione o repositório KWasm Helm usando o
helm repo addcomando.helm repo add kwasm http://kwasm.sh/kwasm-operator/Instale o operador KWasm usando o
helm installcomando.helm install \ kwasm-operator kwasm/kwasm-operator \ --namespace kwasm --create-namespace \ --version 0.2.3 \ --set kwasmOperator.installerImage=ghcr.io/spinframework/containerd-shim-spin/node-installer:v0.19.0
Configurar containerd-shim-spin em nós de Kubernetes
Uma vez runtime-class-manager instalado no cluster AKS, você deve anotar os nós do Kubernetes que devem ser capazes de executar Spin Apps com kwasm.sh/kwasm-node=true. Você pode usar kubectl annotate node para anotar todos os nós ou apenas nós específicos em seu cluster AKS. Neste exemplo, anotamos todos os nós no cluster AKS com a anotação kwasm.sh/kwasm-node=true.
Provisionar
containerd-shim-spinpara todos os nós no cluster AKS usando o comandokubectl annotate node --all.kubectl annotate node --all kwasm.sh/kwasm-node=trueDepois de anotar os nós do Kubernetes,
runtime-class-managerutiliza um Job do Kubernetes para modificar os nós desejados. Após a implantação bem-sucedida docontainerd-shim-spin, os nós são rotulados comkwasm.sh/kwasm-provisioned. Você pode verificar se os nós desejados têm okwasm.sh/kwasm-provisionedrótulo atribuído usando okubectl get nodes --show-labelscomando.kubectl get nodes --show-labels
Implante o spin-operator
O spin-operator consiste em duas Definições de Recursos Personalizados (CRDs) que você precisa implantar em seu cluster AKS: o RuntimeClass for spin e um SpinAppExecutor.
Implemente os CRDs e o RuntimeClass para
spin, utilizando o comandokubectl apply.kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.crds.yaml kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.runtime-class.yamlImplante o
spin-operatorusando ohelm installcomando.helm install spin-operator --version 0.5.0 \ --namespace spin-operator --create-namespace \ --wait oci://ghcr.io/spinframework/charts/spin-operatorCrie um
SpinAppExecutorno namespace padrão usando okubectl applycomando.kubectl apply -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml
Executar uma aplicação Spin no AKS
Nesta seção, verifica-se a instalação do SpinKube criando um aplicativo Spin simples, utilizando a CLI e o JavaScript spin.
Criar um novo aplicativo Spin
Crie um novo aplicativo Spin usando o
spin newcomando com ohttp-jsmodelo.spin new -t http-js --accept-defaults hello-spinkubeMude para o
hello-spinkubediretório usando ocdcomando.cd hello-spinkubeInstale as dependências usando o
npm installcomando.npm installUse a
spinCLI para criar um aplicativo básico Hello, World .spin build
Criar registro de contêiner e autenticar a spin CLI
Os Aplicativos Spin são empacotados como artefatos OCI e distribuídos por meio de um registro compatível com OCI, como o Azure Container Registry (ACR). Crie uma nova instância ACR usando o
az acr createcomando.az acr create --name <acr-name> --resource-group <resource-group-name> --location <location> --sku Basic --admin-enabled trueObtenha o ponto de extremidade do servidor de login ACR e a senha de administrador usando os comandos
az acr showeaz 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)Autentique sua
spinCLI usando ospin registry logincomando.spin registry login -u $ACR_NAME -p $ACR_PASSWORD $ACR_LOGIN_SERVER
Empacotar, distribuir e implantar o aplicativo Spin
Agora que a CLI está autenticada
spinna instância ACR, você pode empacotar e distribuir o Spin App usando ospin registry pushcomando seguido por uma referência de artefato OCI (que segue o<your acr login server>/<repository-name>:<tag>esquema de nomenclatura).spin registry push $ACR_LOGIN_SERVER/hello-spinkube:0.0.1Crie um Kubernetes Secret do tipo
docker-registrypara referência durante a implantação do Spin App no seu cluster AKS usando okubectl create secretcomando. Neste exemplo, o segredo é chamadospinkube-on-aks.kubectl create secret docker-registry spinkube-on-aks \ --docker-server=$ACR_LOGIN_SERVER \ --docker-username=$ACR_NAME\ --docker-password $ACR_PASSWORDCrie os manifestos de implantação do Kubernetes necessários usando o
spin kube scaffoldcomando.spin kube scaffold --from $ACR_LOGIN_SERVER/hello-spinkube:0.0.1 -s spinkube-on-aks > spinapp.yamlO
spinapp.yamlarquivo contém uma instância pré-configurada doSpinAppCRD, que deve ter esta aparência: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-aksImplante o Spin App no cluster AKS usando o
kubectl applycomando.kubectl apply -f spinapp.yaml
Explore a aplicação Spin no AKS
Recuperar a lista de Spin Apps
Recupere a lista de Spin Apps usando o
kubectl get spinappscomando.kubectl get spinappsNAME READY DESIRED EXECUTOR hello-spinkube 2 2 containerd-shim-spin
Recupere as primitivas do Kubernetes criadas pelo spin-operator
Após a implantação, o spin-operator cria primitivas subjacentes do Kubernetes, como um Serviço, uma Implantação e Pods correspondentes.
Recupere a lista de serviços usando o
kubectl get servicecomando.kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-spinkube ClusterIP 10.43.35.78 <none> 80/TCP 24sRecupere a lista de implantações usando o
kubectl get deploymentcomando.kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE hello-spinkube 2/2 2 2 38sRecupere a lista de pods usando o
kubectl get podcomando.kubectl get podNAME READY STATUS RESTARTS AGE hello-spinkube-5b8579448d-zmc6x 1/1 Running 0 51s hello-spinkube-5b8579448d-bhkp9 1/1 Running 0 51s
Invoque o aplicativo Spin
Para invocar o Spin App, configure o encaminhamento de porta para o serviço provisionado spin-operator pelo e use curl para enviar solicitações HTTP.
Estabeleça o encaminhamento de porta para o serviço
hello-spinkubeusando o comandokubectl port-forward.kubectl port-forward svc/hello-spinkube 8080:80Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80Abra uma nova instância de terminal e use o seguinte
curlcomando para enviar uma solicitação HTTP paralocalhost:8080.curl -iX GET localhost:8080HTTP/1.1 200 OK content-type: text/plain content-length: 17 date: Tue, 28 May 2024 08:55:50 GMT Hello from JS-SDK
Limpar recursos
Remova o aplicativo Spin do cluster AKS usando o
kubectl deletecomando.kubectl delete spinapp hello-spinkubeRemova o Secret docker-registry (spinkube-on-aks) usando o comando
kubectl delete secret.kubectl delete secret spinkube-on-aksRemova a instância ACR que você criou como parte deste tutorial usando o
az acr deletecomando.az acr delete --name <acr-name> --resource-group <resource-group-name> --yesRemova os componentes SpinKube do cluster AKS usando os seguintes comandos.
# Remove the spin-operator helm delete spin-operator --namespace spin-operator # Remove the SpinAppExecutor kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.shim-executor.yaml # Remove the RuntimeClass for Spin kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.0/spin-operator.runtime-class.yaml # Remove the SpinKube CRDs kubectl delete -f https://github.com/spinframework/spin-operator/releases/download/v0.5.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
Próximos passos
Neste artigo, você aprendeu como implantar o SpinKube no Serviço Kubernetes do Azure (AKS) para executar cargas de trabalho WebAssembly (Wasm) sem servidor. Para implantar mais cargas de trabalho no AKS, consulte os seguintes artigos: