日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hpa原理详解

發布時間:2024/3/12 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hpa原理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 1. hpa介紹

    • 1.1 hpa是什么

    • 1.2 hpa如何用起來

  • 2. hpa 源碼分析

    • 2.1 啟動參數介紹

    • 2.2 啟動流程

    • 2.3 核心計算邏輯

    • 2.4 計算期望副本數量

      • 2.4.1 GetRawMetric-具體的metric值

      • 2.4.2 calcPlainMetricReplicas-計算期望副本值

  • 3. 舉例說明計算過程

    • 3.1 hpa擴容計算邏輯

    • 3.2 場景1

    • 3.3 場景2

  • 4. 總結

本章重點: 從源碼角度分析hpa的計算邏輯

1. hpa介紹

1.1 hpa是什么

hpa指的是 Pod 水平自動擴縮,全名是Horizontal Pod Autoscaler簡稱HPA。它可以基于 CPU 利用率或其他指標自動擴縮 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 數量。

用處: 用戶可以通過設置hpa,實現deploy pod數量的自動擴縮容。比如流量大的時候,pod數量多一些。流量小的時候,Pod數量降下來,避免資源浪費。

1.2 hpa如何用起來

(1)需要一個deploy/svc等,可以參考社區

(2)需要對應的hpa

舉例:

(1) 創建1個deploy。這里只有1個副本

apiVersion: apps/v1 kind: Deployment metadata:labels:app: zx-hpa-testname: zx-hpa spec:strategy:type: RollingUpdaterollingUpdate:maxSurge: 1replicas: 2selector:matchLabels:app: zx-hpa-testtemplate:metadata:labels:app: zx-hpa-testname: zx-hpa-testspec:terminationGracePeriodSeconds: 5containers:- name: busyboximage: busybox:latestimagePullPolicy: IfNotPresentcommand:- sleep- "3600"

(2)創建對應的hpa。

apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata:name: nginx-hpa-zx-1annotations:metric-containerName: zx-hpa spec:scaleTargetRef:apiVersion: apps/v1 ? // 這里必須指定需要監控那個對象kind: Deploymentname: zx-hpaminReplicas: 1 ? ? ? ? // deploy最小的Pod數量maxReplicas: 3 ? ? ? ? // deploy最大的Pod數量metrics:- type: Podspods:metricName: pod_cpu_1mtargetAverageValue: 60

hpa是從同命名空間下,找對應的deploy。所以yaml中指定deploy的時候不要指定namespaces。這也就要求,hpa 和deploy必須在同一命名空間。

這里我使用的 pod_cpu_1m這個指標。這是一個自定義指標。接下來就是分析

創建好之后,觀察hpa,當deploy的cpu利用率變化時,deploy的副本會隨之改變。

2. hpa 源碼分析

2.1 啟動參數介紹

hpa controller隨controller manager的初始化而啟動,hpa controller將以下flag添加到controller manager的flag中,通過controller manager的CLI端暴露給用戶:

// AddFlags adds flags related to HPAController for controller manager to the specified FlagSet. func (o *HPAControllerOptions) AddFlags(fs *pflag.FlagSet) {if o == nil {return} ?fs.DurationVar(&o.HorizontalPodAutoscalerSyncPeriod.Duration, "horizontal-pod-autoscaler-sync-period", o.HorizontalPodAutoscalerSyncPeriod.Duration, "The period for syncing the number of pods in horizontal pod autoscaler.")fs.DurationVar(&o.HorizontalPodAutoscalerUpscaleForbiddenWindow.Duration, "horizontal-pod-autoscaler-upscale-delay", o.HorizontalPodAutoscalerUpscaleForbiddenWindow.Duration, "The period since last upscale, before another upscale can be performed in horizontal pod autoscaler.")fs.MarkDeprecated("horizontal-pod-autoscaler-upscale-delay", "This flag is currently no-op and will be deleted.")fs.DurationVar(&o.HorizontalPodAutoscalerDownscaleStabilizationWindow.Duration, "horizontal-pod-autoscaler-downscale-stabilization", o.HorizontalPodAutoscalerDownscaleStabilizationWindow.Duration, "The period for which autoscaler will look backwards and not scale down below any recommendation it made during that period.")fs.DurationVar(&o.HorizontalPodAutoscalerDownscaleForbiddenWindow.Duration, "horizontal-pod-autoscaler-downscale-delay", o.HorizontalPodAutoscalerDownscaleForbiddenWindow.Duration, "The period since last downscale, before another downscale can be performed in horizontal pod autoscaler.")fs.MarkDeprecated("horizontal-pod-autoscaler-downscale-delay", "This flag is currently no-op and will be deleted.")fs.Float64Var(&o.HorizontalPodAutoscalerTolerance, "horizontal-pod-autoscaler-tolerance", o.HorizontalPodAutoscalerTolerance, "The minimum change (from 1.0) in the desired-to-actual metrics ratio for the horizontal pod autoscaler to consider scaling.")fs.BoolVar(&o.HorizontalPodAutoscalerUseRESTClients, "horizontal-pod-autoscaler-use-rest-clients", o.HorizontalPodAutoscalerUseRESTClients, "If set to true, causes the horizontal pod autoscaler controller to use REST clients through the kube-aggregator, instead of using the legacy metrics client through the API server proxy. This is required for custom metrics support in the horizontal pod autoscaler.")fs.DurationVar(&o.HorizontalPodAutoscalerCPUInitializationPeriod.Duration, "horizontal-pod-autoscaler-cpu-initialization-period", o.HorizontalPodAutoscalerCPUInitializationPeriod.Duration, "The period after pod start when CPU samples might be skipped.")fs.MarkDeprecated("horizontal-pod-autoscaler-use-rest-clients", "Heapster is no longer supported as a source for Horizontal Pod Autoscaler metrics.")fs.DurationVar(&o.HorizontalPodAutoscalerInitialReadinessDelay.Duration, "horizontal-pod-autoscaler-initial-readiness-delay", o.HorizontalPodAutoscalerInitialReadinessDelay.Duration, "The period after pod start during which readiness changes will be treated as initial readiness.") } 參數默認說明
horizontal-pod-autoscaler-sync-period15scontroller同步HPA信息的同步周期
horizontal-pod-autoscaler-downscale-stabilization5m縮容穩定窗口,縮容間隔時間(v1.12支持)
horizontal-pod-autoscaler-tolerance0.1最小縮放容忍度:計算出的期望值和實際值的比率<最小容忍比率,則不進行擴縮容
horizontal-pod-autoscaler-cpu-initialization-period5mpod剛啟動時,一定時間內的CPU使用率數據不參與計算。
horizontal-pod-autoscaler-initial-readiness-delay30s擴容等待pod ready的時間(無法得知pod何時就緒)

kcm中需要設置這個,才能啟動自定義的rest-clients。 –horizontal-pod-autoscaler-use-rest-clients=true

2.2 啟動流程

代碼流程:

startHPAControllerWithMetricsClient -> startHPAControllerWithMetricsClient -> Run -> worker -> processNextWorkItem -> reconcileKey->reconcileAutoscaler

func (a *HorizontalController) reconcileKey(key string) (deleted bool, err error) {namespace, name, err := cache.SplitMetaNamespaceKey(key)if err != nil {return true, err} ?hpa, err := a.hpaLister.HorizontalPodAutoscalers(namespace).Get(name)if errors.IsNotFound(err) {klog.Infof("Horizontal Pod Autoscaler %s has been deleted in %s", name, namespace)delete(a.recommendations, key)return true, nil} ?return false, a.reconcileAutoscaler(hpa, key) }

2.3 核心計算邏輯

metric的定義類型分為3種,resource、pods和external,這里只分析pods類型的metric。

reconcileAutoscaler函數就是hpa的核心函數。該函數主要邏輯如下:

  • 1.做一些類型轉換,用于接下來的Hpa計算

  • 2.計算hpa 的期望副本數量。

  • 3.根據計算的結果判斷是否需要改變副本數,需要改變的話,調用接口修改,然后做錯誤處理。

func (a *HorizontalController) reconcileAutoscaler(hpav1Shared *autoscalingv1.HorizontalPodAutoscaler, key string) error {// 1. 調用client向apiserver發送請求,scale是返回的hpa實體,然后做各種數據類型轉換,然后通過一個client向apiserver獲取scale,以及當然還有一些backup、把錯誤寫入hpa event的操作 。。。。代碼省略 ? // 2. 判斷是否需要計算副本數,如果需要,就調用computeReplicasForMetrics函數計算當前hpa的副本數。desiredReplicas := int32(0)rescaleReason := "" ?var minReplicas int32 ?if hpa.Spec.MinReplicas != nil {minReplicas = *hpa.Spec.MinReplicas} else {// Default valueminReplicas = 1} ?rescale := true ?if scale.Spec.Replicas == 0 && minReplicas != 0 {// Autoscaling is disabled for this resourcedesiredReplicas = 0rescale = falsesetCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionFalse, "ScalingDisabled", "scaling is disabled since the replica count of the target is zero")} else if currentReplicas > hpa.Spec.MaxReplicas {rescaleReason = "Current number of replicas above Spec.MaxReplicas"desiredReplicas = hpa.Spec.MaxReplicas} else if currentReplicas < minReplicas {rescaleReason = "Current number of replicas below Spec.MinReplicas"desiredReplicas = minReplicas} else {var metricTimestamp time.TimemetricDesiredReplicas, metricName, metricStatuses, metricTimestamp, err = a.computeReplicasForMetrics(hpa, scale, hpa.Spec.Metrics)if err != nil {a.setCurrentReplicasInStatus(hpa, currentReplicas)if err := a.updateStatusIfNeeded(hpaStatusOriginal, hpa); err != nil {utilruntime.HandleError(err)}a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedComputeMetricsReplicas", err.Error())return fmt.Errorf("failed to compute desired number of replicas based on listed metrics for %s: %v", reference, err)} ?klog.V(4).Infof("proposing %v desired replicas (based on %s from %s) for %s", metricDesiredReplicas, metricName, metricTimestamp, reference) ?rescaleMetric := ""if metricDesiredReplicas > desiredReplicas {desiredReplicas = metricDesiredReplicasrescaleMetric = metricName}if desiredReplicas > currentReplicas {rescaleReason = fmt.Sprintf("%s above target", rescaleMetric)}if desiredReplicas < currentReplicas {rescaleReason = "All metrics below target"}desiredReplicas = a.normalizeDesiredReplicas(hpa, key, currentReplicas, desiredReplicas, minReplicas)rescale = desiredReplicas != currentReplicas}// 3.進行擴縮容,并進行錯誤處理。if rescale {scale.Spec.Replicas = desiredReplicas_, err = a.scaleNamespacer.Scales(hpa.Namespace).Update(targetGR, scale)if err != nil {a.eventRecorder.Eventf(hpa, v1.EventTypeWarning, "FailedRescale", "New size: %d; reason: %s; error: %v", desiredReplicas, rescaleReason, err.Error())setCondition(hpa, autoscalingv2.AbleToScale, v1.ConditionFalse, "FailedUpdateScale", "the HPA controller was unable to update the target scale: %v", err)a.setCurrentReplicasInStatus(hpa, currentReplicas)if err := a.updateStatusIfNeeded(hpaStatusOriginal, hpa); err != nil {utilruntime.HandleError(err)}return fmt.Errorf("failed to rescale %s: %v", reference, err)}setCondition(hpa, autoscalingv2.AbleToScale, v1.ConditionTrue, "SucceededRescale", "the HPA controller was able to update the target scale to %d", desiredReplicas)a.eventRecorder.Eventf(hpa, v1.EventTypeNormal, "SuccessfulRescale", "New size: %d; reason: %s", desiredReplicas, rescaleReason)klog.Infof("Successful rescale of %s, old size: %d, new size: %d, reason: %s",hpa.Name, currentReplicas, desiredReplicas, rescaleReason)} else {klog.V(4).Infof("decided not to scale %s to %v (last scale time was %s)", reference, desiredReplicas, hpa.Status.LastScaleTime)desiredReplicas = currentReplicas} ?a.setStatus(hpa, currentReplicas, desiredReplicas, metricStatuses, rescale)return a.updateStatusIfNeeded(hpaStatusOriginal, hpa) }

這里主要關心第二個步驟:hpa如何計算期望副本數量

2.4 計算期望副本數量

概念:

最小值:minReplicas。 這個是用戶在hpa里面的yaml設置的。這個是可選的,如果不設置,默認是1。

最大值:MaxReplicas。 這個是用戶在hpa里面的yaml設置的。這個必填的,如果不設置,會報錯, 如下。

當前值:currentReplicas。這個是hpa獲得的當前deploy的副本數量。

期望值:desiredReplicas。 這個是hpa希望deploy的副本數量。

error: error validating "nginx-deployment-hpa-test.yaml": error validating data: ValidationError(HorizontalPodAutoscaler.spec): missing required field "maxReplicas" in io.k8s.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec; if you choose to ignore these errors, turn validation off with --validate=false

計算邏輯分為兩部分,第一種情況是不需要算,就可以直接得出期望值。 第二種情況需要調用函數計算。

情況1:不需要計算

(1)當前值等于0。 期望值=0. 不擴容,

(2)當前值 > 最大值。 沒必要計算期望值。 期望值=最大值,需要擴縮容。

(3)當前值 < 最小值。 沒必要計算期望值。 期望值=最小值,需要擴縮容。

情況2: 最小值 <= 當前值 <= 最大值。 需要調用函數計算 期望值。

這里的調用鏈為 computeReplicasForMetrics -> computeReplicasForMetric -> GetMetricReplicas

這里computeReplicasForMetrics有一個需要注意的點就是。這里可以處理了多個metric的情況。例如:這里一個hpa有多個指標。

- type: Resourceresource:name: cpu# Utilization類型的目標值,Resource類型的指標只支持Utilization和AverageValue類型的目標值target:type: UtilizationaverageUtilization: 50# Pods類型的指標- type: Podspods:metric:name: packets-per-second# AverageValue類型的目標值,Pods指標類型下只支持AverageValue類型的目標值target:type: AverageValueaverageValue: 1k

這里hpa的邏輯是,誰最大取誰。例如, 通過cpu.Utilization hpa算出來應該需要 4個pod。 但是packets-per-second算出來需要5個。這個時候就已5個為準。見下面代碼:

// computeReplicasForMetrics computes the desired number of replicas for the metric specifications listed in the HPA, // returning the maximum of the computed replica counts, a description of the associated metric, and the statuses of // all metrics computed. func (a *HorizontalController) computeReplicasForMetrics(hpa *autoscalingv2.HorizontalPodAutoscaler, scale *autoscalingv1.Scale,metricSpecs []autoscalingv2.MetricSpec) (replicas int32, metric string, statuses []autoscalingv2.MetricStatus, timestamp time.Time, err error) { ?for i, metricSpec := range metricSpecs {replicaCountProposal, metricNameProposal, timestampProposal, condition, err := a.computeReplicasForMetric(hpa, metricSpec, specReplicas, statusReplicas, selector, &statuses[i]) ?if err != nil {if invalidMetricsCount <= 0 {invalidMetricCondition = conditioninvalidMetricError = err}invalidMetricsCount++}if err == nil && (replicas == 0 || replicaCountProposal > replicas) {timestamp = timestampProposalreplicas = replicaCountProposalmetric = metricNameProposal}} ?// If all metrics are invalid return error and set condition on hpa based on first invalid metric.if invalidMetricsCount >= len(metricSpecs) {setCondition(hpa, invalidMetricCondition.Type, invalidMetricCondition.Status, invalidMetricCondition.Reason, invalidMetricCondition.Message)return 0, "", statuses, time.Time{}, fmt.Errorf("invalid metrics (%v invalid out of %v), first error is: %v", invalidMetricsCount, len(metricSpecs), invalidMetricError)}setCondition(hpa, autoscalingv2.ScalingActive, v1.ConditionTrue, "ValidMetricFound", "the HPA was able to successfully calculate a replica count from %s", metric)return replicas, metric, statuses, timestamp, nil }

針對具體某個metric指標。計算分為倆步:

(1)GetRawMetric函數: 得到 具體的metric值

(2)calcPlainMetricReplicas :計算期望副本值

這里需要注意一點就是targetUtilization進行了數據轉換。乘以了10^3。

// GetMetricReplicas calculates the desired replica count based on a target metric utilization // (as a milli-value) for pods matching the given selector in the given namespace, and the // current replica count func (c *ReplicaCalculator) GetMetricReplicas(currentReplicas int32, targetUtilization int64, metricName string, namespace string, selector labels.Selector, metricSelector labels.Selector) (replicaCount int32, utilization int64, timestamp time.Time, err error) {metrics, timestamp, err := c.metricsClient.GetRawMetric(metricName, namespace, selector, metricSelector)if err != nil {return 0, 0, time.Time{}, fmt.Errorf("unable to get metric %s: %v", metricName, err)} ?replicaCount, utilization, err = c.calcPlainMetricReplicas(metrics, currentReplicas, targetUtilization, namespace, selector, v1.ResourceName(""))return replicaCount, utilization, timestamp, err }

2.4.1 GetRawMetric-具體的metric值

// GetRawMetric gets the given metric (and an associated oldest timestamp) // for all pods matching the specified selector in the given namespace func (c *customMetricsClient) GetRawMetric(metricName string, namespace string, selector labels.Selector, metricSelector labels.Selector) (PodMetricsInfo, time.Time, error) {// 1.這里直接調用 GetForObjects,發送restful請求獲取數據metrics, err := c.client.NamespacedMetrics(namespace).GetForObjects(schema.GroupKind{Kind: "Pod"}, selector, metricName, metricSelector)if err != nil {return nil, time.Time{}, fmt.Errorf("unable to fetch metrics from custom metrics API: %v", err)} ?if len(metrics.Items) == 0 {return nil, time.Time{}, fmt.Errorf("no metrics returned from custom metrics API")}// 2. 對獲取的數據進行處理。這里看起來是乘以了 10^3res := make(PodMetricsInfo, len(metrics.Items))for _, m := range metrics.Items {window := metricServerDefaultMetricWindowif m.WindowSeconds != nil {window = time.Duration(*m.WindowSeconds) * time.Second}res[m.DescribedObject.Name] = PodMetric{Timestamp: m.Timestamp.Time,Window: ? window,Value: ? ? int64(m.Value.MilliValue()),} ?m.Value.MilliValue()} ?timestamp := metrics.Items[0].Timestamp.Time ?return res, timestamp, nil }

2.4.2 calcPlainMetricReplicas-計算期望副本值

這里代碼省略,直接貼邏輯。

3.1 先從apiserver端拿到所有相關的pod,將這些pod分為三類:

a.missingPods用于記錄處于running狀態,但不提供該metric的pod ? b.ignoredPods 用于處理resource類型cpu相關metric的延遲(就是pod未就緒),這里不深入討論 ? c.readyPodCount記錄狀態為running,且能提供該metric的pod

3.2 調用GetMetricUtilizationRatio計算實際值與期望值的對比情況。計算時,對于所有可獲取到metric的pod,取它們metric value的平均值得到:usageRatio=實際值/期望值;utilization=實際值(平均)

3.3 計算期望pod數量DesiredReplicas。對于missingPods為0,即所有target pod都處于running可獲取metric value的情況:

a.如果實際值與期望值的對比usageRatio處于可容忍范圍內,不執行scale操作。默認情況下c.tolerance=0.1,即usageRatio處于

[0.9,1.1]時pod數量不變化

if math.Abs(1.0-usageRatio) <= c.tolerance {// return the current replicas if the change would be too smallreturn currentReplicas, utilization, nil }

b.實際值與期望值的對比usageRatio不在可容忍范圍內,向上取整得到desiredReplicas return int32(math.Ceil(usageRatio * float64(readyPodCount))), utilization, nil

對于missingPods>0,即有target pod的metric value沒有獲取到的情況。 縮容時,對于找不到metric的pod,視為正好用了desired value

if usageRatio < 1.0 { // on a scale-down, treat missing pods as using 100% of the resource request for podName := range missingPods {metrics[podName] = metricsclient.PodMetric{Value: targetUtilization}} }

擴容時,對于找不到metric的pod,視為該pod對指定metric的使用量為0

for podName := range missingPods {metrics[podName] = metricsclient.PodMetric{Value: 0} }

經過上面的處理后,重新計算實際值與期望值的對比newUsageRatio。

在下面兩種情況下,不執行scale操作:新的實際值與期望值的對比newUsageRatio在容忍范圍內; 賦值處理前后,一個需要scale up,另一個需要scale down。

其它情況下,同樣地執行向上取整操作

if math.Abs(1.0-newUsageRatio) <= c.tolerance || (usageRatio < 1.0 && newUsageRatio > 1.0) || (usageRatio > 1.0 && newUsageRatio < 1.0) {// return the current replicas if the change would be too small,// or if the new usage ratio would cause a change in scale directionreturn currentReplicas, utilization, nil} return int32(math.Ceil(newUsageRatio * float64(len(metrics)))), utilization, nil

最后,Hpa將desiredReplicas寫到scale.Spec.Replicas,調用a.scaleNamespacer.Scales(hpa.Namespace).Update(targetGR, scale)向apiserver發送更新hpa的請求,對某個hpa的一輪更新操作就完成了。

3. 舉例說明計算過程

3.1 hpa擴容計算邏輯

關鍵概念:tolerance(hpa擴容容忍度), 默認為0.1。

Custom server: 自定義metric服務。這里是一個抽象,用于給hpa提供具體的metric值。Custom server具體可以是prometheus,或者其他的監控系統。下一篇文章會講如何將Custom server和hpa聯系起來。

3.2 場景1

當前有deployA, 運行著倆個pod, A1和A2。 deploy設置了hpa,指標是內存使用量,并且規定,當平均使用量大于60就要擴容。

hpa擴容計算步驟:

第一步: 往monitor-adaptor發送請求, 要求獲得deployA下所有pod的metric值。 這里收到了 A1=50; A2=100

第二步: 補全metric值,給獲取不到metric值的pod賦值。 這里hpa會查看集群狀態,發現deployA 下有倆個pod,A1,A2。并且這兩個pod的metric值都獲取到了。 這個時候就不用補全。(下面例子就介紹需要補全metric的情況)

第三步: 開始計算

(1)計算 平均pod metric值和 target的比例。也可以叫擴容比例系數

ratio = (A1+A2)/(2*target) = (50+100)/120 = 1.25

按理說不用再除target值,直接(50+100)/2=75,然后拿75和60比就行。 75比60大就應該擴容。

這里使用系數表示主要有倆個原因:

  • 有容忍度的概念,使用比例方便和計算是否超出了容忍度

  • 用于擴縮容計算

(2)判斷是否超過容忍度

這里 1.25-1 > 0.1(默認容忍度)。 因此這種情況是需要擴容的。

這里就體現了容忍度的作用。有了容忍度, 平均metric需要大于 66才會擴容(60*1.1)

(3)計算真正的副本數量

向上取整: 擴容比例系數*當前的副本數

這里就是: 1.25*2 = 2.5 , 取整后就是3。

3.3 場景2

和場景1不同在于:由于某件原因,導致 monitor-adaptor往hpa發送的時候,只有 A1=20。 A2的數據丟失。

?

?

hpa擴容計算步驟:

第一步: 往monitor-adaptor發送請求, 要求獲得deployA下所有pod的metric值。 這里收到了 A1=2;

第二步: 補全metric值,給獲取不到metric值的pod賦值。 這里hpa會查看集群狀態,發現deployA 下有倆個pod,A1,A2。但是這里發現只有A1的值,這個時候hpa就認為A2 有數據,但是獲取失敗。所以就會給A2自己賦值, 0/target。

賦值邏輯如下: 當 A1 > target的時候,A2=0; 當A1<= target的時候,賦值為 target。

這里由于 A1=2, 比target(60)小,所以最終hpa計算時:

A1=2; A2=60; target=60;

第三步: 開始計算

(1)計算 平均pod metric值和 target的比例。也可以叫擴容比例系數

ratio = (A1+A2)/(2*target) = (2+60)/120 = 0.517

(2)判斷是否超過容忍度

這里 1-0.517 > 0.1(默認容忍度)。 因此這種情況是需要縮容的。

(3)計算真正的副本數量

向上取整: 擴容比例系數*當前的副本數(這里就是metric數量,A1,A2)

對應就是: 0.517*2 = 1.034 , 取整后就是2。

4. 總結

(1)hpa可以設置多個metric。當有多個metric時,誰算出來的副本值最大,取誰的值

(2)針對具體的metric而言(這里是以pods這種為例),首先獲得用戶定義的hpa指標。比如最大值,最小值,閾值等。

這里有一個點在于。閾值乘以了1000用于計算。

(3)獲取metric的值,這里是使用了自定義rest服務。hpa只要發送rest請求,就有數據。這種情況非常適用于公司使用自己的監控數據做擴縮容。 注意:這里每個值也乘以了1000。這樣和閾值就是相互抵消了。

(4)利用公式計算期望值。 期望值*X <= 當前pod所有的metric值。X取小的正整數。具體邏輯可以看上文的計算過程。

總結

以上是生活随笔為你收集整理的hpa原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩影视大全 | 在线看片成人 | 久久免费高清视频 | 久草精品在线播放 | av电影在线免费观看 | 91黄色在线视频 | 综合色婷婷 | av字幕在线| 亚洲精品网址在线观看 | 国产精品一区久久久久 | 久久五月婷婷丁香 | 久保带人 | 久久理论影院 | 亚洲日韩中文字幕在线播放 | 麻豆影视网 | 天天干人人插 | 91九色porn在线资源 | 亚洲欧美日韩国产一区二区三区 | 国产精品岛国久久久久久久久红粉 | 免费高清看电视网站 | 国产国产人免费人成免费视频 | 丁香婷婷在线观看 | 超碰人人91| 91麻豆精品一区二区三区 | 二区三区精品 | 日韩av偷拍 | 中文字幕色网站 | 国产丝袜 | wwwav视频| 亚洲精品久久久久久久不卡四虎 | 久久av伊人 | 三级午夜片 | 天天av资源| 91在线国产观看 | 国产破处精品 | 黄色av一级 | 97在线免费观看 | 天天射综合网视频 | 97超碰在线久草超碰在线观看 | 99视频网站 | 亚洲精品a区 | 91精品小视频 | 久久中文字幕视频 | 免费欧美高清视频 | 一区二区 不卡 | 日日夜夜精品免费 | 狠狠躁夜夜躁人人爽视频 | 成人午夜影院 | 久久精品国产一区二区电影 | 国产精品精品国产 | 成人在线免费小视频 | 色视频在线 | 国产原厂视频在线观看 | 在线观看韩国av | 99精品热视频只有精品10 | 亚洲精品在线看 | 久久久亚洲精品 | 99久久精品午夜一区二区小说 | 人人揉人人揉人人揉人人揉97 | 日躁夜躁狠狠躁2001 | 99视频这里只有 | 91av资源在线 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国产在线中文字幕 | 欧美亚洲另类在线视频 | 亚洲国产中文在线 | 91福利视频在线 | 色噜噜日韩精品一区二区三区视频 | 操操操操网 | 特级毛片aaa | 在线视频a | 狠狠狠色狠狠色综合 | 欧美国产日韩一区二区三区 | 亚洲欧美国产精品va在线观看 | 国产精品一区二区在线播放 | 狠狠干免费 | 亚洲永久字幕 | 中文字幕在线观看视频一区 | 国产超碰97 | 久久免费视频在线观看 | 丁香六月婷婷开心婷婷网 | 91在线播放综合 | av成人免费观看 | 国产精品久久久久亚洲影视 | 美女黄久久 | 最新中文字幕视频 | www欧美色| 在线观看免费av网站 | 国产精品高潮呻吟久久久久 | 国产精品一区二区在线播放 | 五月天久久久 | 91亚洲精品乱码久久久久久蜜桃 | 欧美一级视频一区 | 国产精品久久久久影院 | 久久久亚洲网站 | 国产精品久久久久一区二区国产 | 成年人免费在线观看网站 | 国内丰满少妇猛烈精品播 | 国产不卡av在线 | 日韩精品第1页 | bbw av| 天堂资源在线观看视频 | 成年人在线看片 | 久久久久久久免费 | 久久天天躁 | 99久久精品国产亚洲 | 91精品久久久久久综合乱菊 | 五月天最新网址 | 成人精品视频久久久久 | 99爱精品视频 | 激情五月色播五月 | 国产综合视频在线观看 | 日韩精品免费一区二区 | 日韩啪啪小视频 | 日本激情视频中文字幕 | 日韩特黄一级欧美毛片特黄 | japanesefreesexvideo高潮 | 久艹视频在线免费观看 | 久久一级电影 | 午夜精品视频一区二区三区在线看 | 亚洲一区二区三区四区精品 | 狠狠色狠狠色综合日日小说 | 中文字幕在线观看免费高清电影 | 亚洲一区二区精品视频 | 九九热免费在线观看 | www.啪啪.com| 日韩免费网址 | 久久国产亚洲视频 | 色婷婷六月天 | www91在线观看 | 国产亚洲精品美女久久 | 国产精品毛片久久 | 成人av免费播放 | 色婷婷激情五月 | 午夜视频黄| 国产亚洲一区二区在线观看 | 日韩视频免费观看高清 | 欧美性色综合网 | 日韩成人免费在线电影 | 超碰在线最新地址 | 亚洲不卡av一区二区三区 | 亚洲黄色免费在线 | 久久草草热国产精品直播 | 狠狠色婷婷丁香六月 | 国产黄色看片 | 久久涩视频 | 五月综合色婷婷 | 美女视频黄网站 | 国产美女无遮挡永久免费 | 国产一级免费av | 成人免费观看大片 | 中文字幕精品一区二区精品 | 国产亚洲综合性久久久影院 | 欧美性色黄 | 五月天视频网站 | 99久久久久久久 | 中文字幕成人网 | 男女视频91| 欧美日韩在线观看不卡 | 国产精品免费久久久久久久久久中文 | 日本精品在线 | 黄色片亚洲 | 狠狠色噜噜狠狠狠狠 | 国产精品嫩草影院123 | 97超级碰碰 | 丁香花中文在线免费观看 | 狠狠色丁香婷婷综合久久片 | 欧美成人h版 | 丁香国产视频 | 国产激情久久久 | 视频在线精品 | 日韩在线观看视频免费 | 高清av免费看 | 欧美日韩另类在线观看 | 超碰国产在线播放 | 91av在线播放 | 国产精品区在线观看 | 亚洲天堂网在线播放 | 国产精品ⅴa有声小说 | 日韩在线一区二区免费 | 黄色福利网 | 97网| 天堂av高清 | 日韩高清av在线 | 国产精品综合久久久久 | 啪啪av在线 | 国产精品欧美日韩在线观看 | 成人一级电影在线观看 | 天天爽天天爽夜夜爽 | 久久人人爽人人爽人人片av免费 | 国产成人久久精品77777综合 | av黄色在线观看 | 天天操天天干天天操天天干 | 香蕉视频网站在线观看 | 97精品国产91久久久久久久 | av黄色av | 我爱av激情网 | 最新av网址在线观看 | 日本三级香港三级人妇99 | 国产美女在线免费观看 | 日韩中文字幕免费在线观看 | 日韩精品网址 | 91精品国自产在线 | 97国产情侣爱久久免费观看 | 最近字幕在线观看第一季 | 日本乱视频 | 国产在线观看你懂的 | 国产精品小视频网站 | 在线 视频 一区二区 | 91色在线观看视频 | 81精品国产乱码久久久久久 | 成年美女黄网站色大片免费看 | 久草在线综合网 | 黄免费在线观看 | 日本成人中文字幕在线观看 | 天天曰 | 久久久高清一区二区三区 | 91成人在线看 | 国产一区二区日本 | 麻豆视频国产精品 | 成人av一区二区兰花在线播放 | 9992tv成人免费看片 | 中文电影网 | 国产一线天在线观看 | 成人免费视频观看 | 91尤物国产尤物福利在线播放 | 亚洲少妇自拍 | 在线导航福利 | 久久久久国产精品厨房 | 国产999在线| 九色免费视频 | 国产精品尤物 | 在线观看成年人 | 日韩高清不卡一区二区三区 | 国产成人精品在线 | 97超碰人人澡 | 一级大片在线观看 | 精品久久一 | 亚洲欧美在线综合 | 四虎免费av | 天天操夜夜叫 | 五月天伊人 | 天天爱天天操 | 又黄又爽又湿又无遮挡的在线视频 | 超碰97免费在线 | 亚洲精品综合欧美二区变态 | 久久99亚洲网美利坚合众国 | 一区二区三区在线视频111 | 亚洲免费婷婷 | 国产精品永久免费在线 | 国产污视频在线观看 | 色妞久久福利网 | 91禁在线观看 | 国产成人精品一区二区 | 国产高清av免费在线观看 | 深爱五月网| 色综合激情久久 | 亚洲,国产成人av | 久久三级视频 | 国产精品美女免费视频 | 亚洲国产视频a | 黄色小说免费在线观看 | 三级在线播放视频 | 国产福利中文字幕 | av成人在线网站 | 国产传媒一区在线 | 成人在线免费av | 色综合久久88色综合天天 | 久草a在线 | 91传媒免费在线观看 | 六月激情丁香 | 在线观看免费色 | 国产91aaa | 蜜臀av性久久久久蜜臀av | 亚洲国产片色 | 一区二区中文字幕在线观看 | 丰满少妇久久久 | 国产高清亚洲 | 亚洲精品激情 | 国产精品一区在线观看你懂的 | 麻花豆传媒一二三产区 | 国产亚洲va综合人人澡精品 | 国精产品999国精产 久久久久 | 97精品国自产拍在线观看 | 久久色在线播放 | 亚洲一区二区三区毛片 | 亚洲精品乱码久久久久久按摩 | 五月天色站 | 国产日韩视频在线播放 | 日本三级香港三级人妇99 | 精品亚洲免费视频 | 中文字幕av在线播放 | 91看片网址 | 免费日韩高清 | 天堂视频中文在线 | 91香蕉嫩草 | 国产精品欧美久久久久无广告 | 精品中文字幕在线观看 | 免费又黄又爽 | 13日本xxxxxⅹxxx20 | 久久久亚洲国产精品麻豆综合天堂 | 激情视频国产 | 四虎在线免费观看 | 日韩中文字幕免费 | 欧美日韩调教 | 狂野欧美激情性xxxx欧美 | 国产精品24小时在线观看 | 亚洲精品乱码久久久久久按摩 | 免费欧美高清视频 | 婷婷精品国产一区二区三区日韩 | 亚洲精品在线一区二区 | 国产精品毛片一区二区在线看 | 国产精品99久久久久久宅男 | 久久九九影视 | 一区二区三区免费网站 | 狠狠搞,com | 国内精品国产三级国产aⅴ久 | 亚洲一区黄色 | www五月天com | 91精品一 | 日韩精品亚洲专区在线观看 | 91在线视频免费观看 | 国产午夜视频在线观看 | a在线观看视频 | 99视频精品全部免费 在线 | 久久人人爽人人人人片 | 国产精品久久久久久久久久久久午夜片 | 91av视频免费观看 | 久久精品国产美女 | 四虎小视频 | 久久国产剧场电影 | 色在线免费 | 丁香激情综合久久伊人久久 | 色多多污污在线观看 | 日韩电影精品一区 | 免费看污的网站 | 欧美一级黄大片 | 日韩中文在线观看 | 久久天天躁狠狠躁夜夜不卡公司 | 欧美精品一二 | 日韩电影一区二区三区在线观看 | 97碰碰视频| 三级性生活视频 | 亚洲视频综合 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 免费欧美 | 国产伦精品一区二区三区免费 | 日韩手机视频 | 久久精视频 | 黄色亚洲片| 日韩精品一区二区在线视频 | 摸阴视频 | 91女神的呻吟细腰翘臀美女 | 九九精品久久 | 一区二区三区四区在线免费观看 | 久久精品免费看 | 中文字幕一区二区三区精华液 | 又粗又长又大又爽又黄少妇毛片 | 婷婷四房综合激情五月 | 最新国产在线观看 | 久久一区二区三区四区 | 丝袜足交在线 | 超级碰碰免费视频 | 亚洲精品黄色在线观看 | 97色婷婷成人综合在线观看 | 黄色亚洲 | 国产精品18久久久久久vr | 一级大片在线观看 | 九九九九九精品 | 午夜性生活片 | 久久免费精品 | 久操视频在线 | 久久久久久久久久久久久9999 | 一本一道久久a久久综合蜜桃 | 激情丁香久久 | 丁香视频免费观看 | 超碰大片 | 国产日产精品一区二区三区四区 | 日日夜夜综合网 | av官网在线 | 国产小视频免费在线网址 | 亚洲成人欧美 | 九九爱免费视频 | 国产亚洲精品久久久久久电影 | 99久热在线精品 | 六月色| 日本大尺码专区mv | 狠狠色噜噜狠狠狠狠 | av 一区 二区 久久 | 激情视频91 | 波多野结衣日韩 | 99视频99| 亚洲日本va在线观看 | 国产又粗又猛又黄视频 | 久久精品欧美一区 | 亚洲精品麻豆视频 | 久久手机视频 | 玖玖在线精品 | 99re6热在线精品视频 | 国产精品18videosex性欧美 | 综合久久久久久 | 久久久久久久久久免费视频 | 国产亚洲人成网站在线观看 | 国产成人精品一区二区三区网站观看 | 精品毛片久久久久久 | 久久精品免费播放 | 99精品欧美一区二区三区黑人哦 | 免费国产黄线在线观看视频 | 99久久日韩精品免费热麻豆美女 | 欧美激情片在线观看 | 久久手机免费观看 | 福利视频一区二区 | 日韩性色| 日本精品一二区 | 欧美成人在线免费 | 久久精品视频网 | 国外av在线 | 久久综合色一综合色88 | 激情综合网五月激情 | 在线观看一区视频 | 国产一区黄色 | 日韩免费视频线观看 | 黄色最新网址 | 99久久国产免费,99久久国产免费大片 | 日韩极品视频在线观看 | 91手机电影 | 日韩精品一区二区在线观看 | 久久99九九99精品 | 97在线观看视频 | 在线看黄网站 | 97免费在线观看视频 | 中文字幕第一 | 久久久高清视频 | 丁香六月婷婷开心 | 狠狠色噜噜狠狠 | 亚洲一级黄色 | 亚洲精品www | 在线观看精品黄av片免费 | 99精品免费久久久久久日本 | av一区二区三区在线 | 成人午夜影院在线观看 | 免费观看mv大片高清 | 亚洲二区精品 | 中文字幕一二 | 欧美日韩性生活 | 韩日视频在线 | 精品国产观看 | 国产打女人屁股调教97 | 亚洲一区免费在线 | 久久精品一区二 | 人人揉人人揉人人揉人人揉97 | 久久av伊人| 超碰97人人射妻 | 99热99re6国产在线播放 | 国产亚洲精品综合一区91 | 免费观看久久 | 国产专区免费 | 亚洲一区精品人人爽人人躁 | 日韩中文免费视频 | 日韩精品一区二区三区视频播放 | 视频91| 欧美激情精品久久久久久变态 | 日本中文在线 | 久久综合九九 | 正在播放久久 | 91免费观看视频网站 | 中文字幕在线观看免费高清电影 | 99精品免费在线观看 | 午夜黄色影院 | 国产香蕉在线 | 日韩在线免费 | 久久久精品一区二区三区 | 岛国av在线免费 | 成人精品在线 | 91成人网在线 | 97视频精品 | 免费在线一区二区 | 久久一区二区免费视频 | 国产精品美女久久久久久免费 | 97国产情侣爱久久免费观看 | 久久国产精品视频免费看 | 精品一区二区三区四区在线 | 久草手机视频 | 欧美激情精品久久久久久 | 在线精品视频免费播放 | 伊人婷婷| 91成熟丰满女人少妇 | 欧美精品乱码久久久久久按摩 | 久久久在线| 在线看福利av | 中文字幕黄色网 | 久久一久久 | 五月天婷亚洲天综合网鲁鲁鲁 | 激情久久综合网 | 色多多污污在线观看 | 婷婷五综合 | 在线播放一区 | 久久精品男人的天堂 | 亚洲国产福利视频 | 人人爽人人爽人人爽人人爽 | 国产高清视频在线免费观看 | 欧洲精品久久久久毛片完整版 | 中文字幕在线观看91 | 999视频在线播放 | 亚洲成人免费在线观看 | 欧美午夜视频在线 | 国产不卡视频在线 | 激情网五月婷婷 | 国产手机在线观看 | 成人毛片在线观看 | 国产又粗又猛又色又黄视频 | 五月综合激情婷婷 | 国产中文字幕在线看 | 日韩性色| 日韩国产精品久久久久久亚洲 | 免费在线观看91 | 97自拍超碰| 麻花豆传媒一二三产区 | 国内成人精品2018免费看 | 五月天久久久久 | 欧美国产精品一区二区 | 国产系列在线观看 | 一级黄色毛片 | 91在线视频免费观看 | 在线色亚洲 | 欧美地下肉体性派对 | 天天综合久久 | 国产精品99久久久久久小说 | 在线网址你懂得 | av免费观看高清 | 欧美国产日韩一区二区三区 | 国产免费一区二区三区最新6 | 免费在线一区二区三区 | 久久久久久精 | 2019中文最近的2019中文在线 | www.色五月| 操操爽| 麻豆小视频在线观看 | 国产精品 日本 | www.69xx | 色综合 久久精品 | 91手机电影 | 天天看天天操 | 国内精品久久久久国产 | 国产成人精品日本亚洲999 | 国产精品视频免费观看 | 亚洲色图22p| 黄色免费网站大全 | 国产一级在线视频 | 精品国产成人av在线免 | 91探花视频| 热久久影视 | 人人看人人艹 | 99久久99久久精品免费 | 天天操偷偷干 | 国产精品久久久久四虎 | 久久综合五月天 | 欧美性一级观看 | 91手机在线看片 | 99国内精品 | 日韩免费电影 | 国产成人333kkk | 在线观看日本高清mv视频 | 色视频国产直接看 | 色在线视频网 | 亚洲日韩欧美视频 | 91精品久久久久久久久久入口 | 丁香五婷 | 免费a视频在线 | 久久神马影院 | 精品一区二区综合 | 国产在线一线 | 99热这里只有精品在线观看 | 午夜精品久久久久久久久久久 | 天堂网av在线 | 亚洲aaa级 | 午夜精品一区二区三区在线播放 | 日韩欧美xxx | 一区二区三区高清在线观看 | 久久视频二区 | 最新日本中文字幕 | 天天干天天操人体 | 午夜久久影院 | 麻豆精品国产传媒 | 韩国av一区| 成人av电影免费观看 | 天天操天天干天天爽 | 欧美性生爱| 国产日韩欧美视频 | 成人天堂网| 久久精品福利视频 | 亚洲成人免费在线观看 | 久久久精品久久 | 国产日产高清dvd碟片 | 亚洲精品视频免费观看 | 99免在线观看免费视频高清 | 亚洲综合视频在线 | 麻豆免费观看视频 | 深爱激情站| 久久dvd| 日韩精品免费 | av色影院 | 亚洲精品乱码久久久久久久久久 | 9999在线| 亚洲午夜久久久久久久久久久 | 色综合网 | 亚洲精品视频在线免费 | 欧美日韩一区二区在线 | 黄色a视频 | 久久特级毛片 | 国产在线a免费观看 | 国产精品久久久影视 | 97视频在线观看视频免费视频 | 成人蜜桃视频 | 九九热在线视频免费观看 | 国产在线一区二区 | 亚洲天堂网在线视频 | 国产精品12| 日韩在线高清免费视频 | 欧美日韩高清国产 | 在线日韩中文字幕 | 国产精选在线观看 | 国产91亚洲 | 日韩电影中文字幕在线 | 国产免费黄视频在线观看 | 黄色亚洲免费 | 黄色字幕网| 91插插影库| 久久久久久久精 | 国产一级电影在线 | 国产成人精品一区二区三区在线 | 福利av在线 | 99久久99热这里只有精品 | 人人添人人澡 | 激情五月播播久久久精品 | 精品国产一区二区三区噜噜噜 | 国外av在线 | 欧美午夜精品久久久久 | 亚洲精品一区二区久 | 黄色av影视 | 天天亚洲综合 | 国产精品福利无圣光在线一区 | 综合在线色 | 成人aaa毛片 | 久久色在线观看 | 成人亚洲欧美 | 美女视频久久久 | 国产精品免费一区二区三区 | 亚洲乱码精品久久久 | 顶级欧美色妇4khd | 国产一区二区在线免费播放 | 国产精品久久久久久久午夜片 | av成人免费在线观看 | 激情久久久久 | 97超碰精品 | 91亚洲精品久久久 | 中文字幕日韩av | 久久男人中文字幕资源站 | 国产高清av在线播放 | 色综合天天综合 | 国内精品久久久 | 最近最新中文字幕视频 | 国产精品乱码久久久 | av在线a| 国产乱视频 | 1区2区视频 | 五月天综合婷婷 | 久久高清 | 欧美性生活免费看 | 欧美成人一区二区 | 午夜精选视频 | 91久久久久久国产精品 | 国产偷国产偷亚洲清高 | 亚洲最快最全在线视频 | 日韩av黄 | 成人一级电影在线观看 | av免费网| 久热久草 | 婷婷久久久 | 五月婷在线播放 | 亚洲精品一区二区三区在线观看 | 亚洲欧洲精品一区 | 美女激情影院 | .国产精品成人自产拍在线观看6 | 久草www| 91视频中文字幕 | 久久久久久久久久久福利 | 色播六月天 | av丝袜制服 | 麻豆视频国产在线观看 | 五月天伊人 | 国产高清在线a视频大全 | 久久国产精品99久久久久久进口 | 午夜性盈盈 | 久久一久久 | www.久艹| 亚洲高清av | 婷婷激情综合 | 天天操天天综合网 | 日韩三级视频在线观看 | 91免费黄视频 | 日韩av一区二区在线播放 | 成人在线免费观看视视频 | 一区二区三区四区在线免费观看 | 色婷婷免费视频 | 久久精品久久久久 | 中中文字幕av在线 | 国产香蕉在线 | 香蕉视频国产在线 | 在线观看日韩 | 久久久久久久电影 | 99久高清在线观看视频99精品热在线观看视频 | www在线免费观看 | 超碰97国产精品人人cao | 97免费在线观看视频 | 极品久久久久久久 | 中文高清av| 国产又粗又长的视频 | 亚洲综合视频在线 | 国产偷国产偷亚洲清高 | 欧美福利精品 | 中文字幕一区二区三区四区久久 | 婷婷丁香六月 | 国产成人精品一区二区三区在线观看 | 香蕉91视频 | 美女免费网站 | 欧美国产不卡 | 蜜臀精品久久久久久蜜臀 | 日韩在线短视频 | 涩涩伊人| 免费在线视频一区二区 | 97电影院在线观看 | 日本黄色黄网站 | 亚洲日本一区二区在线 | 久草久草久草久草 | 色欧美成人精品a∨在线观看 | 国产成人久久精品77777 | 日韩国产精品一区 | 日日夜夜av | 伊人热 | 最近中文字幕免费大全 | www五月天com | 国产白浆在线观看 | 国产一区播放 | 婷婷综合久久 | 欧美久久久久久久久久久久久 | 国产手机视频在线播放 | 开心综合网 | 99草视频在线观看 | 男女激情网址 | 色香天天 | 欧美美女视频在线观看 | av电影在线免费观看 | 亚洲热视频 | 99久久日韩精品视频免费在线观看 | 久久久久高清毛片一级 | 人人舔人人干 | 久久韩国免费视频 | 91视频在线播放视频 | 97在线观看免费视频 | 日韩网站免费观看 | 热久久免费视频精品 | 天天干婷婷| 少妇资源站 | 天天操天天操天天爽 | 免费h视频| 91亚洲精品国偷拍 | 黄色av电影一级片 | 亚洲综合欧美日韩狠狠色 | 九九综合在线 | 精品一二三四在线 | 97在线视频观看 | 成人手机在线视频 | 国内精品久久久久久久久久久 | 中文字幕在线观看视频网站 | 91成熟丰满女人少妇 | 最近最新mv字幕免费观看 | 久草剧场 | 国产精品大片在线观看 | 91色蜜桃| 五月婷婷色播 | 亚洲精品一区二区三区新线路 | 在线观看中文字幕一区二区 | 天海冀一区二区三区 | 成人一区二区三区中文字幕 | 久久99国产精品 | 亚洲第二色 | 东方av免费在线观看 | 日p视频在线观看 | av性在线 | 国产精品美女久久久免费 | 人人澡人摸人人添学生av | 国产一区二区三区免费在线观看 | 蜜桃麻豆www久久囤产精品 | 特级西西444www大精品视频免费看 | 在线免费视频你懂的 | 国产乱码精品一区二区三区介绍 | 亚洲精品国产高清 | 九九综合在线 | 色吧久久 | 国产精品美女在线观看 | 精品国产激情 | 深夜免费福利在线 | 亚洲欧美日韩在线一区二区 | 超碰av在线播放 | 日韩视频免费在线观看 | 国产综合91 | 国产一区不卡在线 | 日韩成人精品一区二区三区 | 999视频网站 | 一级精品视频在线观看宜春院 | 五月天婷婷综合 | 91aaa在线观看| 91网免费看| 久久激情日本aⅴ | 色综合久久久久久久 | 特黄特黄的视频 | 国产高清成人在线 | 国产精品 999 | 日三级在线 | 玖玖在线观看视频 | 江苏妇搡bbbb搡bbbb | 99爱国产精品 | 在线小视频 | 亚洲在线视频播放 | 久久精品视频3 | av电影中文字幕 | 毛片播放网站 | 久久国产免费 | 国产日韩欧美在线观看 | 热99在线视频 | 色综合久久88 | 国产999在线观看 | 1024在线看片 | 免费看的黄色的网站 | 精品国产精品一区二区夜夜嗨 | 综合色狠狠 | 国产一区二区不卡视频 | 久久欧美精品 | 国产久草在线观看 | 99国内精品久久久久久久 | 色先锋av资源中文字幕 | 综合久久五月天 | 精品国产免费av | 乱男乱女www7788| 国产高清视频在线免费观看 | 成人影音在线 | adc在线观看 | 欧美一区二区精品在线 | 视频 国产区| 久99视频| 国产精品久久久久久久久蜜臀 | 青青草国产成人99久久 | 亚洲精品在线观看视频 | 91中文在线观看 | 00av视频| 青春草免费在线视频 | 欧美精品二 | 国产成人精品综合 | 久久久国产精品人人片99精片欧美一 | 天天爽夜夜爽人人爽一区二区 | 日韩av在线小说 | 国产精品一区二区免费在线观看 | 午夜av在线 | 96香蕉视频 | 中文字幕一区在线 | 最近中文字幕大全中文字幕免费 | 草久视频在线 | 五月天堂色 | 91精品一区二区三区久久久久久 | 九九热免费观看 | 人人干,人人爽 | 欧美日韩一级在线 | 亚洲女人天堂成人av在线 | 日韩精选在线观看 | 日韩av成人在线观看 | 在线观看免费一区 | 99精品电影 | 精品国产免费一区二区三区五区 | 欧美成人黄色 | 视频国产一区二区三区 | 久久国内视频 | 日韩av视屏 | av理论电影 | 欧美日韩在线观看一区 | 天天操天天干天天综合网 | 日韩欧三级 | 精品一区 在线 | 一区二区三区免费在线播放 | 久久久免费观看完整版 | 国产精品久久久久国产精品日日 | 国产91大片 | 最新av网址在线观看 | 成人av网站在线 | 亚洲精品国精品久久99热一 | 婷婷五天天在线视频 | 天天舔天天射天天操 | 国产精品久久久久久麻豆一区 | 最近免费观看的电影完整版 | 国产精品福利一区 | 成人xxxx| 午夜免费电影院 | 日日夜夜添 | 激情深爱五月 | 欧美精品久久久 | 成年人在线观看 | 96视频在线 | 国产精品久久久久久久久久久久午夜 | 特黄一级毛片 | 中文在线8资源库 | 日本久久影视 | 国产中文在线播放 | 在线视频电影 | 中文字幕精品三区 | 99精品色| 视频一区二区三区视频 | 久久99久久99免费视频 | 超碰人人在线观看 | 麻豆精品国产传媒 | 国产伦理精品一区二区 | 综合色中文 | 国产一区在线视频观看 | 日韩午夜精品福利 | 精品国产视频一区 | 国产高清视频色在线www | 日韩在线国产精品 | 麻豆mv在线观看 | 超碰在线人人草 | www国产亚洲精品久久网站 | 久久精品久久久久电影 | 天天狠狠 | 天堂av一区二区 | 17videosex性欧美 | 免费av的网站 | 久久免费观看视频 | 激情av资源| 嫩草91影院 | 国产精品嫩草影视久久久 | 天天摸天天操天天舔 | 欧美日本一区 | 美女在线黄 | 成人久久久电影 | 国产精品婷婷午夜在线观看 | 欧美色黄 | 香蕉视频在线看 | 99精品免费久久久久久久久 | 日日爽天天 | av 一区 二区 久久 | 最新av中文字幕 | 国产69精品久久99的直播节目 | 欧美激情综合五月色丁香 | 日韩91在线 | 久久欧美综合 | av一级片| 91福利社区在线观看 | 国产精品久久久久久久妇 | 国产精品国产三级国产aⅴ入口 | 久久久国产99久久国产一 | 日本在线观看中文字幕无线观看 | 国产成人91 | 91大神电影 | 久草久热 | 天天曰天天干 | 日韩精品在线一区 | 五月天开心 | 欧美日韩另类在线 | 亚洲精品国产精品国自产观看浪潮 | 黄色片视频在线观看 | 欧美一区二区三区在线观看 | 欧美日韩在线免费视频 | 久草亚洲视频 | 深爱综合网 | 亚洲一区 av| 成人一级片视频 | 国产精品久久久久久久久久久久久久 | 日韩中文幕 | 日本中文乱码卡一卡二新区 | 狠狠躁夜夜躁人人爽超碰91 | 国产精品久久久av | 成人羞羞视频在线观看免费 | 国产群p视频 | 久久国产片 | 亚洲高清在线精品 | 在线精品视频在线观看高清 | 91视频专区| 在线观看免费成人av | 欧美日韩国产一区二区三区 | 草久热 | 国产亚洲精品久久久久久无几年桃 | 欧美十八 | 九九九九九九精品任你躁 | 亚洲伊人成综合网 | 欧美日韩国产一二三区 | 色综合天天干 | 国产精品com| 免费网站在线观看人 | 国产福利在线不卡 | 在线观看亚洲精品 |