Skip to content

Latest commit

 

History

History
99 lines (66 loc) · 2.62 KB

8.scaling_with_ca.md

File metadata and controls

99 lines (66 loc) · 2.62 KB

通过 Cluster Autoscaler 扩展工作节点数量

总体流程

HPA 根据指定的指标(CPU 使用率等)扩展 Pod 数量,工作节点不够时 CA 通过 EC2 自动伸缩组调整机器数量。

具体配置

  1. 安装 metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  1. 调整节点组节点数量范围
# 查看自动伸缩组名称
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
  1. 配置 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}

  1. 安装 cluster autoscaler
# 留意修改 yaml 文件中集群名称、cluster-autoscaler 版本

kubectl apply -f auto_scale_with_ca.yaml

#查看日志
kubectl logs -f deployment/cluster-autoscaler -n kube-system

验证

  1. 部署样例应用
kubectl apply -f php_apache.yaml

  1. 为样例应用配置 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

  1. 压测样例应用
kubectl run -it --rm load-generator --image=busybox /bin/sh

while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

  1. 查看 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

  1. 查看 cluster autoscaler 的情况
kubectl logs -f deployment/cluster-autoscaler -n kube-system
  1. 停止压测流量,查看 cluster autoscaler 情况