本文详细讲解如何在AWS EKS中配置节点组(Node Group)和Pod的自动扩展,优化资源利用率并保障应用高可用。
一、准备工作
-
工具安装
-
安装并配置AWS CLI
-
安装eksctl(EKS管理工具)
-
安装kubectl(Kubernetes命令行工具)
-
-
配置AWS凭证
aws configure
# 输入AWS Access Key、Secret Key、默认区域(如us-west-2)
二、创建EKS集群
方法1:使用eksctl快速创建
# cluster-config.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-eks-cluster
region: us-west-2
nodeGroups:
- name: ng-1
minSize: 2
maxSize: 5
desiredCapacity: 2
instancesDistribution:
instanceTypes: ["t3.medium"]
onDemandBaseCapacity: 0
spotAllocationStrategy: "capacity-optimized"
执行命令:
eksctl create cluster -f cluster-config.yaml
方法2:通过AWS管理控制台创建
导航至EKS服务,按向导步骤配置集群和节点组,启用自动扩展选项。
三、配置节点自动扩展(Cluster Autoscaler)
-
部署Cluster Autoscaler
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
修改部署参数
编辑YAML文件,替换以下内容:
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/my-eks-cluster
- --balance-similar-node-groups
- --skip-nodes-with-system-pods=false
验证日志
kubectl logs -f deployment/cluster-autoscaler -n kube-system
# 确认无报错且检测到ASG
四、配置Pod水平扩展(HPA)
-
部署示例应用
kubectl create deployment php-apache --image=k8s.gcr.io/hpa-example
kubectl expose deployment php-apache --port=80 --target-port=8080
创建HPA策略
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
压力测试
kubectl run -i --tty load-generator --image=busybox -- /bin/sh -c "while true; do wget -q -O- http://php-apache; done"
# 观察HPA扩容情况
五、验证与优化
-
检查扩展状态
kubectl get hpa
kubectl get nodes -w
-
成本优化建议
-
使用Spot实例降低节点成本
-
设置合理的
minSize/maxSize
防止过度扩容 -
通过CloudWatch监控资源使用情况
-
六、常见问题
-
节点未加入集群:检查节点IAM角色是否包含
AmazonEKSWorkerNodePolicy
等权限。 -
Autoscaler不触发:确认资源请求(requests/limits)是否在Pod中正确定义。
-
区域限制:确保所有操作在同一个AWS区域执行。
结语:通过AWS EKS的自动扩展能力,企业可轻松应对流量波动,平衡性能与成本。立即体验AWS的托管Kubernetes服务,享受自动化运维的强大优势!
了解更多:可咨询AWS合作伙伴网络或本文作者