精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线观看国产福利| 日韩精品最新在线观看| 中文字幕在线有码| 伊人久久影院| 婷婷中文字幕一区三区| 欧美日韩国产精品一卡| 亚洲中文无码av在线| 天天插综合网| 亚洲成人精品视频| 成人精品视频一区二区| 黄网站在线免费| 国产成人精品三级麻豆| 91av国产在线| www.com.av| 国产精品玖玖玖在线资源| 色综合天天综合狠狠| 在线观看欧美一区| 色哟哟中文字幕| 蜜臀久久99精品久久久久久9| 欧美成人亚洲成人日韩成人| 少妇毛片一区二区三区| 日韩美香港a一级毛片| 午夜久久久久久久久| 亚洲精品国产精品国自产观看| av网站在线观看免费| 久久高清免费观看| 欧美大尺度激情区在线播放| 色婷婷在线影院| 日本超碰一区二区| 91国偷自产一区二区开放时间 | 成人国产在线观看| 国模极品一区二区三区| 国产传媒视频在线| 天天躁日日躁成人字幕aⅴ| 911精品国产一区二区在线| 国产三区在线视频| 丁香影院在线| 亚洲视频免费看| 久久综合九色综合网站| www.蜜桃av.com| 蜜臀久久99精品久久久久宅男| 亚洲91av视频| 欧美人妻精品一区二区三区 | 日韩av中文字幕在线| 91精品999| 日韩电影免费观| 午夜不卡av免费| 欧美精品在欧美一区二区| 欧美一级二级三级区| 国产日韩欧美精品在线| 久久riav| 亚洲欧美丝袜中文综合| 丁香六月久久综合狠狠色| 成人女保姆的销魂服务| 久久亚洲精品石原莉奈| 国产情侣一区| 午夜精品在线观看| 国产精品.www| 黄色精品免费| 欧美激情极品视频| 欧美日韩精品亚洲精品| 综合一区av| 久久视频免费观看| 人妻久久一区二区| 久久久久久久久国产一区| 最新日韩中文字幕| 欧美性猛交xxxx乱大交少妇| 欧美日韩一区二区综合| 有码中文亚洲精品| 精品亚洲aⅴ无码一区二区三区| 亚洲专区视频| 亚洲人成电影网| 大又大又粗又硬又爽少妇毛片| 青草久久视频| 亚洲欧美变态国产另类| 亚洲国产天堂av| 国产精品一在线观看| 亚洲人成在线观看| 亚洲av成人无码久久精品| 精品国产乱码久久久久久蜜坠欲下 | 国产一区二区三区小说| 成人影音在线| 欧美日韩国产专区| 一本色道无码道dvd在线观看| 欧美精品高清| 欧美日本在线观看| 久久久久久久久久久影视| 在线一区二区三区视频| 亚洲国内精品视频| 亚洲精品成人无码熟妇在线| 欧美日韩第一| 久久伊人91精品综合网站| 九九热国产精品视频| 国产精品大片| 欧美自拍视频在线| 中文字幕在线观看视频一区| 韩国成人在线视频| 国产精品亚洲不卡a| 蜜桃免费在线| 亚洲欧洲中文日韩久久av乱码| 屁屁影院ccyy国产第一页| 日韩激情电影免费看| 欧美三级日韩在线| 香蕉视频污视频| 精品国产一区二区三区av片| 久久手机精品视频| 国产欧美一区二区三区在线看蜜臂| 秋霞影院一区二区| 成人激情av| 国产精品天堂| 亚洲综合男人的天堂| 日本一极黄色片| 激情久久免费视频| 亚洲欧美日韩中文在线制服| 久久精品一区二区三区四区五区| 亚洲精品社区| 91九色国产视频| 能在线看的av| 伊人色综合久久天天| 欧美女人性生活视频| 精品伊人久久| 伊人亚洲福利一区二区三区| 久久一区二区三| 全国精品久久少妇| 你懂的视频在线一区二区| 成人日韩欧美| 欧美在线小视频| 亚洲少妇一区二区三区| 色婷婷色综合| 日本精品中文字幕| 欧洲精品久久一区二区| 亚洲品质自拍视频| 亚洲免费黄色网| 欧美久久精品一级c片| 国语自产精品视频在线看| 91好色先生tv| 国产午夜精品久久| 亚欧无线一线二线三线区别| 欧美欧美在线| 久久久国产一区二区| 亚洲中文字幕无码爆乳av| 欧美日韩大片在线观看| 日韩欧美不卡| 日韩av快播网址| 天堂在线资源网| 亚洲一区欧美一区| 91精品视频国产| 色97色成人| 国产精品亚洲欧美导航| 蜜桃视频在线免费| 日韩欧美亚洲范冰冰与中字| 欧美激情 亚洲| 亚洲视频碰碰| av色综合网| 日本h片在线观看| 欧美一区二区在线视频| 在线观看黄网址| 久久电影网电视剧免费观看| 亚洲欧美99| 精品久久久网| 日韩在线精品视频| 亚洲无码精品在线播放| 国产精品美女一区二区三区| 五月婷婷之综合激情| 精品一区二区三区的国产在线观看| 欧美壮男野外gaytube| 男人久久精品| 91福利在线导航| 国产jjizz一区二区三区视频| 久久只有精品| 午夜精品一区二区三区在线观看| 亚洲伦乱视频| 日韩一区二区av| 国产喷水吹潮视频www| 亚洲综合色视频| 中文字幕免费高清视频| 丝袜亚洲另类欧美综合| 亚洲午夜精品久久久中文影院av| 国产成+人+综合+亚洲欧美| 色婷婷综合成人av| 精品国产av 无码一区二区三区| 一区二区三区在线视频免费 | av片在线观看免费| 日韩精品一区二区三区在线观看| 久久免费在线观看视频| 99r精品视频| 亚洲狼人综合干| 999精品在线| 不卡一区二区三区四区五区| 色吧亚洲日本| 最近中文字幕2019免费| 高潮毛片7777777毛片| 午夜电影网亚洲视频| jizz中文字幕| 国产真实乱偷精品视频免| 日韩欧美国产综合在线| 精品欧美久久| 99久久精品免费看国产一区二区三区 | 日本少妇xxxxx| 国产麻豆日韩欧美久久| 毛片在线视频播放| 久久久影院免费| 国产欧美综合精品一区二区| 视频一区在线免费看| 九九视频直播综合网| 国产三级电影在线| 日韩三级中文字幕| 国产午夜精品无码| 国产精品欧美一区二区三区| 国产精品成人99一区无码| 日本va欧美va精品发布| 欧美亚洲日本一区二区三区| 日本一区二区免费高清| 国产一区高清视频| www.久久爱.com| 欧美在线视频一二三| caopon在线免费视频| 亚洲一区第一页| 亚洲黄色在线免费观看| 欧美日韩和欧美的一区二区| 国产精品美女毛片真酒店| 中文字幕一区二区三区蜜月| 蜜臀av一区二区三区有限公司| 国产在线播放一区二区三区| 99久久国产宗和精品1上映| 激情久久综合| 中文字幕免费高| 国产一区99| 精品一卡二卡三卡四卡日本乱码 | 国产成人精品日本亚洲专区61| 在线观看男女av免费网址| 宅男66日本亚洲欧美视频| 色视频在线观看免费| 欧美不卡一区二区| 国产精品视频无码| 在线观看av一区二区| 五月婷婷亚洲综合| 亚洲国产aⅴ天堂久久| a在线视频播放观看免费观看| 亚洲国产精品高清| 国精品无码人妻一区二区三区| 成人激情动漫在线观看| 爱情岛论坛亚洲自拍| 黄色日韩网站视频| 亚洲精品20p| 久久国产免费看| 美女一区二区三区视频| 久久亚洲欧洲| 日韩中文字幕二区| 午夜在线视频观看日韩17c| 日日摸日日碰夜夜爽无码| 欧美性色综合| 美国av在线播放| 91精品国产91久久综合| 亚洲三区在线观看| 91综合久久| 在线一区日本视频| 91精品秘密在线观看| 中文字幕免费在线不卡| 国产精品久久占久久| 自拍偷拍视频在线| 亚洲成人三区| 日韩亚洲欧美一区二区| 亚洲欧美亚洲| www.成年人视频| 激情文学一区| 乱妇乱女熟妇熟女网站| 久久激情久久| 欧美性猛交xxx乱久交| 卡一卡二国产精品| 天堂在线精品视频| 懂色av一区二区夜夜嗨| 永久免费未满蜜桃| 91丨porny丨在线| 少妇按摩一区二区三区| 国产欧美综合在线| 黄色精品视频在线观看| 亚洲一区二区三区国产| 黄色一级片免费看| 91福利视频网站| 9.1成人看片| 欧美精美视频| 亚洲v国产v| 性xxxx欧美老肥妇牲乱| 成人国产在线看| 国产精品日本欧美一区二区三区| aa免费在线观看| 理论电影国产精品| 国产高潮失禁喷水爽到抽搐| 久久久久国产精品免费免费搜索| 欧美日韩国产黄色| 一区二区欧美国产| 亚洲婷婷综合网| 777久久久精品| 国产18精品乱码免费看| 一区二区三区美女xx视频| 成人无遮挡免费网站视频在线观看| 韩国v欧美v日本v亚洲| a成人v在线| 国产精品9999久久久久仙踪林| 婷婷激情久久| 伊人婷婷久久| 一区二区激情| 午夜精品免费看| 99国产精品视频免费观看| 少妇一级黄色片| 亚洲一区二区三区四区在线观看 | 欧美在线中文字幕| 中文幕av一区二区三区佐山爱| 国产乱码精品一区二区三区中文 | sm捆绑调教国产免费网站在线观看| 热久久这里只有| 欧美h版在线观看| 欧美三级网色| 亚洲视频一二| 欧美大片久久久| 91天堂素人约啪| 黄色一级视频在线观看| 91国偷自产一区二区开放时间 | 欧洲综合视频| 欧美成人免费全部| 国产成人77亚洲精品www| 精品国产综合久久| 欧美激情无毛| 国产三级精品三级在线| 国产欧美一区二区精品秋霞影院| 国产一级在线视频| 欧美一区二区在线看| 成人精品福利| 欧美综合在线第二页| 成人香蕉社区| 亚洲第一页在线视频| 日本中文字幕一区二区有限公司| 日韩精品人妻中文字幕有码 | 精品sm捆绑视频| 精品视频在线一区二区| 国产精品久久久久久久一区探花 | 首页综合国产亚洲丝袜| 精品人妻无码中文字幕18禁| 亚洲欧洲三级电影| 中文字幕+乱码+中文字幕明步| 亚洲黄色www| 波多野结衣中文字幕久久| 亚洲资源在线看| 久久久久午夜电影| 在线观看免费不卡av| 日本一区二区三区免费乱视频| 亚洲精品男人的天堂| 亚洲国产精品电影| 老牛影视精品| 精品欧美一区二区在线观看视频| 亚洲视频精品| 毛茸茸free性熟hd| 亚洲第一福利一区| 少妇高潮久久久| 国外色69视频在线观看| 极品束缚调教一区二区网站 | 国产精品成人一区二区三区电影毛片 | 欧美日韩免费在线观看| 人妻偷人精品一区二区三区| 国内精品中文字幕| 另类图片第一页| 精品中文字幕av| 久久久久国产成人精品亚洲午夜| 影音先锋在线国产| 这里只有精品久久| 高清不卡一区| 热久久最新地址| 成人av一区二区三区| 成人免费视频毛片| 亚洲香蕉成人av网站在线观看| 成人开心激情| 一区二区三区国| 国产一区二三区好的| 玖玖爱这里只有精品| 精品久久久久av影院| 超碰资源在线| 日本中文不卡| 久久国内精品视频| 青青草激情视频| 亚洲福利视频免费观看| 丝袜美腿一区| 一本色道久久综合亚洲二区三区 | 国产精品第七影院| 色欧美自拍视频| 中文字幕99页| 色视频一区二区| 黄色一级片在线观看| 俄罗斯精品一区二区三区| 国产日韩欧美一区在线| 国产综合精品久久久久成人av| 777色狠狠一区二区三区| av女在线播放| 先锋影音日韩| 粉嫩久久99精品久久久久久夜| 久久久久久91亚洲精品中文字幕| 中文字幕亚洲一区二区三区五十路 | 国产精品国产三级国产aⅴ原创| 朝桐光av在线一区二区三区| 欧美亚洲国产视频小说|