Kubernetes K8S之經過helm部署metrics-server與 Horizontal Pod Autoscaling (HPA)詳解php
服務器名稱(hostname) | 系統版本 | 配置 | 內網IP | 外網IP(模擬) |
---|---|---|---|---|
k8s-master | CentOS7.7 | 2C/4G/20G | 172.16.1.110 | 10.0.0.110 |
k8s-node01 | CentOS7.7 | 2C/4G/20G | 172.16.1.111 | 10.0.0.111 |
k8s-node02 | CentOS7.7 | 2C/4G/20G | 172.16.1.112 | 10.0.0.112 |
正常狀況下,若是沒有部署metrics-server那麼咱們使用以下命令是收集不到信息的html
1 kubectl top node 2 kubectl top pod -A
首先完成「Kubernetes K8S之Helm部署、使用與示例」。node
從Heapster的 GitHub地址:https://github.com/kubernetes-retired/heapster
中能夠看到,heapster 已經 RETIRED【過期】。從Kubernetes 1.12開始將從Kubernetes各類安裝腳本中移除。Kubernetes推薦使用metrics-server。咱們這裏使用Helm來部署metrics-server。git
GitHub地址:github
https://github.com/kubernetes-sigs/metrics-server
metrics-server-amd64鏡像下載算法
1 # 在集羣全部節點都須要執行 2 docker pull registry.cn-beijing.aliyuncs.com/google_registry/metrics-server-amd64:v0.3.6 3 docker tag registry.cn-beijing.aliyuncs.com/google_registry/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6 4 docker rmi registry.cn-beijing.aliyuncs.com/google_registry/metrics-server-amd64:v0.3.6
metrics-server.yaml文件docker
1 [root@k8s-master helm]# pwd 2 /root/k8s_practice/helm 3 [root@k8s-master helm]# 4 [root@k8s-master helm]# cat metrics-server.yaml 5 args: 6 - --logtostderr 7 - --kubelet-insecure-tls 8 - --kubelet-preferred-address-types=InternalIP
經過helm部署metrics-serverapache
1 # 查詢metrics-server的各個版本信息 2 helm search stable/metrics-server -l 3 # 經過helm部署metrics-server並指定了版本 4 helm install stable/metrics-server --version 2.11.1 -n metrics-server --namespace kube-system -f metrics-server.yaml
查看helm和pod信息安全
1 [root@k8s-master ~]# helm list 2 NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE 3 metrics-server 1 Mon Jul 20 10:06:58 2020 DEPLOYED metrics-server-2.11.1 0.3.6 kube-system 4 [root@k8s-master ~]# 5 [root@k8s-master ~]# kubectl get deploy -A | grep 'metrics-server' 6 kube-system metrics-server 1/1 1 1 94s 7 [root@k8s-master ~]# 8 [root@k8s-master ~]# kubectl get pod -A | grep 'metrics-server' 9 kube-system metrics-server-6796d97d6b-wvd48 1/1 Running 0 18s
如今使用下面的命令能夠獲取到關於集羣Node節點和Pod的指標信息:服務器
1 [root@k8s-master ~]# kubectl top node 2 NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% 3 k8s-master 205m 10% 2122Mi 57% 4 k8s-node01 130m 6% 1060Mi 61% 5 k8s-node02 193m 9% 1093Mi 63% 6 [root@k8s-master ~]# 7 [root@k8s-master ~]# kubectl top pod -A 8 NAMESPACE NAME CPU(cores) MEMORY(bytes) 9 default load-generator-57d5fb67c7-xx2wj 0m 0Mi 10 default php-apache-5db466758-k2vxj 1m 20Mi 11 kube-system coredns-6955765f44-c9zfh 5m 20Mi 12 kube-system coredns-6955765f44-lrz5q 5m 20Mi 13 kube-system etcd-k8s-master 21m 88Mi 14 ………………
Horizontal Pod Autoscaling(HPA) 能夠根據CPU利用率自動伸縮一個Replication Controller、Deployment或者ReplicaSet中的Pod數量。
案例鏡像下載
1 # gcr.io/google_containers/hpa-example 在國外,這裏咱們下載國內鏡像 2 # 在集羣全部節點都須要執行【主要是node節點】 3 docker pull registry.cn-beijing.aliyuncs.com/google_registry/hpa-example
啓動pod
kubectl run php-apache --image=registry.cn-beijing.aliyuncs.com/google_registry/hpa-example --requests=cpu=200m --expose --port=80
建立HPA控制器,相關算法參見以下地址:
1 # 官方地址:https://v1-17.docs.kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/ 2 # 當pod中CPU使用率達50%就擴容。最小1個,最大10個 3 kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
此時查詢相關信息
1 [root@k8s-master ~]# kubectl get hpa 2 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE 3 php-apache Deployment/php-apache 0%/50% 1 10 1 3m16s 4 [root@k8s-master ~]# 5 [root@k8s-master ~]# kubectl get deploy -A | grep 'php-apache' 6 default php-apache 1/1 1 1 10h 7 [root@k8s-master ~]# 8 [root@k8s-master ~]# kubectl get pod -o wide 9 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES 10 php-apache-5db466758-k2vxj 1/1 Running 0 8m8s 10.244.4.176 k8s-node01 <none> <none>
增長負載
1 # 啓動一個pod並進入一個終端 2 kubectl run -i --tty load-generator --image=registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1 /bin/sh 3 # 再次進入pod【注意pod名稱,根據實際狀況修改】 4 kubectl exec -it load-generator-57d5fb67c7-xx2wj -- /bin/sh 5 # 在pod中循環訪問 6 while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
若是須要多個終端訪問,那麼只須要修改tty終端名稱【如:load-generator01】。進入後再次循環訪問便可。
增長負載後【可能須要等會兒】,php-apache的pod數量達到了最大值10。此時的pod信息爲:
1 [root@k8s-master ~]# kubectl get hpa 2 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE 3 php-apache Deployment/php-apache 465%/50% 1 10 10 10h 4 [root@k8s-master ~]# 5 [root@k8s-master ~]# kubectl get deploy -A | grep 'php-apache' 6 default php-apache 10/10 10 10 10h 7 [root@k8s-master ~]# 8 [root@k8s-master ~]# kubectl get pod 9 NAME READY STATUS RESTARTS AGE 10 load-generator-57d5fb67c7-xx2wj 1/1 Running 0 48m 11 load-generator02-6c857bf9b5-cfmhj 1/1 Running 1 22s 12 php-apache-5db466758-2jv4x 1/1 Running 0 5m13s 13 php-apache-5db466758-4cxxm 1/1 Running 0 5m28s 14 php-apache-5db466758-6vz2b 1/1 Running 0 5m13s 15 php-apache-5db466758-98sqk 1/1 Running 0 4m58s 16 php-apache-5db466758-hdvrs 1/1 Running 0 5m13s 17 php-apache-5db466758-k2vxj 1/1 Running 0 62m 18 php-apache-5db466758-srctq 1/1 Running 0 4m58s 19 php-apache-5db466758-vkr5d 1/1 Running 0 5m28s 20 php-apache-5db466758-vmhlv 1/1 Running 0 5m13s 21 php-apache-5db466758-x8kms 1/1 Running 0 5m28s
此時,若是咱們中止負載訪問壓測,pod數量也不會當即降下來。而是過段時間後纔會慢慢降下來。
這也是爲了安全起見,防止因爲網絡緣由或者間歇性流量突增、突降,致使pod回收太快後面流量上來後Pod數量不夠。
完畢!
———END———
若是以爲不錯就關注下唄 (-^O^-) !