1. 程式人生 > >Pod 擴容和縮容

Pod 擴容和縮容

ast 版本 app AD sta apc lse pod IE

在生產環境下,在面臨服務需要擴容的場景時,可以使用Deployment/RC的Scale機制來實現。
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 擴容和縮容