HPA 根据指定的指标(CPU 使用率等)扩展 Pod 数量,工作节点不够时 CA 通过 EC2 自动伸缩组调整机器数量。
- 安装 metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- 调整节点组节点数量范围
# 查看自动伸缩组名称
ASG_NAME=`aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[0].AutoScalingGroupName" --output text`
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name $ASG_NAME \
--min-size 2 \
--max-size 10
- 配置 cluster autoscaler 权限
# 留意设置 CLUSTER_NAME、AWS_REGION 环境变量
# 获取 eks worknode iam 角色
STACK_NAME=$(eksctl get nodegroup --cluster ${CLUSTER_NAME} --region=${AWS_REGION} -o json | jq -r '.[].StackName')
echo $STACK_NAME
ROLE_NAME=$(aws cloudformation describe-stack-resources --stack-name $STACK_NAME --region=${AWS_REGION} | jq -r '.StackResources[] | select(.ResourceType=="AWS::IAM::Role") | .PhysicalResourceId')
echo $ROLE_NAME
# 给角色附加 cluster autoscaler 所需权限
aws iam put-role-policy --role-name $ROLE_NAME --policy-name ASG-Policy-For-Worker --policy-document file://./ca_policy_autodiscover.json --region ${AWS_REGION}
aws iam get-role-policy --role-name $ROLE_NAME --policy-name ASG-Policy-For-Worker --region ${AWS_REGION}
- 安装 cluster autoscaler
# 留意修改 yaml 文件中集群名称、cluster-autoscaler 版本
kubectl apply -f auto_scale_with_ca.yaml
#查看日志
kubectl logs -f deployment/cluster-autoscaler -n kube-system
- 部署样例应用
kubectl apply -f php_apache.yaml
- 为样例应用配置 hpa
# Set threshold to CPU 30% auto-scaling, and up to 5 pod replicas
kubectl autoscale deployment php-apache --cpu-percent=30 --min=1 --max=5
kubectl get hpa
- 压测样例应用
kubectl run -it --rm load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
- 查看 hpa
kubectl get hpa --watch
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 250%/30% 1 5 4 3m22s
kubectl get deployment php-apache
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 5/5 5 5 6m2s
- 查看 cluster autoscaler 的情况
kubectl logs -f deployment/cluster-autoscaler -n kube-system
- 停止压测流量,查看 cluster autoscaler 情况