精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Rancher 生態中K3S集群的三種HPA配置試用

云計算 云原生
HPA 是英文 Horizontal Pod Autoscaler 的縮寫,就是我們說的「水平 POD 自動擴縮容」,也就是橫向擴縮容。它可以根據監控指標,自動擴縮 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 數量。HPA 可以很好的幫助服務來應對突發的流量,和普通服務中的針對 vm 的擴縮容有異曲同工之處。

本文主要講述了 K3S 集群下的 HPA 的 3 種詳細類型配置,閱讀本文你可以了解內容如下:

圖片

HPA 概念介紹

HPA 是英文 Horizontal Pod Autoscaler 的縮寫,就是我們說的「水平 POD 自動擴縮容」,也就是橫向擴縮容。它可以根據監控指標,自動擴縮 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 數量。HPA 可以很好的幫助服務來應對突發的流量,和普通服務中的針對 vm 的擴縮容有異曲同工之處。

當然除了 HPA,還有集群、縱向等類型的自動擴縮容,本文不做討論,有興趣的可參考官方倉庫和文檔[1]。

K3S 和 K8S 的 HPA 概念和使用基本一致,以下統稱容器平臺為 K8S。

HPA 工作機制

K8S 中 HPA 的工作機制大致如下:

圖片

HPA 控制器會周期性的查詢 HPA 定義的監控指標,當達到觸發條件時,觸發擴縮容動作。這個周期時間默認是 15s,可通過 Controller 的參數 --horizontal-pod-autoscaler-sync-period 來自定義。

HPA 指標類型

HPA 控制器查詢監控指標是通過 APIServer 查詢的,這些監控指標是通過 APIServer 的 聚合 (Aggregator[2] )插件機制集成到 APIServer 的,結構大致如下:

圖片

目前 HPA 支持的聚合 API 主要有以下三種:

  • metrics.k8s.io 資源類 API,由 K8S 自帶的 Metric server[3]提供,其中主要為 nodes 和 pods 的相關監控數據;
  • custom.metrics.k8s.io 自定義類 API,由第三方監控方案提供的適配器(Adapter)提供,目前常用為 Prometheus-Adapter[4]。
  • external.metrics.k8s.io 外部的 API,和 k8s 集群沒有關系的外部指標,由第三方監控方案適配器提供;

更多聚合 API 信息可參考官方文檔這里[5]。

指標類型可分為如下幾類:

  • POD 資源使用率:POD 級別的性能指標,通常為一個比率值。
  • POD 自定義指標:POD 級別的性能指標,通常為一個數值。
  • 容器 資源使用率:容器級別的性能指標,K8S 1.20 引入,主要針對一個 POD 中多個容器的情況,可指定核心業務容器作為資源擴縮閾值。
  • Object 自定義和外部指標:通常為一個數值,需要容器以某種方式提供,或外部服務提供的指標采集 URL。

HPA ApiVersion

K8S 中各種資源在定義時,使用 apiVsersion 來區分不同版本。HPA 目前主要有以下幾個常用版本:

  • autoscaling/v1 只支持針對 CPU 指標的擴縮容;
  • autoscaling/V2beta1 除了 cpu,新引入內存利用率指標來擴縮容;
  • autoscaling/V2beta2 除了 cpu 和內存利用率,新引入了自定義和外部指標來擴縮容,支持同時指定多個指標;

v2 版本相較 v1 做了不少擴展,除了增加自義定和外部指標外,還支持多指標,當定義多個指標時,HPA 會根據每個指標進行計算,其中縮放幅度最大的指標會被采納。

在定義 HPA 時,需要合理選擇版本,以免造成不必要的錯誤。更多 APIVersion 信息,可參考官方文檔這里[6]。

HPA 實戰

接下來我們配置測試下上邊說的幾種類型的指標 HPA,自定義指標和外部指標需要第三方的適配器(Adapter)來提供,針對 Rancher 生態可使用其集成的 Monitoring (100.1.0+up19.0.3) charts 來解決,其中組件 Prometheus Adapter 便是適配器,提供了自定義和外部類型的 API。詳細安裝方法可參考我之前的文章k3s 中 helm 自定義安裝 traefik v2[7],Monitoring 安裝方法一樣。

安裝好適配器之后,我們準備一個 nginx 服務用來進行自動擴縮容使用,我們使用 cnych/nginx-vts:v1.0 鏡像,它集成了 nginx vts 模塊,可以查看 nginx 的各種請求數據。創建 deployments 和 service 如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hpa-test
  namespace: hd-ops
spec:
  selector:
    matchLabels:
      app: nginx-server
  template:
    metadata:
      labels:
        app: nginx-server
    spec:
      containers:
      - name: nginx-demo
        image: cnych/nginx-vts:v1.0
        resources:
          limits:
            cpu: 50m
          requests:
            cpu: 50m
        ports:
        - containerPort: 80
          name: http
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-hpa-test
  namespace: hd-ops
  labels:
    app: nginx-svc
spec:
  ports:
  - port: 80
    targetPort: 80
    name: http
  selector:
    app: nginx-server
#  type: ClusterIP
  type: NodePort

v1 版本 Pod 資源類

首先,我們來測試 v1 版本的 HPA,僅支持 POD 資源 CPU 的指標判斷。我們可直接使用 kubectl 命令行來創建,命令如下:

# 創建
$ kubectl autoscale deployment nginx-hpa-test --cpu-percent=20 --min=1 --max=10
# 查看
$ kubectl get hpa -A
NAMESPACE   NAME               REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hd-ops      nginx-hpa-test     Deployment/nginx-hpa-test   2%/20%    1         10        1          1m

其中關注下 TARGETS 列,前邊為 CPU 當前使用,后邊為觸發閾值。我們給 nginx 服務增加壓力,觀察 hpa 情況,可使用如下命令:

# 加壓 替換 node-ip 為 pod 部署的具體 node ip,node-port 為隨機映射暴露的節點端口
for i in {0..30000};do echo "start-------->:${i}";curl http://<node-ip>:<node-port>/status/format/prometheus;echo "=====================================:${i}";sleep 0.01;done

# 查看hpa情況
$ kubectl get hpa
NAME             REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa-test   Deployment/nginx-hpa-test   26%/20%   1         10        2          3h48m

我們可以看到 pod 的副本數由 1 個變為了 2 個,成功觸發 hpa,擴容 1 個 pod。

當我們停止壓力之后再觀察 HPA,并沒有馬上縮容,這是因為 k8s 的冷卻延遲機制??赏ㄟ^控制器參數--horizontal-pod-autoscaler-downscale-stabilization來自定義,默認為 5m。

# 五分鐘后查看,pod 成功縮容。
~ ? 19:16:08
$ kubectl get hpa -n hd-ops -o wide
NAME             REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa-test   Deployment/nginx-hpa-test   0%/20%    1         10        2          3h54m

~ ? 19:16:11
$ kubectl get hpa -n hd-ops -o wide
NAME             REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-hpa-test   Deployment/nginx-hpa-test   0%/20%    1         10        1          4h1m

至此,v1 版本的 HPA 行為符合預期,當 CPU 的使用率超過閾值后,會擴容目標 pod,當使用率低于閾值后,會在冷卻期結束后縮容。

除了使用 kubectl 命令行來定義 hpa,也可以通過 yaml 來定義,如上 hpa,與下邊的 yaml 文件等效。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa-demo
spec:
  scaleTargetRef:  # 目標作用對象
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-hpa-test
  minReplicas: 1  # 最小副本數
  maxReplicas: 10  # 最大副本數
  metrics:  # 目標指標值
  - type: Resource  # 資源類型指標
    resource:
      name: cpu
      targetAverageUtilization: 20

v2 版本自定義指標

接下來,我們看下 v2 版本的自定義指標,需要你 K8S 在 1.6 以上。我們可按如下步驟來配置:

1.確保自定義指標數據已推送到 Prometheus

理論上來說,只要在 Prometheus 中的數據,我們都可以作為觸發指標來配置 HPA。Rancher 平臺中,使用 Prometheus Operator 的 CRD 來安裝管理的監控組件,我們可通過自定義 ServiceMonitor 來給 Prometheus 添加 target 采集對象。針對上邊我們 Nginx 的數據,我們可以編寫如下的 ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: nginx-hpa-svc-monitor
  namespace: cattle-monitoring-system
  labels:
    app: nginx-hpa-svc-monitor
spec:
  jobLabel: app
  selector:
    matchLabels:
      app: nginx-svc
  namespaceSelector:
    matchNames:
    - hd-ops
  endpoints:
  - port: http
    interval: 30s
    path: /status/format/prometheus

應用之后,我們可以在 prometheus 的 target 頁面看到如下的 target 列表項:

serviceMonitor/cattle-monitoring-system/nginx-hpa-svc-monitor/0 (1/1 up)

2.選擇指標,注冊到自定義指標 API

Nginx vts 接口 /status/format/prometheus中,提供了很多 nginx 的請求數據指標,我們拿 nginx_vts_server_requests_total 指標來計算一個實時的請求數作為 HPA 的觸發指標。我們需要將該指標注冊到 HPA 請求的 custom.metrics.k8s.io 中。Rancher 平臺中,我們可以覆蓋 Monitoring (100.1.0+up19.0.3) charts 的 values 來注冊指標 ,配置如下:

prometheus-adapter:
  enabled: true
  prometheus:
    # Change this if you change the namespaceOverride or nameOverride of prometheus-operator
    url: http://rancher-monitoring-prometheus.cattle-monitoring-system.svc
    port: 9090
  # hpa metrics
  rules:
    default: false  # 需要設置為 false,否則與下邊 custom 的指標沖突,會造成整個 custom 指標為空,不知道是不是bug;
    custom:
    # 具體詳細的參數配置可參考官方文檔:https://docs.rancher.cn/docs/rancher2/cluster-admin/tools/cluster-monitoring/cluster-metrics/custom-metrics/_index
    - seriesQuery: "nginx_vts_server_requests_total"  # '{__name__=~"^nginx_vts_.*_total",namespace!="",pod!=""}'
      seriesFilters: []
      resources:
        overrides:
          namespace: # 這里的namespace和pod是prometheus里面指標的標簽,會作為分組
            resource: namespace
          service:
            resource: services
          pod:
            resource: pod
      name:
        matches: ^(.*)_total
        as: "${1}_per_second"
      metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)

運行如下命令,更新組件。

helm upgrade  --install rancher-monitoring ./ -f k3s-values.yaml -n cattle-monitoring-system

可我們通過 API 查看是否注冊成功:

# 查看 api 列表
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/" |python3 -m json.tool
{
    "kind": "APIResourceList",
    "apiVersion": "v1",
    "groupVersion": "custom.metrics.k8s.io/v1beta1",
    "resources": [
        {
            "name": "namespaces/nginx_vts_server_requests_per_second",
            "singularName": "",
            "namespaced": false,
            "kind": "MetricValueList",
            "verbs": [
                "get"
            ]
        },
        {
            "name": "services/nginx_vts_server_requests_per_second",
            "singularName": "",
            "namespaced": true,
            "kind": "MetricValueList",
            "verbs": [
                "get"
            ]
        },
        {
            "name": "pods/nginx_vts_server_requests_per_second",
            "singularName": "",
            "namespaced": true,
            "kind": "MetricValueList",
            "verbs": [
                "get"
            ]
        }
    ]
}
# 查看具體某個指標的數值
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/hd-ops/pods/*/nginx_vts_server_requests_per_second" |python3 -m json.tool
{
    "kind": "MetricValueList",
    "apiVersion": "custom.metrics.k8s.io/v1beta1",
    "metadata": {
        "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/hd-ops/pods/%2A/nginx_vts_server_requests_per_second"
    },
    "items": [
        {
            "describedObject": {
                "kind": "Pod",
                "namespace": "hd-ops",
                "name": "nginx-hpa-test-7695f97455-mmpxz",
                "apiVersion": "/v1"
            },
            "metricName": "nginx_vts_server_requests_per_second",
            "timestamp": "2022-04-01T07:21:28Z",
            "value": "133m",  # 此處單位m 為千分之的意思
            "selector": null
        }
    ]
}

看到如上返回,說明注冊成功了,之后我們就可以使用其中的指標名稱來配置 HPA 了。

3.配置 HPA

編寫 HPA yaml 如下:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa-custom
  namespace: hd-ops
spec:
  scaleTargetRef:  # 應用目標服務 Deployment
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-hpa-test
  minReplicas: 1  # 保留最小副本數
  maxReplicas: 10  # 擴容最大副本數
  metrics:
    - type: Pods  # 指標類型
      pods:
        metric:
          name: nginx_vts_server_requests_per_second  # 指標名稱
        target:
          type: AverageValue
          averageValue: 5

應用之后,我們可以看到數據已經采集到:

$ kubectl get hpa -A
NAMESPACE   NAME               REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hd-ops      nginx-hpa-custom   Deployment/nginx-hpa-test   133m/5    1         10        1          1m

4.測試 HPA

運行如下命令加壓測試:

# 加壓
for i in {0..30000};do echo "start-------->:${i}";curl http://<node-ip>:<node-port>/status/format/prometheus;echo "=====================================:${i}";sleep 0.01;done

# 查看hpa情況
$ kubectl get hpa -A
NAMESPACE   NAME               REFERENCE                   TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
hd-ops      nginx-hpa-custom   Deployment/nginx-hpa-test   11333m/5   1         10        3          72m

請求數超過了閾值 5,可以看到 REPLICAS 副本數變成了 3。停止壓測后,5 分鐘后查看 hpa,又縮容回去,符合預期。

v2 版本的 HPA 還可以使用其他類型,且支持多個指標,如下示例:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa-custom
  namespace: hd-ops
spec:
  scaleTargetRef:  # 應用目標服務 Deployment
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-hpa-test
  minReplicas: 1  # 保留最小副本數
  maxReplicas: 10  # 擴容最大副本數
  metrics:
    - type: Pods  # 指標類型
      pods:
        metric:
          name: nginx_vts_server_requests_per_second  # 指標名稱
        target:
          type: AverageValue
          averageValue: 5
    - type: Resource  # 資源類型和v1版本寫法略有區別,需要注意
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50
    - type: Object  # 除pod外的其他資源對象類型
      object:
        metric:
          name: requests-per-second
        describedObject:
          apiVersion: networking.k8s.io/v1beta1
          kind: Ingress
          name: main-route
        target:
          kind: Value
          value: 10k  # 數值,直接與獲取到的指標值比較

指標類型 type 有下邊 4 種取值:

  • Resource: 指當前伸縮對象 pod 的 cpu 和 內存 支持 utiliztion 和 averagevalue 類型的目標值。一般情況下,計算 CPU 使用率使用 averageUtilization 定義平均使用率。計算內存資源,使用 AverageValue 定義平均使用值。
  • Pods: 指的是伸縮對象 Pod 的指標,數據有第三方的 Adapter 提供,只支持 AverageValue 類型的目標值。
  • Object: K8S 內部除 pod 之外的其他對象的指標,數據有第三方的 Adapter 提供,支持 Value 和 AverageValue 類型的目標值。
  • External: K8S 外部的指標,數據有第三方 Adapter 提供,支持 Value 和 AverageValue 類型的目標值。

更多 type 類型信息,可參考官方文檔這里[8]。

v2 版本外部指標

最后我們來測試下外部指標,要求 K8S 版本在 1.10 以上,配置步驟和自定義表一致,在注冊指標到 /apis/external.metrics.k8s.io/v1beta1/ 時配置略有區別,

我們這里隨便拿一個與 K8S 無關的外部主機的 cpu 使用率做下測試,注冊配置如下:

prometheus-adapter:
  enabled: true
  prometheus:
    # Change this if you change the namespaceOverride or nameOverride of prometheus-operator
    #url: http://rancher-monitoring-prometheus.cattle-monitoring-system:9090/
    url: http://rancher-monitoring-prometheus.cattle-monitoring-system.svc
    port: 9090
  # hpa metrics
  rules:
    default: false
    # 如下為外部配置
    external:
    - seriesQuery: 'cpu_usage_idle{cpu="cpu-total"}'  # '{__name__=~"^nginx_vts_.*_total",namespace!="",pod!=""}'
      seriesFilters: []
      resources:
        template: <<.Resource>>
      name:
        matches: "^(.*)"
        as: "cpu_usage"
      metricsQuery: (100-cpu_usage_idle{cpu="cpu-total",ip="192.168.10.10"})/100 #<<.Series>>{<<.LabelMatchers>>}

這里 resources 我們直接使用 template 來模糊定義讓系統自動處理,因為外部指標和 K8S API 資源并不一定有關系,我們 metricsQery 這塊也使用明確寫出的方式來處理。

應用之后,我們同樣可以使用 API 來查看:

# 查看指標列表
$ kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/"|python3 -m json.tool
{
    "kind": "APIResourceList",
    "apiVersion": "v1",
    "groupVersion": "external.metrics.k8s.io/v1beta1",
    "resources": [
        {
            "name": "cpu_usage",
            "singularName": "",
            "namespaced": true,
            "kind": "ExternalMetricValueList",
            "verbs": [
                "get"
            ]
        }
    ]
}
# 查看具體的指標數據
$ kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/hd-ops/cpu_usage"|python3 -m json.tool
{
    "kind": "ExternalMetricValueList",
    "apiVersion": "external.metrics.k8s.io/v1beta1",
    "metadata": {},
    "items": [
        {
            "metricName": "cpu_usage",
            "metricLabels": {
                "__name__": "cpu_usage",
                "bg": "ops",
                "cpu": "cpu-total",
                "idc": "ali",
                "ident": "xxxx-host",
                "ip": "192.168.10.10",
                "region": "BJ",
                "svc": "demo-test"
            },
            "timestamp": "2022-04-02T03:28:50Z",
            "value": "11m"
        },
        ......
  ]
}

有時候 API 會返回為空,大概率是我們注冊的 API rule 配置有問題,可修改配置明確查詢 PromQL 測試。

定義 HPA 和 custom 類型也一樣,如下:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa-custom
  namespace: hd-ops
spec:
  scaleTargetRef:  # 應用目標服務 Deployment
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-hpa-test
  minReplicas: 1  # 保留最小副本數
  maxReplicas: 10  # 擴容最大副本數
  metrics:
    - type: External
      external:
        metric:
          name: cpu_usage
          selector:
            matchLabels:
              ip: "192.168.10.10"
        target:
          type: AverageValue
          averageValue: 10m  # 該數值為使用率 1% ,測試無實際意義

應用后查看 hpa 情況:

$ kubectl get hpa -A
NAMESPACE   NAME                        REFERENCE                   TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
hd-ops      nginx-hpa-custom-external   Deployment/nginx-hpa-test   18m/10m (avg)    1         10        2          11m

可以看到目標值 18m 超過了 閾值 10m,目標服務副本有 1 個變為 2 個,符合預期。

總結及問題回顧

至此,HPA 的三種大類型我們都測試完成。Rancher K3S 生態中,總體上來說和 K8S 并沒有什么不同。在 Rancher 平臺中有下邊幾個問題需要需要注意下:

  • 1、Rancher Charts 商店中 Monitor 集成的 Prometheus Adapter 中,當定義 custom 和 external rule 規則時,需要關閉 default 默認的規則,否則會認證失敗,造成整個 API 請求為空。錯誤信息如下:
client.go:233: [debug] error updating the resource "rancher-monitoring-alertmanager.rules":
  cannot patch "rancher-monitoring-alertmanager.rules" with kind PrometheusRule: Internal error occurred: failed calling webhook "prometheusrulemutate.monitoring.coreos.com": Post "https://rancher-monitoring-operator.cattle-monitoring-system.svc:443/admission-prometheusrules/validate?timeout=10s": context deadline exceeded

2、Rule 配置問題,注意版本和配置的關系,有些配置格式不同版本不一致。

我是DeanWu,一個努力成為真正SRE的人。如果本文對您有幫助,還請三連支持(點贊、轉發、在看),您的支持將是我更新的最大動力。

關注公眾號「碼農吳先生」,回復關鍵字「小二」,加我wx拉你進技術交流群,聊技術聊人生。

擴展閱讀

參考資料

[1] 官方倉庫和文檔: https://github.com/kubernetes/autoscaler

[2] Aggregator: https://kubernetes.io/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/

[3] Metric server: https://github.com/kubernetes-sigs/metrics-server

[4] Prometheus-Adapter: https://github.com/kubernetes-sigs/prometheus-adapter/blob/master/docs/walkthrough.md

[5] 這里: https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-metrics-apis

[6] 這里: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#horizontalpodautoscaler-v1-autoscaling

[7] k3s 中 helm 自定義安裝 traefik v2: https://pylixm.top/posts/2022-02-21-k3s-traefik-v2.html

[8] 這里: https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics

責任編輯:武曉燕 來源: 碼農吳先生
相關推薦

2020-03-31 12:50:34

樹莓派K3sKubernetes集

2018-02-28 10:57:38

互聯網

2025-09-05 01:22:00

2023-10-27 08:01:23

SSH連接K3s

2020-04-14 13:15:27

k3sSSL證書樹莓派

2022-02-08 15:59:29

k3sk8sDevOps

2016-09-13 14:05:24

Spark集群管理模式

2022-05-20 11:54:13

KubernetesK3sLinux

2020-02-29 15:20:18

K8SKubernetes集群

2020-09-11 19:41:06

KubernetesK8SK3S

2010-04-22 14:32:56

LVS負載均衡集群

2009-09-01 10:00:55

Tomcat集群方式

2025-01-07 14:36:12

2023-10-13 00:00:00

Redis模塊空間對象

2009-12-09 09:48:38

solaris靜態路由

2011-01-18 15:35:59

jQueryJavaScriptweb

2018-07-10 08:42:45

Oracle高可用集群

2020-11-24 10:13:02

Redis集群數據庫

2011-06-03 11:53:06

Spring接口

2021-07-05 06:57:06

VMware vSph虛擬機磁盤
點贊
收藏

51CTO技術棧公眾號

国产美女精品一区二区三区| 色吧影院999| 欧美日本黄视频| 欧美乱大交xxxxx潮喷l头像| 一级肉体全黄裸片| 中文字幕中文字幕在线十八区 | 熟女丰满老熟女熟妇| 欧美三级理伦电影| 午夜影院日韩| 精品国产乱码久久| 在线国产伦理一区| 久久精品偷拍视频| 久久精品亚洲成在人线av网址| 中文字幕日韩欧美一区二区三区| 日韩免费不卡av| 李丽珍裸体午夜理伦片| 免费av在线| 白白色 亚洲乱淫| 欧美激情精品在线| 日本高清免费观看| 无遮挡的视频在线观看| 免费黄网站欧美| 亚洲人成五月天| 能在线观看的av| 天堂中文在线资源| 伊人成人网在线看| 日韩免费看网站| 国产一区二区三区播放| 国产日韩在线观看一区| 欧美电影免费观看高清| 欧美在线看片a免费观看| 风间由美久久久| 久久精品亚洲无码| 一区二区亚洲视频| 亚洲国产一区在线观看| 99久久精品免费看国产四区| 久久久久97国产| 国产另类在线| 精品久久久久人成| 久久99久久精品国产| 日本中文字幕在线免费观看| 国产精品色呦| 欧美精品乱码久久久久久 | 国产综合视频一区二区三区免费| 亚洲欧洲午夜| 精品亚洲一区二区三区在线播放| 免费看国产曰批40分钟| 桃花色综合影院| 美女精品在线| 日韩中文综合网| 一区二区三区人妻| mm视频在线视频| 久久日一线二线三线suv| 国产精品久久久久久久美男 | 精品人妻一区二区三区蜜桃| 女人香蕉久久**毛片精品| 精品99一区二区三区| 香蕉网在线视频| 国产亚洲精aa在线看| 夜夜嗨av一区二区三区四季av| 国产精品视频免费一区| av一级在线观看| 99久久婷婷国产综合精品电影√| 精品捆绑美女sm三区| www.四虎成人| 黄色网页网址在线免费| 成a人片亚洲日本久久| 国产精品成人国产乱一区| 日韩欧美国产成人精品免费| 亚洲综合影院| 精品噜噜噜噜久久久久久久久试看| 少妇熟女视频一区二区三区| 日本美女一区| 一区二区三区在线视频观看 | 伊人网在线综合| 久草在线新免费首页资源站| 国产欧美日韩三级| 91丨九色丨国产| av首页在线观看| 免费高清在线一区| 91精品一区二区| 中文字幕一区在线播放| 欧美在线不卡| 欧美激情久久久久| 台湾佬中文在线| 免费成人av资源网| 亚洲xxxx视频| 青草久久伊人| 成人免费精品视频| 91免费看片在线| 成人午夜视频一区二区播放| 奇米亚洲午夜久久精品| 1769国内精品视频在线播放| 欧美极品aaaaabbbbb| 日韩电影免费在线观看| 日韩电视剧免费观看网站| 美女日批在线观看| 老汉色老汉首页av亚洲| 中文字幕亚洲综合| 人妻av无码一区二区三区| 欧美日日夜夜| 精品国产精品一区二区夜夜嗨| 99久久人妻无码中文字幕系列| 久久一区二区三区喷水| 久久露脸国产精品| 久久久久久福利| 亚洲在线网站| 97久久夜色精品国产九色| 日本一区二区三区在线观看视频| 中文字幕一区二区三区四区| 日日骚一区二区网站| 亚洲三区在线观看无套内射| 不卡影院免费观看| 亚洲不卡1区| 日韩国产福利| 亚洲精品国产无套在线观| 国产成人黄色片| 久久69av| 精品免费国产一区二区三区四区| 欧美丰满老妇熟乱xxxxyyy| 韩国精品一区二区三区| 国产69精品99久久久久久宅男| 中文精品久久久久人妻不卡| 日日夜夜一区二区| 国产精品热视频| 性xxxx视频播放免费| 亚洲人成电影网站色mp4| 欧洲美女和动交zoz0z| 超碰电影在线播放| 亚洲综合偷拍欧美一区色| 国内自拍视频一区| 草草视频在线| 在线91免费看| 美女网站视频在线观看| 国产精品tv| 美女少妇精品视频| 国产网友自拍视频| 国产在线日韩欧美| 一区二区三区四区视频在线| jizz性欧美| 欧美日韩情趣电影| 三级黄色片播放| 日韩免费一区| 国产欧美婷婷中文| 亚洲欧美另类综合| 亚洲少妇屁股交4| 手机看片一级片| 国产精品丝袜在线播放| 色综合色综合久久综合频道88| 99久久精品国产一区色 | 久久久久亚洲av片无码| 色无极亚洲影院| 国产激情999| 国产精品免费无遮挡| 粉嫩嫩av羞羞动漫久久久| 久久久久久久久久久久久久一区| 国产传媒在线| 亚洲精品综合久久中文字幕| 亚洲AV成人无码精电影在线| 国产精品99免费看| 国产经典一区二区| 九色在线播放| 欧美日韩精品专区| 日本成人精品视频| 亚洲裸体俱乐部裸体舞表演av| 国产精品国模大尺度私拍| jizz一区二区三区| 精品视频1区2区3区| 中文字幕视频观看| 在线日韩电影| 欧美13一14另类| 免费在线看污片| 亚洲国产另类 国产精品国产免费| 色屁屁草草影院ccyy.com| 一区久久精品| 日本成人三级| 麻豆免费版在线观看| 欧美精品777| 久久久久久久黄色| www国产精品av| 日本福利视频一区| 天堂99x99es久久精品免费| 久久综合免费视频| 在线观看你懂的网站| 亚洲欧美福利一区二区| 五月婷婷深爱五月| 亚洲精品久久| 成人激情视频在线播放| 成人亚洲综合天堂| 天天色图综合网| 丁香激情五月少妇| 国产精品一区2区| 免费无码av片在线观看| 色婷婷综合网| 久久av一区二区三区亚洲| 日韩福利在线观看| 亚洲性无码av在线| av大全在线观看| 91网站视频在线观看| 无限资源日本好片| 国产欧美日韩一区二区三区四区| 国产做受高潮69| 第三区美女视频在线| 色综合天天性综合| 能免费看av的网站| 亚洲综合二区| 性生活免费观看视频| 亚洲大片精品免费| 欧洲午夜精品久久久| 亚洲欧洲精品视频| 欧美日韩1区2区| 国产原创视频在线| 亚洲影院在线观看| 99热6这里只有精品| 成人黄色777网| 性欧美在线视频| 中文字幕免费一区二区三区| 成人激情视频在线| 亚洲精品一级二级| 永久免费精品影视网站| 中文字幕精品无| 亚洲国产精品一区二区www在线| 亚洲丝袜在线观看| 日本成人在线一区| av免费播放网址| 亚洲午夜伦理| 久久观看最新视频| 国产精品超碰| 51成人做爰www免费看网站| 日韩不卡在线| 欧美巨乳在线观看| 日本视频在线免费观看| 夜夜嗨av色一区二区不卡| 天天干,夜夜爽| 亚洲国产成人精品久久久国产成人一区 | 九九热精品视频国产| 3p在线观看| 欧美一级一区二区| 国产一级av毛片| 亚洲另类色综合网站| av最新在线观看| 一区视频在线播放| 亚洲一级黄色录像| 中文无字幕一区二区三区| 婷婷激情小说网| 在线视频观看日韩| 丁香花在线影院观看在线播放| 欧美色123| 国产色一区二区三区| 亚洲特级毛片| 无码中文字幕色专区| 亚洲黄色av| 欧美日韩在线一| 久久综合国产| 在线看无码的免费网站| 婷婷综合伊人| 久久国产精品免费观看| 91精品国产乱码久久久久久| 日韩视频在线观看视频| 欧美三级电影在线| 美国av一区二区三区| 女厕嘘嘘一区二区在线播放 | 中文字幕不卡在线| fc2ppv在线播放| 一区二区三区在线观看视频| 久久中文字幕在线观看| 欧美色播在线播放| 99热这里只有精品4| 亚洲欧美怡红院| 久草资源在线视频| 午夜电影久久久| jizz亚洲少妇| 一区二区不卡在线播放 | 日p在线观看| 九九久久久久99精品| 97天天综合网| 国产精品成人播放| 视频成人永久免费视频| 国产精品男人的天堂| 日韩黄色三级| 国产精品一 二 三| 国产aⅴ精品一区二区三区久久| 亚洲欧美国产一区二区| 欧美日韩理论| 国产又黄又猛视频| 99国产成+人+综合+亚洲欧美| 9l视频自拍9l视频自拍| 黄色日韩在线| 黄色免费网址大全| 国产精品香蕉一区二区三区| 噜噜噜在线视频| 亚洲日本va午夜在线影院| 日韩欧美三级在线观看| 欧美日韩国产免费一区二区| 蜜臀av免费在线观看| 欧美一区二区二区| 天堂成人在线观看| 日日骚久久av| 中日韩脚交footjobhd| 韩国视频理论视频久久| 欧美人与禽性xxxxx杂性| 日韩av电影中文字幕| 韩国三级大全久久网站| 欧美精品欧美精品| 亚洲资源网站| 成人在线观看毛片| 丝袜美腿亚洲一区| 奇米影音第四色| 成人av免费在线| 亚洲天堂网av在线| 欧美日韩免费网站| 亚洲欧美精品一区二区三区| 欧美精品777| se在线电影| 91精品国产色综合久久不卡98口 | 美国一级片在线观看| 精品久久久久久久久久久久| 国产免费一区二区三区免费视频| 亚洲人成电影在线观看天堂色| 欧美xxx黑人xxx水蜜桃| 色噜噜狠狠一区二区三区| 久久大胆人体| 成人在线中文字幕| 国产一区不卡| 日本一道本久久| 国产99精品视频| 日日噜噜夜夜狠狠久久波多野| 91国偷自产一区二区三区成为亚洲经典 | 亚洲一区二区三区四区| 国产精品久久久久久久久久久久午夜片 | 国产精品久久久久7777按摩| 四虎成人在线观看| 精品久久久久99| 污污视频在线| 色妞在线综合亚洲欧美| 美女福利一区二区三区| 国产精品狠色婷| 五月天亚洲色图| 怡红院av亚洲一区二区三区h| 国产电影一区二区三区| 波多野结衣有码| 亚洲午夜在线电影| 国产综合视频在线| 超碰日本道色综合久久综合| 色999久久久精品人人澡69 | 在线免费观看污视频| 久久噜噜亚洲综合| 国产又黄又爽又色| 欧美日韩日本视频| 米奇777四色精品人人爽| 国产日韩在线免费| 婷婷色综合网| 交换做爰国语对白| 一区二区三区丝袜| 亚洲av无码一区二区三区dv| 亚洲跨种族黑人xxx| 在线观看特色大片免费视频| 欧美黑人xxxxx| 日韩国产成人精品| 谁有免费的黄色网址| 欧美性猛片xxxx免费看久爱| 日韩伦理在线观看| 444亚洲人体| 一区二区国产精品| 亚洲女优在线观看| 欧美日韩一区小说| 中文字幕伦理免费在线视频 | 成年人在线看| 成人伊人精品色xxxx视频| 国内精品久久久久久久影视麻豆| 欧产日产国产精品98| 色播五月激情综合网| 日本不卡在线| 成人一区二区三区四区| 久久不射中文字幕| 国产美女网站视频| 欧美mv和日韩mv的网站| 欧美大片高清| 欧洲xxxxx| 91在线国产观看| avove在线播放| 欧美午夜在线一二页| 黄色免费网站在线| 国产午夜精品在线| 欧美精品色网| 欧美老熟妇乱大交xxxxx| 欧美日韩一级二级| 国产极品人妖在线观看| 91天堂在线观看| 99亚洲视频| 2014亚洲天堂| 日韩av在线免费看| 在线视频成人| 天天综合中文字幕| 成人中文字幕合集| 国产精品51麻豆cm传媒 | 国产精品一区二区果冻传媒| 在线天堂中文字幕| 免费成人高清视频| 国产亚洲一区二区三区不卡|