部署应用

当我们部署应用(使用像 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:

image-20250227140907481

此时general-purpose的节点池也自动创建出来一台节点:

image-20250227140938127

image-20250227141026120

将服务转发到本地:

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端口, 成功访问到服务:

image-20250227152044796

扩展应用程序

在 EKS Audo Mode中,集群的计算资源由 EKS 自动配置和管理。EKS Auto Mode会检测工作负载何时无法调度到现有节点上,并创建一个新的、适当大小的 EC2 实例。

我们将手动扩展应用replica数量,以查看Auto Mode如何自动增加新节点以满足不断增长的需求。

➤执行以下命令来监视新节点:

watch kubectl get nodes

➤ 扩展 UI 组件:

kubectl scale --replicas=12 deployment/ui

watch 命令显示新节点被添加到集群中,以容纳添加的 UI 组件副本:

image-20250227153223428

➤ 如果我们想了解 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

该命令应产生类似于以下的输出:

image-20250227153428573