K8S集群Pod动态弹性扩缩容(HPA )部署
K8S集群Pod动态弹性扩缩容HPA 部署一、安装metrics-server①开启API Aggregator开启 API AggregatorAPI 聚合层是为了让 Kubernetes 能够安全、标准地集成第三方扩展 APImetrics-server 就是通过这种方式提供metrics.k8s.ioAPI 的。vim/etc/kubernetes/manifests/kube-apiserver.yaml#添加这行- --enable-aggregator-routingtrue修改 manifests 配置后 API Server 会自动重启生效②验证配置生效使用kubectl describe命令来查看 kube-apiserver 的 Pod 描述确认是否包含了相应的配置。kubectl describe pod kube-apiserver-k8s-master-nkube-syste二、下载 components.yamlgithub地址Releases · kubernetes-sigs/metrics-serverwgethttps://github.com/kubernetes-sigs/metrics-server/releases/download/v0.8.1/components.yaml①修改配置下载后修改如下配置用于跳过证书校验不加可能会报错---kubelet-insecure-tls②更换镜像修改image地址为阿里云镜像源image:registry.aliyuncs.com/google_containers/metrics-server:v0.6.1③开始安装kubectl apply-fcomponents.yaml#查看pod状态kubectl get pod-nkube-system|grepmetrics-server④查看node和pod资源使用情况kubectltopnodes kubectltoppods-nkube-system所有验证都通过了metrics-server 已经完全正常工作三、部署HPA测试应用php-apache①下载php-apache.yaml使用 Kubernetes 官方 HPA 示例#下载原始YAML文件wgethttps://k8s.io/examples/application/php-apache.yaml②修改镜像sed-is|registry.k8s.io/hpa-example|mirrorgooglecontainers/hpa-example|php-apache.yaml关键参数说明镜像mirrorgooglecontainers/hpa-example设置了resources.requests.cpu: 200mHPA 必需暴露 Servicephp-apache供压测③应用配置kubectl apply-fphp-apache.yaml④验证kubectl get deploy/php-apache kubectl describe pod-lrunphp-apache|grep-A5Requests四、创建HorizontalPodAutoscalerkubectl autoscale deployment php-apache --cpu-percent50--min1--max10--cpu-percent50目标 CPU 利用率为 50%基于 requests 计算副本数范围1 ~ 10查看状态rootk8s-master:/data/k8s/hpa# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache cpu:0%/50%110115h若显示unknown/50%请检查Metrics Server 是否运行正常kubectl top podsPod 是否设置了resources.requests.cpu五、压测验证HPA自动扩缩容①启动负载生成器新开终端kubectl run-i--ttyload-generator--rm\--imagebusybox:1.28\--restartNever\-- /bin/sh-cwhile sleep 0.01; do wget -q -O- http://php-apache; done②实时观察HPA行为kubectl get hpa php-apache --watch典型扩缩容过程行为说明扩容响应较快秒级缩容有默认 5 分钟冷却期由--horizontal-pod-autoscaler-downscale-stabilization控制③停止压测在负载终端按Ctrl CPod 自动清理。