培训
模块
创建第一个 Azure Kubernetes 服务 (AKS) 边缘软件包单计算机群集 - Training
在具有 Linux 和 Windows 节点的单计算机 K3S 群集中部署 AKS 边缘软件包。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
WebAssembly (Wasm) 是一种二进制格式,针对 Wasm 运行时中的快速下载和最大执行速度进行了优化。 Wasm 运行时设计为在目标体系结构上运行,在沙盒中执行 Wasm 组件,与主计算机隔离,具有接近本机的性能。 默认情况下,Wasm 组件无法访问沙盒外部主机上的资源,除非明确允许它。 例如,Wasm 组件无法通过套接字进行通信、接收或发送 HTTP 流量,甚至无法在没有显式批准的情况下访问环境变量等内容。 WebAssembly 系统接口 (WASI) 标准为 Wasm 运行时定义了一个 API,使用功能模型向 Wasm 组建提供对环境和主机外部资源的访问。
重要
WASI 节点池现在使用 SpinKube containerd shim 来运行 Wasm 工作负载。 以前,AKS 使用 Krustlet 来允许 Wasm 模块在 Kubernetes 上运行。 如果你仍在使用基于 Krustlet 的 WASI 节点池,可以通过创建一个新的 WASI 节点池并将工作负载迁移到新节点池,来迁移到 containerd shim。
必须安装最新版本的 Azure CLI。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
若要安装 aks-preview 扩展,请运行以下命令:
az extension add --name aks-preview
运行以下命令以更新到已发布的最新扩展版本:
az extension update --name aks-preview
使用 WasmNodePoolPreview
命令注册 WasmNodePoolPreview
功能标志,如以下示例所示:
az feature register --namespace "Microsoft.ContainerService" --name "WasmNodePoolPreview"
状态显示为“已注册”需要几分钟时间。 使用 az feature show 命令验证注册状态:
az feature show --namespace "Microsoft.ContainerService" --name "WasmNodePoolPreview"
当状态反映为“已注册”时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册:
az provider register --namespace Microsoft.ContainerService
要添加 Wasm/WASI 节点池,请使用 az aks nodepool add 命令。 以下示例创建一个具有一个节点且名为 mywasipool 的 WASI 节点池。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mywasipool \
--node-count 1 \
--workload-runtime WasmWasi
备注
workload-runtime 参数的默认值为 ocicontainer。 若要创建可运行容器工作负荷的节点池,请省略 workload-runtime 参数或将值设置为 ocicontainer。
使用 az aks nodepool show
验证 workloadRuntime 值。 例如:
az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n mywasipool --query workloadRuntime
以下示例输出展示了 mywasipool 具有 workloadRuntime 类型的 WasmWasi。
az aks nodepool show -g myResourceGroup --cluster-name myAKSCluster -n mywasipool --query workloadRuntime
"WasmWasi"
使用 az aks get-credentials 命令将 kubectl
配置为连接到你的 Kubernetes 群集。 以下命令:
az aks get-credentials -n myakscluster -g myresourcegroup
使用 kubectl get nodes
显示群集中的节点。
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-mywasipool-12456878-vmss000000 Ready agent 123m v1.23.12 <WASINODE_IP> <none> Ubuntu 22.04.1 LTS 5.15.0-1020-azure containerd://1.5.11+azure-2
aks-nodepool1-12456878-vmss000000 Ready agent 133m v1.23.12 <NODE_IP> <none> Ubuntu 22.04.1 LTS 5.15.0-1020-azure containerd://1.5.11+azure-2
使用 kubectl describe node
显示 WASI 节点池中节点上的标签。 下面的示例展示了 aks-mywasipool-12456878-vmss000000 的详细信息。
kubectl describe node aks-mywasipool-12456878-vmss000000
Name: aks-mywasipool-12456878-vmss000000
Roles: agent
Labels: agentpool=mywasipool
...
kubernetes.azure.com/wasmtime-spin-v2=true
...
创建包含以下内容的名为 spin.yaml 的文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wasm-spin
spec:
replicas: 1
selector:
matchLabels:
app: wasm-spin
template:
metadata:
labels:
app: wasm-spin
spec:
runtimeClassName: wasmtime-spin-v2
containers:
- name: spin-hello
image: ghcr.io/spinkube/containerd-shim-spin/examples/spin-rust-hello:v0.15.1
command: ["/"]
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: wasm-spin
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: wasm-spin
备注
若要详细了解如何开发 Spin 应用程序,请参阅 spin 文档。
使用 kubectl
运行示例部署:
kubectl apply -f spin.yaml
使用 kubectl get svc
获取服务的外部 IP 地址。
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 10m
wasm-spin LoadBalancer 10.0.133.247 <EXTERNAL-IP> 80:30725/TCP 2m47s
在 http://EXTERNAL-IP/hello
上访问示例应用程序。 下面的示例使用 curl
。
curl http://EXTERNAL-IP/hello
Hello world from Spin!
备注
如果请求超时,请使用 kubectl get pods
和 kubectl describe pod <POD_NAME>
检查 pod 的状态。 如果 pod 未运行,请使用 kubectl get rs
和 kubectl describe rs <REPLICA_SET_NAME>
查看副本集是否在创建新 pod 时出现问题。
若要删除示例部署,请使用 kubectl delete
。
kubectl delete -f spin.yaml
若要移除 Wasm/WASI 节点池,请使用 az aks nodepool delete
。
az aks nodepool delete --name mywasipool -g myresourcegroup --cluster-name myakscluster
WASI 节点池支持以下 RuntimeClass:
后缀 -v0-15-1
、-v0-8-0
、-v0-5-1
、-v0-3-0
是 spin shim 的版本。 可以在下表中找到支持的 spin shim 版本:
培训
模块
创建第一个 Azure Kubernetes 服务 (AKS) 边缘软件包单计算机群集 - Training
在具有 Linux 和 Windows 节点的单计算机 K3S 群集中部署 AKS 边缘软件包。