K8S進階實踐 之 經過HPA實現業務應用的動態擴縮容

1、HPA控制器介紹

當系統資源太高的時候,咱們能夠使用命令來實現 Pod 的擴縮容功能,可是這個過程是手動操做的。在實際項目中,咱們須要作到是的是一個自動化感知並自動擴容的操做。Kubernetes 也爲提供了這樣的一個資源對象:Horizontal Pod Autoscaling(Pod 水平自動伸縮),簡稱HPA;基於CPU、內存、自定義數據(此章不實現,基於監控數據實現)進行Deployment或RC所管理的POD資源進行擴容與收縮。
HPA實現的有兩個版本:git

  • autoscaling/v1,只包含了根據CPU指標的檢測,穩定版本
  • autoscaling/v2beta1,支持根據memory或者用戶自定義指標進行伸縮

K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容

2、Metric Server的原理

一、做用

Metrics Server 做爲標準的 Kubernetes API 把監控數據暴露出來的服務,好比獲取某一Pod的監控數據;不管是 heapster仍是 metric-server,都只是數據的中轉和聚合,二者都是調用的 kubelet 的 api 接口獲取的數據,而 kubelet 代碼中實際採集指標的是 cadvisor 模塊;cadvisor獲取指標時實際調用的是 runc/libcontainer庫,而libcontainer是對 cgroup文件 的封裝,即 cadvsior也只是個轉發者,它的數據來自於cgroup文件。
cgroup文件中的值是監控數據的最終來源,如
mem usage的值,
對於docker容器來說,來源於/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes
對於pod來說,/sys/fs/cgroup/memory/kubepods/besteffort/pod[podId]/memory.usage_in_bytes
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容github

二、Meteric 的數據流

K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容

3、Meteric Server安裝

一、下載地址docker

$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

二、修改相關的內容api

84       containers:
 85       - name: metrics-server
 86         image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6  #修改鏡像
 87         imagePullPolicy: IfNotPresent
 88         args:
 89           - --cert-dir=/tmp
 90           - --secure-port=4443     
 91           - --kubelet-insecure-tls     #增長內容
 92           - --kubelet-preferred-address-types=InternalIP     #增長內容

三、安裝app

$ kubectl create -f components.yaml

四、驗證安裝結果
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容curl

五、curl展現獲取某個pod的CPU與內存使用數據
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容ide

4、創建基於myblog項目的CPU的HPA

一、基於CPU的動態擴縮容google

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-myblog-cpu
  namespace: kang           #必須與該deployment相同的命名空間
spec:
  maxReplicas: 3            #最大3個pod
  minReplicas: 1            #最小1個pod
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment        #hpa接管的資源類型,能夠是RC等等等
    name: app               #必須與kind資源的名稱匹配
  targetCPUUtilizationPercentage: 10      #超過10%時進行擴容

二、建立與查看
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容url

三、模擬壓測
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容spa

備註:如壓測完成後,CPU使用率降低後,系統會自動進行縮容(每5分鐘爲間隔)

5、創建基於myblog項目的memory的HPA

一、yaml文件

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo-mem
  namespace: kang
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: 30

二、建立與查看
K8S進階實踐  之  經過HPA實現業務應用的動態擴縮容

相關文章
相關標籤/搜索