当我们部署应用(使用像 kubectl apply 这样简单的命令)时,Auto Mode 开始发挥作用:
使用示例应用 https://github.com/aws-containers/retail-store-sample-app
我们将使用一个示例网上商店应用程序,客户可以浏览商品目录,将商品添加到购物车,并通过结账流程完成订单。该应用程序有几个组件,如 UI、目录、订单、购物车和结账服务,以及需要持久块存储的后端数据库:
# kubectl apply -f https://raw.githubusercontent.com/aws-containers/retail-store-sample-app/main/dist/kubernetes/deploy.yaml
kubectl apply -f https://github.com/aws-containers/retail-store-sample-app/releases/latest/download/kubernetes.yaml
kubectl wait — for=condition=available deployments — all
创建出来多个pod:
此时general-purpose的节点池也自动创建出来一台节点:
将服务转发到本地:
kubectl port-forward $(kubectl get pods \ kube casual-indie-sheepdog
--selector=app.kubernetes.io/name=ui -o jsonpath='{.items[0].metadata.name}') 8080:8080
访问浏览器8080端口, 成功访问到服务:
在 EKS Audo Mode中,集群的计算资源由 EKS 自动配置和管理。EKS Auto Mode会检测工作负载何时无法调度到现有节点上,并创建一个新的、适当大小的 EC2 实例。
我们将手动扩展应用replica数量,以查看Auto Mode如何自动增加新节点以满足不断增长的需求。
➤执行以下命令来监视新节点:
watch kubectl get nodes
➤ 扩展 UI 组件:
kubectl scale --replicas=12 deployment/ui
watch 命令显示新节点被添加到集群中,以容纳添加的 UI 组件副本:
➤ 如果我们想了解 EKS Auto Mode如何对应用程序做出反应,可以通过运行以下命令查看集群事件:
kubectl events
输出应包括针对 Pod、NodePools 和 Nodes 注册的事件。
➤ 现在我们的 UI 组件已经扩展,让我们检查 Pod 分布:
for node in $(kubectl get nodes -l karpenter.sh/nodepool=general-purpose -o custom-columns=NAME:.metadata.name --no-headers); do
echo "Pods on $node:"
kubectl get pods --all-namespaces --field-selector spec.nodeName=$node
done
该命令应产生类似于以下的输出: