1. 程式人生 > >k8s hpa中的指標來源及實現

k8s hpa中的指標來源及實現

指標型別

在HorizontalPodAutoscaler 中包含以下幾種指標源型別:

  • Object(v2beta1)
  • Pods(v2beta1)
  • Resource(v2beta1)
  • External(v2beta2)

Object型別

Object型別是用於描述k8s內建物件的指標,例如ingress物件中hits-per-second指標

type ObjectMetricSource struct {
	// 用於描述k8s物件.
	Target CrossVersionObjectReference `json:"target" protobuf:"bytes,1,name=target"`
	// 所查詢的metric名稱.
	MetricName string `json:"metricName" protobuf:"bytes,2,name=metricName"`
	// 指標的目標值
	TargetValue resource.Quantity `json:"targetValue" protobuf:"bytes,3,name=targetValue"`
}

示例:

kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2alpha1
spec:
  scaleTargetRef:
    kind: ReplicationController
    name: WebFrontend
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Object
    object:
      target:
        kind: Service
        name: Frontend
      metricName: hits-per-second
      targetValue: 1k

Pods型別

pods型別描述當前擴容目標中每個pod的指標(例如,每秒處理的事務數)。在與目標值進行比較之前,將對值進行平均。

type PodsMetricSource struct {
	// 所查詢的metric名稱
	MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"`
	// 目標平均值
	TargetAverageValue resource.Quantity `json:"targetAverageValue" protobuf:"bytes,2,name=targetAverageValue"`
}

示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: podinfo
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: podinfo
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metricName: http_requests
      targetAverageValue: 10

Resource型別

Resource是Kubernetes已知的資源指標,如request和limit中所指定的,描述當前擴容目標的每個pod(例如CPU或記憶體)。該指標將會在與目標值對比前進行平均,被此類指標內置於Kubernetes中,且使用"pods"源在正常的每個pod度量標準之上提供特殊的擴充套件選項。

type ResourceMetricSource struct {
	// 所查詢的metric名稱
	Name v1.ResourceName `json:"name" protobuf:"bytes,1,name=name"`
	// 目標使用平均百分比
	tilization *int32 `json:"targetAverageUtilization,omitempty" protobuf:"varint,2,opt,name=targetAverageUtilization"`
	// 目標平均值
	TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,3,opt,name=targetAverageValue"`
}

示例:

kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2alpha1
spec:
  scaleTargetRef:
    kind: ReplicationController
    name: WebFrontend
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 80

External 型別

ExternalMetricSource指示如何擴充套件與任何Kubernetes物件無關的指標(例如,雲訊息傳遞服務中的佇列長度,或叢集外部執行的負載均衡器的QPS)。

type ExternalMetricSource struct {
	// 度量通過名稱和選擇器標識目標度量。
	Metric MetricIdentifier `json:"metric" protobuf:"bytes,1,name=metric"`
	// target specifies the target value for the given metric
	// 為指定指標指定目標值
	Target MetricTarget `json:"target" protobuf:"bytes,2,name=target"`
}

示例:

kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2beta2
spec:
  scaleTargetRef:
    kind: ReplicationController
    name: Worker
  minReplicas: 2
  maxReplicas: 10
  metrics:
   - type: External
     external:
       metricName: queue_messages_ready
       metricSelector:
         matchLabels:
           queue: worker_tasks
       targetAverageValue: 30

指標來源

hpa controller可通過以下api來獲取指標實現自動擴容:

用於hpa 中Resource型別資料來源.
已有實現:

用於hpa 中object/pods型別的資料來源,需要自己實現介面卡(custom metrics adapters)
已有實現:

用於 hpa 中external型別的資料來源,同樣需要雲廠商或平臺自己實現介面卡(custom metrics adapters)

已有實現:

參考:

歡迎加入QQ群:k8s開發與實踐(482956822)一起交流k8s技術