k8s的HPA自動擴容與縮容

HPA介紹

Kubernetes HPA(水平Pod自動縮放)Pod水平自動伸縮,經過此功能,只需簡單的配置,便可即可以利用監控指標(cpu使用率、磁盤、內存等)自動的擴容或縮容服務中Pod數量,當業務需求增長時,系統將爲您無縫地自動增長適量容器,提升系統穩定性。此處將詳細講解HPA的核心設計原理和基於Hepaster的使用方法php

前提條件

系統應該可否獲取到當前Pod的資源使用狀況 (意思是能夠執行kubectl top pod命令,而且可以獲得反饋信息)。node

若要實現自動擴縮容的功能,還須要部署heapster服務,用來收集及統計資源的利用率,支持kubectl top命令,heapster服務集成在prometheus(普羅米修斯) MertricServer服務中,因此說,爲了方便,我這裏基於prometheus服務的環境上進行部署HPA(動態擴縮容)的服務。docker

實驗環境

主機 IP地址 服務
master 192.168.1.21 k8s
node01 192.168.1.22 k8s
node02 192.168.1.23 k8s

基於[http://www.javashuo.com/article/p-armridbk-ep.html]() 的實驗繼續進行apache

k8s的HPA自動擴容與縮容

  • heapster:這個組件以前是集成在k8s集羣的,不過在1.12版本以後被移除了。若是還想使用此功能,應該部署metricServer, 這個k8s集羣資源使用狀況的聚合器。
  • Cousom:一樣處於beta階段(autoscaling/v2beta1),可是涉及到自定義的REST API的開發,複雜度會大一些,而且當須要從自定義的監控中獲取數據時,只能設置絕對值,沒法設置使用率。

自動擴展主要分爲兩種:

  • 水平擴展(scale out),針對於實例數目的增減。
  • 垂直擴展(scal up),即單個實例可使用的資源的增減, 好比增長cpu和增大內存。
    HPA屬於前者。它能夠根據CPU使用率或應用自定義metrics自動擴展Pod數量(支持 replication controller、deployment 和 replica set)。

工做流程

  • 建立HPA資源,設定目標CPU使用率限額,以及最大/最小實例數,必定要設置Pod的資源限制參數: request,不然HPA不會工做。
  • 控制管理器每隔30s(在kube-controller-manager.service中能夠經過–-horizontal-pod-autoscaler-sync-period修改)查詢metrics的資源使用狀況。
  • 而後與建立時設定的值和指標作對比(平均值之和/限額),求出目標調整的實例個數。
  • 目標調整的實例數不能超過第一條中設定的最大/最小實例數。若是沒有超過,則擴容;超過,則擴容至最大的實例個數。
  • 重複第2-4步。

這裏,咱們使用一個測試鏡像, 這個鏡像基於php-apache製做的docker鏡像,包含了一些能夠運行cpu密集計算任務的代碼。負載均衡

一、建立一個deployment控制器

[root@master ~]#docker pull mirrorgooglecontainers/hpa-example:latest
//下載hpa-example鏡像

[root@master ~]# kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose  --port=80
//基於hpa-example鏡像,運行一個deployment控制器,請求CPU的資源爲200m,暴露一個80端口

查看一下

[root@master ~]# kubectl get deployments.

k8s的HPA自動擴容與縮容

二、建立HPA控制器

[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
//當deployment資源對象的CPU使用率達到50%時,就進行擴容,最多能夠擴容到10個

查看一下

[root@master ~]# kubectl get hpa

k8s的HPA自動擴容與縮容

三、測試(master開啓三個端口)

新開啓多個終端,對pod進行死循環請求php-apache的podide

端口一

(1)建立一個應用,用來不停的訪問咱們剛剛建立的php-apache的svc資源。

[root@master ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh

(2)進入Pod內,執行如下這條命令.用來模擬訪問php-apache的svc資源。

[root@master ~]# while true; do wget -q -O- http://php-apache.default.svc.cluster.local ; done
//不停地向php-apache的svc資源,發送ok

端口二

[root@master ~]# kubectl get hpa -w
//實時查看pod的cpu狀態

k8s的HPA自動擴容與縮容

能夠看到php-apache的cpu使用狀況已經超過了50%測試

端口三

[root@master images]# kubectl get pod -w
//實時查看pod的狀態

k8s的HPA自動擴容與縮容
至此,pod副本數量的自動擴縮容就實現了。google

能夠看到當php-apache的cpu使用狀況超過50%後,就會不斷生成新的php-apache來進行負載均衡(目前設置的上線時10個),固然,若是cpu使用狀況降低到50%,master就會陸續地刪除php-apache,這樣的使用能夠減小沒必要要的資源浪費、資源分配不均等狀況。設計

相關文章
相關標籤/搜索