K8S的HPA机制
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.4/components.yaml 支持k8s 1.8+
k8s.gcr.io/metrics-server/metrics-server:v0.4.4
root@slave002:/opt/HPA# ls components-v0.4.4.yaml metrics-server-v0.4.4.tar.gz root@slave002:/opt/HPA# kubectl get po -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system metrics-server-589d49d679-k2mft 1/1 Running 0 25s
root@slave002:/opt/HPA# kubectl top pod -A NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system calico-kube-controllers-84f55b8f87-dvw68 1m 13Mi kube-system calico-node-2cv99 10m 77Mi kube-system calico-node-7fmcm 10m 77Mi kube-system calico-node-mmw6t 9m 77Mi kube-system coredns-b4f9bd8bc-nwnws 2m 11Mi kube-system metrics-server-589d49d679-k2mft 1m 16Mi
root@slave002:/opt/HPA# kubectl top node W1024 22:19:18.674685 47653 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% 192.168.192.151 75m 3% 1064Mi 33% 192.168.192.152 64m 3% 899Mi 28% 192.168.192.153 71m 3% 941Mi 29%
root@slave002:/opt/HPA# kubectl autoscale deploy chuan-tomcat-app1-deployment --min=2 --max=5 --cpu-percent=10 -nchuan horizontalpodautoscaler.autoscaling/chuan-tomcat-app1-deployment autoscaled
root@slave002:/opt/HPA# kubectl get hpa -nchuan NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE chuan-tomcat-app1-deployment Deployment/chuan-tomcat-app1-deployment 0%/10% 2 5 2 77s
root@slave002:/opt/HPA# kubectl delete hpa chuan-tomcat-app1-deployment -nchuan horizontalpodautoscaler.autoscaling "chuan-tomcat-app1-deployment" deleted
root@slave002:/opt/k8s-data/yaml/chuan/tomcat-app1# cat hpa.yaml apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: namespace: chuan name: chuan-tomcat-app1-podautoscaler labels: app: chuan-tomcat-app1 version: v2beta1 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: chuan-tomcat-app1-deployment minReplicas: 2 maxReplicas: 20 targetCPUUtilizationPercentage: 60
释义:
scaleTargetRef:目标作用对象,可以是Deployment、ReplicationController或ReplicaSet。
targetCPUUtilizationPercentage:期望每个Pod的CPU使用率都为50%,该使用率基于Pod设置的CPU Request值进行计算,例如该值为200m,那么系统将维持Pod的实际CPU使用值为100m。
minReplicas和maxReplicas:Pod副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操作, 并维持每个Pod的CPU使用率为50%。
为了使用autoscaling/v1版本的HorizontalPodAutoscaler,需要预先安装Metrics Server,用于采集Pod的CPU使用率。
root@slave002:/opt/k8s-data/yaml/chuan/tomcat-app1# kubectl get po -nchuan NAME READY STATUS RESTARTS AGE chuan-tomcat-app1-deployment-748499bc7d-qz2sq 1/1 Running 0 9m30s chuan-tomcat-app1-deployment-748499bc7d-s4jsf 1/1 Running 0 10m
--horizontal-pod-autoscaler-cpu-initialization-period duration The period after pod start when CPU samples might be skipped. (default 5m0s) 5分钟后cpu资源指标才会被采纳
root@slave002:/opt/k8s-data/yaml/chuan/tomcat-app1# kubectl get po -nchuan NAME READY STATUS RESTARTS AGE chuan-tomcat-app1-deployment-748499bc7d-pm4s2 1/1 Terminating 0 5m51s chuan-tomcat-app1-deployment-748499bc7d-qz2sq 1/1 Running 0 30m chuan-tomcat-app1-deployment-748499bc7d-rr2wn 1/1 Terminating 0 5m51s
chuan-tomcat-app1-deployment-748499bc7d-s4jsf 1/1 Running 0 32m