1. 程式人生 > >Kubernetes(k8s)中文文件 Horizontal Pod Autoscaling_Kubernetes中文社群

Kubernetes(k8s)中文文件 Horizontal Pod Autoscaling_Kubernetes中文社群

Horizontal Pod Autoscaling

Horizontal Pod Autoscaling可以根據CPU使用率或應用自定義metrics自動擴充套件Pod數量(支援replication controller、deployment和replica set)。

  • 控制管理器每隔30s(可以通過–horizontal-pod-autoscaler-sync-period修改)查詢metrics的資源使用情況
  • 支援三種metrics型別
    • 預定義metrics(比如Pod的CPU)以利用率的方式計算
    • 自定義的Pod metrics,以原始值(raw value)的方式計算
    • 自定義的object metrics
  • 支援兩種metrics查詢方式:Heapster和自定義的REST API
  • 支援多metrics

示例

# 建立pod和service
$ kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --expose --port=80
service "php-apache" created
deployment "php-apache" created

# 建立autoscaler
$ kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
deployment "php-apache" autoscaled
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       0%        1         10        18s

# 增加負載
$ kubectl run -i --tty load-generator --image=busybox /bin/sh
Hit enter for command prompt
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

# 過一會就可以看到負載升高了
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       305%      1         10        3m

# autoscaler將這個deployment擴充套件為7個pod
$ kubectl get deployment php-apache
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   7         7         7            7           19m

# 刪除剛才建立的負載增加pod後會發現負載降低,並且pod數量也自動降回1個
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       0%        1         10        11m

$ kubectl get deployment php-apache
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   1         1         1            1           27m

自定義metrics

使用方法

  • 控制管理器開啟–horizontal-pod-autoscaler-use-rest-clients
  • 在API Server Aggregator中註冊自定義的metrics API

注:可以參考k8s.io/metics開發自定義的metrics API server。

比如HorizontalPodAutoscaler保證每個Pod佔用50% CPU、1000pps以及10000請求/s:

HPA示例

apiVersion: autoscaling/v2alpha1 kind: HorizontalPodAutoscaler metadata: name: php-apache namespace: default spec: scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 - type: Pods pods: metricName: packets-per-second targetAverageValue: 1k - type: Object object: metricName: requests-per-second target: apiVersion: extensions/v1beta1 kind: Ingress name: main-route targetValue: 10k status: observedGeneration: 1 lastScaleTime: <some-time> currentReplicas: 1 desiredReplicas: 1 currentMetrics: - type: Resource resource: name: cpu currentAverageUtilization: 0 currentAverageValue: 0

參考:https://feisky.gitbooks.io/kubernetes/concepts/autoscaling.html

K8S中文社群微信公眾號