Pod 擴容和縮容
阿新 • • 發佈:2018-06-25
ast 版本 app AD sta apc lse pod IE 在生產環境下,在面臨服務需要擴容的場景時,可以使用Deployment/RC的Scale機制來實現。
Kubernetes支持對Pod的手動擴容和自動擴容。
Kubernetes支持對Pod的手動擴容和自動擴容。
手動擴容縮容
通過執行擴容命令,對某個deployment直接進行擴容:
# kubectl scale deployment nginx-deployment --replicas=4
當要縮容,減少副本數量即可:
# kubectl scale deployment nginx-deployment --replicas=2
自動擴容縮容
在使用自動化擴容和縮容,需要kubernetes安裝heapster插件。
參考鏈接
按照說明,修改如下YAML文件中的image信息為國內可以訪問的鏡像倉庫,然後執行:
[root@node-1 influxdb]# ll total 16 -rw-r--r-- 1 root root 2288 Jun 21 20:23 grafana.yaml -rw-r--r-- 1 root root 264 Jun 21 20:24 heapster-rbac.yaml # 來源於上一級rbac目錄 -rw-r--r-- 1 root root 1112 Jun 21 20:24 heapster.yaml -rw-r--r-- 1 root root 972 Jun 21 20:24 influxdb.yaml [root@node-1 influxdb]# kubectl create -f ./
安裝完成之後,使用如下鏈接可以訪問Grafana的web界面,查看資源使用情況:
https://10.0.0.1:6443/api/v1/namespaces/kube-system/services/http:monitoring-grafana:/proxy/
在kubernetes 1.11以後的版本中將不再使用heapster插件來監控資源的使用狀態,而是使用metric server。
創建php-apche的deployment的應用和Service,當訪問此應用時,返回“OK!”:
# cat php-apache.yaml apiVersion: apps/v1 kind: Deployment metadata: name: php-apache labels: app: php-apache spec: replicas: 1 selector: matchLabels: app: php-apache template: metadata: name: php-apache labels: app: php-apache spec: containers: - name: php-apache image: mirrorgooglecontainers/hpa-example resources: requests: cpu: 200m ports: - containerPort: 80 # cat php-svc.yaml apiVersion: v1 kind: Service metadata: name: php-apache spec: ports: - port: 80 selector: app: php-apache
創建一個busybox的工具Pod,用於做壓力測試:
# cat php-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: php-apache
spec:
ports:
- port: 80
selector:
app: php-apache
創建完以上對象,還需要創建一個HPA控制器,用於監控對象的資源使用率:
kubectl autoscale deployment php-apache --min=1 --max=6 --cpu-percent=50
# 對php-apache的deployment的對象創建HPA控制器,當CPU的使率超過50%時實現自動化擴容,支持1到6之前Pod副本數量,以使得Pod CPU使用率維持在50% 以內。
查看當前hpa的狀態,如果狀態顯示<unknown>,查看下文中的故障排查:
[root@node-1 ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 8 1 39m
登錄busybox,執行循環訪問命令,對php-apache進行壓測:
# kubectl exec -it busybox -- sh
/ # while true;do wget -q -O - http://php-apache > /dev/null ;done
# 此處如果DNS沒有正常工作將無法正常解析URL地址。
查看資源監控信息:
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 42%/50% 1 8 1 1h
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 491%/50% 1 8 4 1h
查看對應的對象創建情況,正在陸續創建:
[root@node-1 hpa-test]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 4 4 4 2 1h
[root@node-1 hpa-test]# kubectl get rs
NAME DESIRED CURRENT READY AGE
php-apache-56b5765b95 4 4 2 1h
[root@node-1 hpa-test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 36m
php-apache-56b5765b95-8pclp 1/1 Running 0 1h
php-apache-56b5765b95-gsvqk 1/1 Running 0 1m
php-apache-56b5765b95-nbwbk 1/1 Running 0 1m
php-apache-56b5765b95-zmc29 0/1 ContainerCreating 0 1m
當CPU使用率下降後,自動縮容:
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 8 1 1h
[root@node-1 hpa-test]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 1 1 1 1 1h
[root@node-1 hpa-test]# kubectl get rs
NAME DESIRED CURRENT READY AGE
php-apache-56b5765b95 1 1 1 1h
[root@node-1 hpa-test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 43m
php-apache-56b5765b95-8pclp 1/1 Running 0 1h
故障排查
如果設置hpa後,出現如下無法獲取資源狀態的情況:
[root@node-1 hpa-test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache <unknown>/50% 1 8 1 9m
在master上修改kube-controller-manager的配置,添加如下參數:
cat /usr/lib/systemd/system/kube-controller-manager.service
...
--horizontal-pod-autoscaler-use-rest-clients=false ...
或者使用新版的metric server
。這裏暫時不介紹,可參考 https://github.com/kubernetes-incubator/metrics-server/
Pod 擴容和縮容