国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

KEDA:基于事件驅動擴展K8S應用的深度實踐

云計算 云原生
KEDA 提供了一個類似于 FaaS 的事件感知擴展模型,在這種模型中,Kubernetes 部署可以基于需求和基于智能動態地從零擴展,而不會丟失數據和上下文。

為什么我們要自動擴展應用程序?

作為 SRE,需要保證應用彈性和高可用性。因此,自動縮放是我們需要的必須功能。通過自動縮放,我們能確保工作負載能夠高效的地處理業務流量。

在本文中,我們將詳細描述如何使用 KEDA 以事件驅動的方式自動擴展 Kubernetes 應用程序。

什么是KEDA?

KEDA 是一個輕量級的開源 Kubernetes 事件驅動的自動縮放器,DevOps、SRE 和 Ops 團隊使用它來根據外部事件或觸發器水平擴展 Pod。KEDA 有助于擴展本機 Kubernetes 自動縮放解決方案的功能,這些解決方案依賴于標準資源指標,如 CPU 或內存。我們可以將 KEDA 部署到 Kubernetes 集群中,并使用自定義資源定義 (CRD) 管理 Pod 的擴展。

KEDA 基于 Kubernetes HPA 構建,根據來自 AWS SQS、Kafka、RabbitMQ 等事件源的信息擴展 Pod。這些事件源使用縮放程序進行監視,縮放程序根據為其設置的規則激活或停用部署。KEDA 縮放器還可以為特定事件源提供自定義指標,幫助 DevOps 團隊觀察與其相關的指標

我們唯一要做的就是通過選擇要用于自動擴展應用程序的縮放器以及一些參數來配置 ScaledObject (KEDA CRD),KEDA 將完成剩下的工作:

  • 監視事件源
  • 創建和管理 HPA 生命周期

截至目前,有 62 個內置縮放器和 4 個外部縮放器可用。 KEDA 之所以好,是因為使用輕量級組件以及原生 Kubernetes 組件,例如 HorizontalPodAutoscaler ,更重要的是“即插即用”。

部署KEDA

那么,部署 KEDA 的最簡單方法是使用官方 Helm,安裝如下所示:

helm repo add kedacore 
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace

?? 如果使用 ArgoCD 部署 KEDA,您可能會遇到有關 CRD 注釋長度的問題。我們可以使用選項 ServerSideApply=true 來解決 template.sped.syncPolicy.syncOptions 。此外,還可以在 helm中設置參數,從而 禁用 CRD 部署,當然,這種情況下也必須找到另一種方法來部署 KEDA CRD。

基于本機Cron Scaler自動縮放Web應用

下面讓我們深度實踐一下KEDA!

部署我們的Web應用

對于demo,將使用一個建的 Golang Web 應用程序。使用以下清單部署:


---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: go-helloworld
  name: go-helloworld
spec:
  selector:
    matchLabels:
      app: go-helloworld
  template:
    metadata:
      labels:
        app: go-helloworld
    spec:
      containers:
        - image: rg.fr-par.scw.cloud/novigrad/go-helloworld:0.1.0
          name: go-helloworld
          resources:
            requests:
              cpu: "50m"
              memory: "64Mi"
            limits:
              memory: "128Mi"
              cpu: "100m"
---
apiVersion: v1
kind: Service
metadata:
  name: go-helloworld
spec:
  selector:
    app: go-helloworld
  ports:
    - protocol: TCP
      port: 8080
      name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
  name: go-helloworld
spec:
  rules:
  - host: helloworld.jourdain.io
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: go-helloworld
            port:
              number: 8080
  tls: # < placing a host in the TLS config will indicate a certificate should be created
  - hosts:
    - helloworld.jourdain.io
    secretName: go-helloworld-tls-cert

將KEDA配置為僅在工作時間自動擴展Web應用

如果,我們希望我們的應用程序僅在工作時間可用。至于為何有如此要求,下面是一些場景。例如,在開發環境中,不一定需要保持應用程序24小時啟動和運行。在云環境中,它可以為您節省大量成本,具體取決于用戶實際環境的應用程序/計算實例的數量。 為了實現這一點,我們將使用KEDA的原生Cron scaler。由于 Cron scaler 支持 Linux 格式的 cron,它甚至允許我們在工作日擴展我們的應用程序 要配置 Cron scaler,我們將按如下方式使用 [ScaledObject] CRD:


apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: go-helloworld
spec:
  scaleTargetRef:
    name: go-helloworld
  triggers:
  - type: cron
    metadata:
      timezone: Europe/Paris
      start: 00 08 * * 1-5
      end: 00 18 * * 1-5
      desiredReplicas: "2"

?? ScaledObject 必須與應用程序位于同一命名空間中!讓我們深入了解一下這個配置:

  • spec.scaleTargetRef 是 Kubernetes Deployment/StatefulSet 或其他自定義資源的引用

name (必填): Kubernetes 資源的名稱

kind (可選):Kubernetes 資源的種類,默認值為 Deployment

  • spec.triggers 是用于激活目標資源縮放的觸發器列表
  • type (必填):縮放器名稱
  • metadata (必需):Cron 縮放器所需的配置參數,使用此配置,我的應用程序將在周一到周五的一周中每天的 08:00 到 18:00 之間啟動并運行兩個副本。

基于HTTP事件自動縮放Web應用

(使用 KEDA HTTP 外部縮放器)

借助所有 KEDA 的縮放器,我們可以通過多種方式自動擴展 Web 應用程序,例如,基于 AMQP 隊列中的消息進行縮放應用。

目前,我們了解了 KEDA 的工作原理。我下面們將探討 KEDA 如何通過基于 HTTP 事件自動擴展應用程序來幫助我們處理流量高峰。為此,我們有兩個選擇:

  • 使用Prometheus scaler
  • 使用 KEDA HTTP 外部縮放器,它的工作方式類似于附加組件,由于演示集群上沒有安裝 Prometheus,因此我們將使用 KEDA HTTP 外部縮放器。

?? KEDA HTTP插件目前處于測試階段。它主要由KEDA團隊維護。

解決方案概述

KEDA HTTP scaler是構建在 KEDA 核心之上的附加組件,它擁有自己的組件:operator, scaler和 interceptor。如果你想進一步了解它們的作用,請閱讀官方文檔。總之,為了幫助大家更好地理解它的工作原理,下面提供一個小案例:

圖片圖片

安裝KEDA HTTP附加組件

由于這個縮放器不是內置的,我們必須手工安裝。根據官方文檔的說明,我們可以使用 Helm 來進行安裝:

helm install http-add-on kedacore/keda-add-ons-http --namespace keda

如果安裝順利,我們應該會看到以下pod:

? k get pods -l app=keda-add-ons-http -o name
pod/keda-add-ons-http-controller-manager-5c8d895cff-7jsl8
pod/keda-add-ons-http-external-scaler-57889786cf-r45lj
pod/keda-add-ons-http-interceptor-5bf6756df9-wwff8
pod/keda-add-ons-http-interceptor-5bf6756df9-x8l58
pod/keda-add-ons-http-interceptor-5bf6756df9-zxvw

為我們的Web應用配置'HTTPScaledObject'

正如之前所說,KEDA HTTP 附加組件自帶組件,包括操作符,這也意味著它自帶 CRD。HTTPScaledObject 是由 KEDA HTTP 附加組件管理的 CRD。這就是我們在這里需要配置的。讓我們為 Web 應用程序創建 HTTPScaledObject 資源: ?? HTTPScaleObject 必須在與 Web 應用相同的命名空間中創建資源!

kind: HTTPScaledObject
apiVersion: http.keda.sh/v1alpha1
metadata:
    name: go-helloworld
spec:
    host: "helloworld.jourdain.io"
    targetPendingRequests: 10
    scaledownPeriod: 300
    scaleTargetRef:
        deployment: go-helloworld
        service: go-helloworld
        port: 8080
    replicas:
        min: 0
        max: 10

在這里,我們已經配置了我們的 HTTPScaledObject 應用程序,以便將我們的應用程序 Deployment 從 0 個副本擴展到 10 個副本。因為,如果攔截器上有 10 個請求處于掛起狀態(應用程序尚未接收的請求),則 KEDA 將添加一個 pod。

調整我們的Web應用程序的service和ingress

仔細觀察一下上面的圖,可以看到我們的 Web 應用程序 ingress 需要引用 KEDA HTTP 附加組件的攔截器服務,而不是 Web 應用程序的攔截器服務。由于 ingress 無法引用另一個命名空間中的服務,因此我們將在與 Web 應用相同的命名空間 external 中創建類型服務,該服務引用來自 keda 命名空間的攔截器服務:

kind: Service
apiVersion: v1
metadata:
  name: keda-add-ons-http-interceptor-proxy
spec:
  type: ExternalName
  externalName: keda-add-ons-http-interceptor-proxy.keda.svc.cluster.local

現在,我們需要重新配置 Web 應用的入口,使其引用新創建的服務:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt
  name: go-helloworld
spec:
  rules:
  - host: helloworld.jourdain.io
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: keda-add-ons-http-interceptor-proxy
            port:
              number: 8080
  tls: # < placing a host in the TLS config will indicate a certificate should be created
  - hosts:
    - helloworld.jourdain.io
    secretName: go-helloworld-tls-cert

?? 需要輸入新服務的名稱,但請注意端口,該端口也被攔截器的服務所取代

讓我們測試一下

為了保證我們的配置正常,本處將使用 [k6]工具 ,這是一個負載測試工具。如果想了解有關k6的更多信息,以下是Padok博客中的一些介紹:

  • [How to do distributed load testing using K6 & Kubernetes?] (https://www.padok.fr/en/blog/k6-load-testing)
  • [k6 description from the Padok tech radar] (https://www.padok.fr/en/tech-radar-resilient?category=resilient&rank=6)

下面本次使用的 k6 腳本,后續將使用它進行測試:


import { check } from 'k6';
import http from 'k6/http';

export const options = {
  scenarios: {
    constant_request_rate: {
      executor: 'constant-arrival-rate',
      rate: 100,
      timeUnit: '1s', // 100 iterations per second, i.e. 100 RPS
      duration: '30s',
      preAllocatedVUs: 50, // how large the initial pool of VUs would be
      maxVUs: 50, // if the preAllocatedVUs are not enough, we can initialize more
    },
  },
};

export function test(params) {
  const res = http.get('');
  check(res, {
    'is status 200': (r) => r.status === 200,
  });
}

export default function () {
  test();
}

首先,讓我們看看 100 個 RPS 會發生什么:


? k6 run k6/script.js

          /\\      | ̄ ̄| / ̄ ̄/   / ̄ ̄/
     /\\  /  \\     |  |/  /   /  /
    /  \\/    \\    |     (   /    ̄ ̄\\
   /          \\   |  |\\  \\ |  ( ̄)  |
  / __________ \\  |__| \\__\\ \\_____/ .io

  execution: local
     script: k6/script.js
     output: -

  scenarios: (100.00%) 1 scenario, 50 max VUs, 1m0s max duration (incl. graceful stop):
           * constant_request_rate: 100.00 iterations/s for 30s (maxVUs: 50, gracefulStop: 30s)


     ? is status 200

     checks.........................: 100.00% ? 3001      ? 0
     data_received..................: 845 kB  28 kB/s
     data_sent......................: 134 kB  4.5 kB/s
     http_req_blocked...............: avg=792.54μs min=0s     med=1μs     max=137.85ms p(90)=2μs     p(95)=2μs
     http_req_connecting............: avg=136.6μs  min=0s     med=0s      max=17.67ms  p(90)=0s      p(95)=0s
     http_req_duration..............: avg=11.38ms  min=7.68ms med=10.68ms max=100.96ms p(90)=12.78ms p(95)=14.33ms
       { expected_response:true }...: avg=11.38ms  min=7.68ms med=10.68ms max=100.96ms p(90)=12.78ms p(95)=14.33ms
     http_req_failed................: 0.00%   ? 0         ? 3001
     http_req_receiving.............: avg=89.68μs  min=8μs    med=64μs    max=6.35ms   p(90)=112μs   p(95)=134μs
     http_req_sending...............: avg=152.31μs min=14μs   med=137μs   max=2.57ms   p(90)=274μs   p(95)=313μs
     http_req_tls_handshaking.......: avg=587.62μs min=0s     med=0s      max=74.46ms  p(90)=0s      p(95)=0s
     http_req_waiting...............: avg=11.14ms  min=7.62ms med=10.48ms max=100.92ms p(90)=12.47ms p(95)=13.96ms
     http_reqs......................: 3001    99.983105/s
     iteration_duration.............: avg=12.37ms  min=7.73ms med=10.88ms max=194.89ms p(90)=13.07ms p(95)=14.99ms
     iterations.....................: 3001    99.983105/s
     vus............................: 1       min=1       max=1
     vus_max........................: 50      min=50      max=50


running (0m30.0s), 00/50 VUs, 3001 complete and 0 interrupted iterations
constant_request_rate ? [======================================] 00/50 VUs  30s  100.00 iters/s

?? 如果您想實時查看攔截器隊列中有多少請求,可以在兩個終端窗格中啟動以下命令:

? kubectl proxy
Starting to serve on 127.0.0.1:8001

以及:

? watch -n '1' curl --silent localhost:8001/api/v1/namespaces/keda/services/keda-add-ons-http-interceptor-admin:9090/proxy/queue
{"default/go-helloworld":0}

在 100 RPS 測試中,應用程序沒有縱向擴展,因為攔截器隊列中的掛起請求數不超過 1。提醒一下,我們配置為 targetPendingRequests 10 。所以一切都很正常 ??下面讓我們將 RPS x10 ,看看會發生什么:

? k6 run k6/script.js
          /\\      | ̄ ̄| / ̄ ̄/   / ̄ ̄/     /\\  /  \\     |  |/  /   /  /    /  \\/    \\    |     (   /    ̄ ̄\\   /          \\   |  |\\  \\ |  ( ̄)  |  / __________ \\  |__| \\__\\ \\_____/ .io
  execution: local     script: k6/script.js     output: -
  scenarios: (100.00%) 1 scenario, 50 max VUs, 1m0s max duration (incl. graceful stop):           * constant_request_rate: 1000.00 iterations/s for 30s (maxVUs: 50, gracefulStop: 30s)
     ? is status 200      ?  99% — ? 11642 / ? 2
     checks.........................: 99.98% ? 11642      ? 2     data_received..................: 2.6 MB 86 kB/s     data_sent......................: 446 kB 15 kB/s     dropped_iterations.............: 18356  611.028519/s     http_req_blocked...............: avg=1.07ms   min=0s     med=0s      max=408.06ms p(90)=1μs      p(95)=1μs     http_req_connecting............: avg=43.12μs  min=0s     med=0s      max=11.05ms  p(90)=0s       p(95)=0s     http_req_duration..............: avg=120.09ms min=8.14ms med=74.77ms max=6.87s    p(90)=189.49ms p(95)=250.21ms       { expected_response:true }...: avg=120.01ms min=8.14ms med=74.76ms max=6.87s    p(90)=189.41ms p(95)=249.97ms     http_req_failed................: 0.01%  ? 2          ? 11642     http_req_receiving.............: avg=377.61μs min=5μs    med=32μs    max=27.32ms  p(90)=758.1μs  p(95)=2.49ms     http_req_sending...............: avg=61.57μs  min=9μs    med=45μs    max=9.99ms   p(90)=102μs    p(95)=141μs     http_req_tls_handshaking.......: avg=626.79μs min=0s     med=0s      max=297.82ms p(90)=0s       p(95)=0s     http_req_waiting...............: avg=119.65ms min=7.95ms med=74.32ms max=6.87s    p(90)=188.95ms p(95)=249.76ms     http_reqs......................: 11644  387.60166/s     iteration_duration.............: avg=121.26ms min=8.32ms med=74.87ms max=7.07s    p(90)=189.62ms p(95)=250.28ms     iterations.....................: 11644  387.60166/s     vus............................: 44     min=25       max=50     vus_max........................: 50     min=50       max=50

running (0m30.0s), 00/50 VUs, 11644 complete and 0 interrupted iterationsconstant_request_rate ? [======================================] 00/50 VUs  30s  1000.00 iters/s

結果還不錯,我們有兩個請求 KO ,這是因為應用程序冷啟動(從 0 開始),每個請求等待的時間不超過 1/2 秒。以下是部署歷史記錄:

? k get deployments.apps -w
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
go-helloworld   0/0     0            0           36m
go-helloworld   0/1     0            0           36m
go-helloworld   1/1     1            1           36m
go-helloworld   1/4     1            1           36m
go-helloworld   2/4     4            2           36m
go-helloworld   3/4     4            3           36m
go-helloworld   4/4     4            4           36m
go-helloworld   4/5     4            4           37m
go-helloworld   5/5     5            5           37m

應用程序從 0 個副本擴展到 5 個副本;直到 Web 應用程序的掛起請求數少于 10。

縮放指令非常快,應用程序很快達到了 5 個副本。

以下是 100 RPS 和 1k RPS 測試之間 http_req_duration k6 指標的一些對比:

# 100 RPS
http_req_duration: avg=11.38ms  min=7.68ms med=10.68ms max=100.96ms p(90)=12.78ms p(95)=14.33ms

# 1k RPS
http_req_duration: avg=120.09ms min=8.14ms med=74.77ms max=6.87s    p(90)=189.49ms p(95)=250.21ms

根據我們的需求(SLO,SLA等),我們也許可以稍微調整一下 Web應用程序的 targetPendingRequestsHTTPScaledObject 參數 。

縮放到零!

通過本文介紹的兩個案例,我們已經驗證過了如何縮放到零的場景。但是,大家真的知道它是如何工作的嗎?

由于 KEDA 根據事件自動縮放應用程序,因此從收到事件的那一刻起,KEDA 會將應用程序縮放到其最小副本。例如,如果我們以 HTTP 附加組件為例,KEDA 將在第一次收到請求時擴展到最小副本。

總結

KEDA 提供了一個類似于 FaaS 的事件感知擴展模型,在這種模型中,Kubernetes 部署可以基于需求和基于智能動態地從零擴展,而不會丟失數據和上下文。在業務請求量上來后,應用程序將進行自動化的擴容,當業務低谷的時候,則會自動的縮容。這可以在緩解很多生產環境下的手動擴/縮容操作,以保障用戶的服務體驗。

KEDA 還為 Kubernetes 帶來了更多的事件源。隨著未來更多觸發器的加入,KEDA 有很大的潛力成為生產級 Kubernetes 部署的必需品,從而使應用程序自動縮放成為應用程序開發中的嵌入式組件。

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2022-09-15 08:04:54

k8skubernetes

2023-12-25 07:35:40

數據集成FlinkK8s

2023-08-31 08:21:42

KubernetesKADA驅動

2023-08-04 08:19:02

2023-09-06 08:12:04

k8s云原生

2012-06-27 14:40:57

事件驅動擴展

2017-11-21 10:11:19

陌陌K8sDocker

2022-04-05 09:24:57

K8s安全網絡安全時間響應

2021-11-04 07:49:58

K8SStatefulSetMySQL

2022-04-02 09:57:51

技術京東實踐

2022-04-22 13:32:01

K8s容器引擎架構

2023-11-06 07:16:22

WasmK8s模塊

2024-02-01 09:48:17

2023-09-07 08:58:36

K8s多集群

2024-01-04 08:31:22

k8sController自定義控制器

2020-02-04 16:37:17

k8s 相關應用

2022-04-07 10:17:18

云原生服務器優化

2022-09-14 10:49:30

微服務Kubernetes區塊鏈

2022-09-13 09:04:20

云計算移動辦公大數據
點贊
收藏

51CTO技術棧公眾號

国产日韩精品在线看| 欧美不卡一二三| 成人综合婷婷国产精品久久免费| 国产精品久久久久久久久久久不卡 | 日本午夜在线亚洲.国产| 僵尸世界大战2 在线播放| 国产福利资源一区| 97国产在线| 国产精品视频第一区| 久久草.com| 国产精品久久天天影视| 制服丝袜中文字幕亚洲| 人人在线97| 欧美日韩国产综合视频在线| av资源在线看片| 国内精品久久久久久久影视麻豆| 成人亚洲网站| 中文字幕在线一区免费| 日本一区视频在线| 女主播福利一区| 精品女同一区二区| 毛片一区二区三区四区| 欧美a级在线| 欧美v亚洲v综合ⅴ国产v| 久草资源站在线观看| 亚洲韩国一区二区三区| 99视频免费观看| 91九色在线视频| 日韩欧美三级| 国产亚洲欧美视频| 中国色在线日|韩| 精品无人区乱码1区2区3区在线| 影音先锋可以看的网站| 国产精品亚洲一区二区三区在线| 欧美久久久久久| 亚洲最大成人| 国产精品自拍av| 日韩一卡二卡三卡四卡| 天天干天天操天天干天天操| 一本大道久久加勒比香蕉| 蜜桃视频m3u8在线观看| 色丁香久综合在线久综合在线观看| 国产日韩久久| 69影院欧美专区视频| 精品成人a区在线观看| 亚洲偷熟乱区亚洲香蕉av| 国产精品视频久久久| 久久在线视频免费观看| 成人永久免费| 成人国产精品免费视频| 成人久久一区| 不卡的av在线播放| 阿v视频在线| 蜜桃欧美视频| 日韩欧美一区二区三区| 日韩电影免费| 成人91在线观看| 国产91精品久久久久久久| 丰满的护士2在线观看高清| 欧美国产1区2区| 久久青青视频| 在线视频日韩精品| 四虎在线免费观看| 日韩三级在线免费观看| 欧美久久久网站| 91九色蝌蚪嫩草| 黄网站免费久久| 亚洲77777| 国产毛片精品一区| 毛片毛片毛片毛片| 亚洲成人精品在线| 国产一区二区三区站长工具| 国产亚洲免费的视频看| 不卡一区2区| 99热一区二区三区| 精品毛片网大全| av国产精品| 你懂的网址一区二区三区| 一区在线中文字幕| 五月天婷婷激情视频| 精品视频在线看| 成人资源在线播放| 正在播放一区| 亚洲成在人线免费观看| 欧美一区二区影视| eeuss鲁片一区二区三区在线观看| 四虎免费av| 亚洲成人一区二区| 日本在线观看免费视频| 国产精品久久久久久久久久久新郎 | 日韩av影视综合网| 岛国精品在线| 美女av在线免费观看| 色综合久久久久综合体桃花网| 蜜桃视频在线观看播放| 91亚洲国产成人精品性色| 成人免费视频网站在线观看| 亚洲s色大片| 国产精品毛片a∨一区二区三区|国| 成人动漫一区二区三区| 黄色网址在线免费观看| 国产精品电影一区| 国产亚洲精品精华液| 亚洲成人在线视频网站| 日韩亚洲国产精品| 精品不卡在线| 欧美一级一区| 久久久久久77777| 久久精品成人欧美大片古装| 外国电影一区二区| 日韩免费三级| 欧美久久久久久久久中文字幕| 日韩在线观看| 无限国产资源| 国产精品爱啪在线线免费观看| 国产精品素人视频| 国产999精品在线观看| 黄色一级视频在线播放| 亚洲无亚洲人成网站77777| 精品亚洲国产成人av制服丝袜| av在线播放国产| 亚洲国产一区自拍| 国产精品日韩精品欧美精品| 亚洲国产一区二区三区在线| 欧美三级韩国三级日本一级| 成人一区而且| 满满都是荷尔蒙韩剧在线观看| 国产成人精品在线播放| 国产精品大尺度| 亚洲综合免费观看高清完整版在线 | 国产精品毛片a∨一区二区三区|国| 亚洲国产精品成人久久综合一区| 日本一区二区三区中文字幕| 日韩欧美一级在线| 中文字幕精品一区二区三区精品| 成人福利在线视频| 亚洲日本韩国一区| 国产精品片aa在线观看| 91嫩草在线播放| 国产有码一区二区| 午夜精品一区二区三区三上悠亚| 日本暖暖在线视频| 久久99热只有频精品91密拍| 欧美日韩国产精品成人| 欧美日韩精品免费观看视完整| 亚洲成人a**址| 亚洲免费视频在线观看| 黄色欧美在线| 福利h视频在线| 国产欧美一区二区在线播放| 日韩欧美你懂的| 国产91精品精华液一区二区三区| 成人h动漫在线| 国产精品久久网| 欧美亚洲国产一区二区三区 | 日本在线免费| 日本一区美女| 亚洲区免费影片| 国产欧美日韩在线观看| 国产91精品对白在线播放| 国产经典自拍视频在线观看| 欧美日韩日本网| 日韩中文字幕在线精品| 国产精品五月天| 亚洲国产成人精品女人| 97超碰人人爱| 韩国美女主播一区| 一本大道av一区二区在线播放| 毛片一区二区三区| 在线观看av网站永久| 色多多国产成人永久免费网站| 国产色91在线| 欧美fxxxxxx另类| 大胆人体一区| 国产二级片在线| 日本黑人久久| 欧美大片在线看| 久久不见久久见中文字幕免费| 黄页网址在线观看| 亚洲伊人婷婷| 欧美专区国产专区| 日韩精品专区在线| 日韩毛片视频在线看| 久久福利毛片| 你懂的在线观看一区二区| av网站在线看| 黄色一级影院| 成人黄色片免费| 欧美一卡二卡三卡| 久久这里只有精品视频网| 欧美卡一卡二| 91精品国产91久久久久青草| 亚洲成年人在线播放| 亚洲日穴在线视频| 久久精品国产999大香线蕉| 精品香蕉视频| 一级毛片高清视频| 青青视频免费在线| 99在线观看视频网站| 欧美成人免费网|