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

我花了10個小時,寫出了這篇K8S架構解析

原創
云計算
互聯網技術飛速發展的今天,為了承載請求的高并發和業務的多樣性,微服務的架構成了各個公司的標配。

【51CTO.com原創稿件】互聯網技術飛速發展的今天,為了承載請求的高并發和業務的多樣性,微服務的架構成了各個公司的標配。

[[282303]] 

圖片來自 Pexels

每個微服務通過 Docker 進行發布,隨著業務的發展,系統中遍布著各種各樣的容器。于是,容器的資源調度,部署運行,擴容縮容就是我們要面臨的問題。

基于 Kubernetes 作為容器集群的管理平臺被廣泛應用,今天我們一起來看看 Kubernetes 的架構中有那些常用的組件以及運行原理。

Kubernetes 架構概述

Kubernetes 是用來管理容器集群的平臺。既然是管理集群,那么就存在被管理節點,針對每個 Kubernetes 集群都由一個 Master 負責管理和控制集群節點。

我們通過 Master 對每個節點 Node 發送命令。簡單來說,Master 就是管理者,Node 就是被管理者。

Node 可以是一臺機器或者一臺虛擬機。在 Node 上面可以運行多個 Pod,Pod 是 Kubernetes 管理的最小單位,同時每個 Pod 可以包含多個容器(Docker)。

通過下面的 Kubernetes 架構簡圖可以看到 Master 和 Node 之間的關系:

 

Kubernetes 架構簡圖

通常我們都是通過 kubectl 對 Kubernetes 下命令的,它通過 APIServer 去調用各個進程來完成對 Node 的部署和控制。

APIServer 的核心功能是對核心對象(例如:Pod,Service,RC)的增刪改查操作,同時也是集群內模塊之間數據交換的樞紐。

它包括了常用的 API,訪問(權限)控制,注冊,信息存儲(etcd)等功能。在它的下面我們可以看到 Scheduler,它將待調度的 Pod 綁定到 Node 上,并將綁定信息寫入 etcd 中。

etcd 包含在 APIServer 中,用來存儲資源信息。接下來就是 Controller Manager 了,如果說 Kubernetes 是一個自動化運行的系統,那么就需要有一套管理規則來控制這套系統。

Controller Manager 就是這個管理者,或者說是控制者。它包括 8 個 Controller,分別對應著副本,節點,資源,命名空間,服務等等。

緊接著,Scheduler 會把 Pod 調度到 Node 上,調度完以后就由 kubelet 來管理 Node 了。

kubelet 用于處理 Master 下發到 Node 的任務(即 Scheduler 的調度任務),同時管理 Pod 及 Pod 中的容器。

在完成資源調度以后,kubelet 進程也會在 APIServer 上注冊 Node 信息,定期向 Master 匯報 Node 信息,并通過 cAdvisor 監控容器和節點資源。

由于,微服務的部署都是分布式的,所以對應的 Pod 以及容器的部署也是。為了能夠方便地找到這些 Pod 或者容器,引入了 Service(kube-proxy)進程,它來負責反向代理和負載均衡的實施。

上面就是 Kubernetes 架構的簡易說明,涉及到了一些核心概念以及簡單的信息流動。

將一些功能收錄到了 APIServer 中,這個簡圖比官網的圖顯得簡單一些,主要是方便大家記憶。

后面我們會用一個簡單的例子,帶大家把 Kubernetes 的概念的由來做深入的了解。

從一個例子開始

假設使用 Kubernetes 部署 Tomcat 和 MySQL 服務到兩個 Node 上面。其中 Tomcat 服務生成兩個實例也就是生成兩個 Pod,用來對其做水平擴展。

MySQL 只部署一個實例,也就是一個 Pod。可以通過外網訪問 Tomcat,而 Tomcat 可以在內網訪問 MySQL。

 

例子示意圖

這里我們假設 Kubernetes 和 Docker 的安裝都已經完成,并且鏡像文件都已經準備好了。重點看 Kubernetes 如何部署和管理容器。

kubectl 和 APIServer

既然我們要完成上面的例子,接下來就要部署兩個應用。

首先,根據要部署的應用建立 Replication Controller(RC)。RC 是用來聲明應用副本的個數,也就是 Pod 的個數。

按照上面的例子,Tomcat 的 RC 就是 2,MySQL 的 RC 就是 1。

由于 kubectl 作為用戶接口向 Kubernetes 下發指令,那么指令是通過“.yaml”的配置文件編寫的。

定義 mysql-rc.yaml 的配置文件來描述 MySQL 的 RC:

  1. apiVersion: V1 
  2. kind: ReplicationController 
  3. metadata: 
  4.  name: mysql#RC的名稱,全局唯一 
  5. spec: 
  6.  replicas:1 #Pod 副本的期待數量 
  7. selector : 
  8. app: mysql 
  9.  template: #Pod模版,用這個模版來創建Pod 
  10. metadata: 
  11.  labels: 
  12. app:mysql#Pod副本的標簽 
  13. spec: 
  14.  containers:#容器定義部分 
  15.      -name:mysql 
  16. Image:mysql#容器對應的DockerImage 
  17.       Ports: 
  18.       -containerPort:3306#容器應用監聽的端口號 
  19.       Env:#注入容器的環境變量 
  20.       -name:MYSQL_ROOT_PASSWORD 
  21.       Value:”123456” 

從上面的配置文件可以看出,需要對這個 RC 定義一個名字,以及期望的副本數,以及容器中的鏡像文件。然后通過 kubectl 作為客戶端的 cli 工具,執行這個配置文件。

 

通過 kubectl 執行 RC 配置文件

執行了上面的命令以后,Kubernetes 會幫助我們部署副本 MySQL 的 Pod 到 Node。

此時先不著急看結果,回到最開始的架構圖,可以看到 kubectl 會向 Master 中的 APIServer 發起命令,看看 APIServer 的結構和信息的傳遞吧。

 

Kubernetes API Server 通過一個名為 kube-apiserver 的進程提供服務,該進程運行在 Master 上。

可以通過 Master 的 8080 端口訪問 kube-apiserver 進程,它提供 REST 服務。

因此可以通過命令行工具 kubectl 來與 Kubernetes APIServer 交互,它們之間的接口是 RESTful API。

APIServer 的架構從上到下分為四層:

  • API 層:主要以 REST 方式提供各種 API 接口,針對 Kubernetes 資源對象的 CRUD 和 Watch 等主要 API,還有健康檢查、UI、日志、性能指標等運維監控相關的 API。
  • 訪問控制層:負責身份鑒權,核準用戶對資源的訪問權限,設置訪問邏輯(Admission Control)。
  • 注冊表層:選擇要訪問的資源對象。PS:Kubernetes 把所有資源對象都保存在注冊表(Registry)中,例如:Pod,Service,Deployment 等等。
  • etcd 數據庫:保存創建副本的信息。用來持久化 Kubernetes 資源對象的 Key-Value 數據庫。

 

APIServer 分層架構圖

當 kubectl 用 Create 命令建立 Pod 時,是通過 APIServer 中的 API 層調用對應的 RESTAPI 方法。

之后會進入權限控制層,通過 Authentication 獲取調用者身份,Authorization 獲取權限信息。

AdmissionControl 中可配置權限認證插件,通過插件來檢查請求約束。例如:啟動容器之前需要下載鏡像,或者檢查具備某命名空間的資源。

還記得 mysql-rc.yaml 中配置需要生成的 Pod 的個數為 1。到了 Registry 層會從 CoreRegistry 資源中取出 1 個 Pod 作為要創建的 Kubernetes 資源對象。

然后將 Node,Pod 和 Container 信息保存在 etcd 中去。這里的 etcd 可以是一個集群,由于里面保存集群中各個 Node/Pod/Container 的信息,所以必要時需要備份,或者保證其可靠性。

Controller Manager,Scheduler 和 kubelet

前面通過 kubectl 根據配置文件,向 APIServer 發送命令,在 Node 上面建立 Pod 和 Container。

在 APIServer,經過 API 調用,權限控制,調用資源和存儲資源的過程。實際上還沒有真正開始部署應用。

這里需要 Controller Manager,Scheduler 和 kubelet 的協助才能完成整個部署過程。

在介紹他們協同工作之前,要介紹一下在 Kubernetes 中的監聽接口。從上面的操作知道,所有部署的信息都會寫到 etcd 中保存。

實際上 etcd 在存儲部署信息的時候,會發送 Create 事件給 APIServer,而 APIServer 會通過監聽(Watch)etcd 發過來的事件。其他組件也會監聽(Watch)APIServer 發出來的事件。

 

Kubernetes 就是用這種 List-Watch 的機制保持數據同步的,如上圖:

  • 這里有三個 List-Watch,分別是 kube-controller-manager(運行在Master),kube-scheduler(運行在 Master),kublete(運行在 Node)。他們在進程已啟動就會監聽(Watch)APIServer 發出來的事件。
  • kubectl 通過命令行,在 APIServer 上建立一個 Pod 副本。
  • 這個部署請求被記錄到 etcd 中,存儲起來。
  • 當 etcd 接受創建 Pod 信息以后,會發送一個 Create 事件給 APIServer。
  • 由于 Kubecontrollermanager 一直在監聽 APIServer 中的事件。此時 APIServer 接受到了 Create 事件,又會發送給 Kubecontrollermanager。
  • Kubecontrollermanager 在接到 Create 事件以后,調用其中的 Replication Controller 來保證 Node 上面需要創建的副本數量。

上面的例子 MySQL 應用是 1 個副本,Tomcat 應用是兩個副本。一旦副本數量少于 RC 中定義的數量,Replication Controller 會自動創建副本。總之它是保證副本數量的 Controller。PS:擴容縮容的擔當。

  • 在 Controller Manager 創建 Pod 副本以后,APIServer 會在 etcd 中記錄這個 Pod 的詳細信息。例如在 Pod 的副本數,Container 的內容是什么。
  • 同樣的 etcd 會將創建 Pod 的信息通過事件發送給 APIServer。
  • 由于 Scheduler 在監聽(Watch)APIServer,并且它在系統中起到了“承上啟下”的作用,“承上”是指它負責接收創建的 Pod 事件,為其安排 Node;“啟下”是指安置工作完成后,Node 上的 kubelet 服務進程接管后繼工作,負責 Pod 生命周期中的“下半生”。

換句話說,Scheduler 的作用是將待調度的 Pod 按照調度算法和策略綁定到集群中 Node 上,并將綁定信息寫入 etcd 中。

  • Scheduler 調度完畢以后會更新 Pod 的信息,此時的信息更加豐富了。除了知道 Pod 的副本數量,副本內容。還知道部署到哪個 Node 上面了。
  • 同樣,將上面的 Pod 信息更新到 etcd 中,保存起來。
  • etcd 將更新成功的事件發送給 APIServer。
  • 注意這里的 kubelet 是在 Node 上面運行的進程,它也通過 List-Watch 的方式監聽(Watch)APIServer 發送的 Pod 更新的事件。實際上,在第 9 步的時候創建 Pod 的工作就已經完成了。

為什么 kubelete 還要一直監聽呢?原因很簡單,假設這個時候 kubectl 發命令,需要把原來的 MySQL 的 1 個 RC 副本擴充成 2 個。那么這個流程又會觸發一遍。

作為 Node 的管理者 kubelet 也會根據最新的 Pod 的部署情況調整 Node 端的資源。

又或者 MySQL 應用的 RC 個數沒有發生變化,但是其中的鏡像文件升級了,kubelet 也會自動獲取最新的鏡像文件并且加載。

通過上面 List-Watch 的介紹大家發現了,除了之前引入的 kubectl 和 APIServer 以外又引入了 Controller Manager,Scheduler 和 kubelet。

這里給大家介紹一下他們的作用和原理:

聚焦 Scheduler,Controller Manager,kubelet 

Controller Manager

Kubernetes 需要管理集群中的不同資源,所以針對不同的資源要建立不同的 Controller。

每個 Controller 通過監聽機制獲取 APIServer 中的事件(消息),它們通過 API Server 提供的(List-Watch)接口監控集群中的資源,并且調整資源的狀態。

可以把它想象成一個盡職的管理者,隨時管理和調整資源。比如 MySQL 所在的 Node 意外宕機了,Controller Manager 中的 Node Controller 會及時發現故障,并執行修復流程。

在部署了成百上千微服務的系統中,這個功能極大地協助了運維人員。從此可以看出,Controller Manager 是 Kubernetes 資源的管理者,是運維自動化的核心。

它分為 8 個 Controller,上面我們介紹了 Replication Controller,這里我們把其他幾個都列出來,就不展開描述了。

 

Controller Manager 中不同的 Controller 負責對不同資源的監控和管理

Scheduler 與 kubelet

Scheduler 的作用是,將待調度的 Pod 按照算法和策略綁定到 Node 上,同時將信息保存在 etcd 中。

如果把 Scheduler 比作調度室,那么這三件事就是它需要關注的,待調度的 Pod、可用的 Node,調度算法和策略。

簡單地說,就是通過調度算法/策略把 Pod 放到合適的 Node 中去。此時 Node 上的 kubelet 通過 APIServer 監聽到 Scheduler 產生的 Pod 綁定事件,然后通過 Pod 的描述裝載鏡像文件,并且啟動容器。

也就是說 Scheduler 負責思考,Pod 放在哪個 Node,然后將決策告訴 kubelet,kubelet 完成 Pod 在 Node 的加載工作。

說白了,Scheduler 是 boss,kubelet 是干活的工人,他們都通過 APIServer 進行信息交換。

 

Scheduler 與 kubelet 協同工作圖

Service 和 kubelet

經歷上面一系列的過程,終于將 Pod 和容器部署到 Node 上了。

 

MySQL 部署成功

作為部署在 Kubernetes 中,Pod 如何訪問其他的 Pod 呢?答案是通過 Kubernetes 的 Service 機制。

在 Kubernetes 中的 Service 定義了一個服務的訪問入口地址(IP+Port)。Pod 中的應用通過這個地址訪問一個或者一組 Pod 副本。

Service 與后端 Pod 副本集群之間是通過 Label Selector 來實現連接的。Service 所訪問的這一組 Pod 都會有同樣的 Label,通過這樣的方法知道這些 Pod 屬于同一個組。

 

Pod 通過 Service 訪問其他 Pod

寫 MySQL 服務的配置文件(mysql-svc.yaml)如下:

  1. apiVersion : v1 
  2. kind: Service #說明創建資源對象的類型是Service 
  3. metadata: 
  4.  name: mysql#Service全局唯一名稱 
  5. spec: 
  6. prots: 
  7. -port: 3306#Service的服務端口號 
  8.  selector:#Service對應的Pod標簽,用來給Pod分類 
  9.    app: mysql 

按照慣例運行 kubectl,創建 Service:

 

再用 getsvc 命令檢查 Service 信息:

 

這里的 Cluster-IP 169.169.253.143 是由 Kubernetes 自動分配的。當一個 Pod 需要訪問其他的 Pod 的時候就需要通過 Service 的 Cluster-IP 和 Port。

也就是說 Cluster-IP 和 Port 是 Kubernetes 集群的內部地址,是提供給集群內的 Pod 之間訪問使用的,外部系統是無法通過這個 Cluster-IP 來訪問 Kubernetes 中的應用的。

上面提到的 Service 只是一個概念,而真正將 Service 落實的是 kube-proxy。

只有理解了 kube-proxy 的原理和機制,我們才能真正理解 Service 背后的實現邏輯。

在 Kubernetes 集群的每個 Node 上都會運行一個 kube-proxy 服務進程,我們可以把這個進程看作 Service 的負載均衡器,其核心功能是將到 Service 的請求轉發到后端的多個 Pod 上。

此外,Service 的 Cluster-IP 與 NodePort 是 kube-proxy 服務通過 iptables 的 NAT 轉換實現的。kube-proxy 在運行過程中動態創建與 Service 相關的 iptables 規則。

由于 iptables 機制針對的是本地的 kube-proxy 端口,所以在每個 Node 上都要運行 kube-proxy 組件。

因此在 Kubernetes 集群內部,可以在任意 Node 上發起對 Service 的訪問請求。

 

集群內部通過 kube-proxy(Service)訪問其他 Pod

正如 MySQL 服務,可以被 Kubernetes 內部的 Tomcat 調用,那么 Tomcat 如何被 Kubernetes 外部調用?

先生成配置文件,myweb-rc.yaml 看看:

  1. apiVersion: V1 
  2. kind: ReplicationController 
  3. metadata: 
  4.  name: myweb#RC的名稱,全局唯一 
  5. spec: 
  6.  replicas:2#Pod 副本的期待數量,這里的數量是2,需要建立兩個Tomcat的副本 
  7. selector : 
  8. app: myweb 
  9.  template: #Pod模版,用這個模版來創建Pod 
  10. metadata: 
  11.  labels: 
  12. app:myweb#Pod副本的標簽 
  13. spec: 
  14.  containers: #容器定義部分 
  15.      -name:mysql 
  16. Image:kubeguide/tomcat-app:v1#容器對應的DockerImage 
  17.       Ports: 
  18.       -containerPort:8080#容器應用監聽的端口號 

在 kubectl 中使用 Create 建立 myweb 副本。

 

副本創建完畢以后,創建對應的服務配置文件 myweb-svc.yaml。

  1. apiVersion : v1 
  2. kind: Service #說明創建資源對象的類型是Service 
  3. metadata: 
  4.  name: myweb#Service全局唯一名稱 
  5. spec: 
  6. prots: 
  7. -port: 8080#Service的服務端口號 
  8. nodePort: 30001#這個就是外網訪問Kubernetes內部應用的端口。 
  9.  selector: #Service對應的Pod標簽,用來給Pod分類 
  10.    app: myweb 

同樣在 kubectl 中運行 Create 命令,建立 Service 資源。

 

從上面的配置文件可以看出,Tomcat 的 Service 中多了一個 nodePort 的配置,值為 30001。

也就是說外網通過 30001 這個端口加上 NodeIP 就可以訪問 Tomcat 了。

運行命令之后,得到一個提示,大致意思是“如果你要將服務暴露給外網使用,你需要設置防火墻規則讓 30001 端口能夠通行。”

由于 Cluster-IP 是一個虛擬的 IP,僅供 Kubernetes 內部的 Pod 之間的通信。

Node 作為一個物理節點,因此需要使用 Node-IP 和 nodePort 的組合來從 Kubernetes 外面訪問內部的應用。

如果按照上面的配置,部署了兩個 Tomcat 應用,當外網訪問時選擇那個 Pod 呢?這里需要通過 Kubernetes 之外的負載均衡器來實現的。

 

Kubernetes 之外的負載均衡器

可以通過 Kubernetes 的 LoadBlancerService 組件來協助實現。通過云平臺申請創建負載均衡器,向外暴露服務。

目前 LoadBlancerService 組件支持的云平臺比較完善,比如國外的 GCE、DigitalOcean,國內的阿里云,私有云 OpenStack 等等。

從用法上只要把 Service 的 type=NodePort 改為 type=LoadBalancer,Kubernetes 就會自動創建一個對應的 Load Balancer 實例并返回它的 IP 地址供外部客戶端使用。

至此,MySQL(RC 1)和 Tomcat(RC 2)已經在 Kubernetes 部署了。并在 Kubernetes 內部 Pod 之間是可以互相訪問的,在外網也可以訪問到 Kubernetes 內部的 Pod。

 

Pod 在 Kubernetes 內互相訪問,外網訪問 Pod

另外,作為資源監控 Kubernetes 在每個 Node 和容器上都運行了 cAdvisor。它是用來分析資源使用率和性能的工具,支持 Docker 容器。

kubelet 通過 cAdvisor 獲取其所在 Node 及容器(Docker)的數據。cAdvisor 自動采集 CPU、內存、文件系統和網絡使用的統計信息。

kubelet 作為 Node 的管理者,把 cAdvisor 采集上來的數據通過 RESTAPI 的形式暴露給 Kubernetes 的其他資源,讓他們知道 Node/Pod 中的資源使用情況。

總結

由于微服務的迅猛發展,Kubernetes 作為微服務治理平臺被廣泛應用。由于其發展時間長,包含服務功能多我們無法一一列出。

因此,從一個簡單的創建應用副本的例子入手,介紹了各個重要組件的概念和基本原理。

Kubernetes 是用來管理容器集群的,Master 作為管理者,包括 APIServer,Scheduler,Controller Manager。

Node作為副本部署的載體,包含多個 Pod,每個 Pod 又包含多個容器(container)。用戶通過 kubectl 給 Master 中的 APIServer 下部署命令。

命令主體是以“.yaml”結尾的配置文件,包含副本的類型,副本個數,名稱,端口,模版等信息。

APIServer 接受到請求以后,會分別進行以下操作:權限驗證(包括特殊控制),取出需要創建的資源,保存副本信息到etcd。

APIServer 和 Controller Manager,Scheduler 以及 kubelete 之間通過 List-Watch 方式通信(事件發送與監聽)。

Controller Manager 通過 etcd 獲取需要創建資源的副本數,交由 Scheduler 進行策略分析。

最后 kubelet 負責最終的 Pod 創建和容器加載。部署好容器以后,通過 Service 進行訪問,通過 cAdvisor 監控資源。

作者:崔皓

簡介:十六年開發和架構經驗,曾擔任過惠普武漢交付中心技術專家,需求分析師,項目經理,后在創業公司擔任技術/產品經理。善于學習,樂于分享。目前專注于技術架構與研發管理。

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

 

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2019-11-04 13:09:43

數據平臺架構

2021-09-14 13:49:32

開發技能工具

2019-09-09 09:53:52

K8s集群架構

2022-04-22 13:32:01

K8s容器引擎架構

2022-12-28 10:52:34

Etcd備份

2022-06-14 07:56:15

Kubernetes存儲架構K8S

2024-07-22 13:43:31

Kubernetes容器

2023-11-06 07:16:22

WasmK8s模塊

2024-05-27 00:00:10

KubernetesK8s云原生

2023-09-06 08:12:04

k8s云原生

2022-01-02 08:42:50

架構部署容器

2024-12-06 08:00:00

K8s

2023-12-05 08:33:44

滴滴故障k8s

2024-12-30 08:58:04

2020-05-12 10:20:39

K8s kubernetes中間件

2022-09-05 08:26:29

Kubernetes標簽

2023-08-03 08:36:30

Service服務架構

2023-08-04 08:19:02

2023-05-25 21:38:30

2022-08-29 10:08:50

跨集群
點贊
收藏

51CTO技術棧公眾號

欧美一区不卡| 亚洲一区av| 久久色.com| 成人av电影天堂| 国产乱码久久久久久| 精品一区三区| 欧美一级一区二区| 日韩激情免费视频| 九七电影韩国女主播在线观看| 国产精品中文有码| 人体精品一二三区| 男人的天堂久久久| 国产亚洲一区| 日韩精品一区二区三区在线| 男人亚洲天堂网| www视频在线看| 91免费视频观看| 91在线免费网站| 99久久久久久久久| 午夜国产一区| 在线亚洲男人天堂| 国产人妻黑人一区二区三区| 日本肉肉一区 | 狂野欧美性猛交| 美国成人xxx| 欧美日韩国产首页| 国产主播在线看| 欧美理论电影| 成人欧美一区二区三区小说| 明星裸体视频一区二区| 国精产品一品二品国精品69xx| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品一区二区三区在线视频| 日韩av手机在线免费观看| 国产精品美女久久久久久不卡| 精品福利一二区| 手机精品视频在线| jizz亚洲女人高潮大叫| 精品人伦一区二区三区蜜桃网站| 99热这里只有精品免费| 麻豆av在线免费看| 欧美国产精品一区二区三区| 玖玖玖精品中文字幕| 丰满熟妇乱又伦| 国产精品自拍网站| 亚洲综合自拍一区| 国产精品久久久久久久久久久久久久久久久久 | 久久男人av资源网站| 亚洲激情图片网| 精品72久久久久中文字幕| 日韩av在线免费观看| 在线中文字日产幕| 亚州一区二区| 日韩欧美不卡在线观看视频| 国产精品探花在线播放| 91成人福利社区| 在线成人av影院| 加勒比av中文字幕| 国产美女亚洲精品7777| 欧美自拍偷拍一区| 视色视频在线观看| 欧洲精品久久久久毛片完整版| 欧美午夜精品一区二区蜜桃| 99视频在线视频| 欧美极品在线| 91精品免费在线观看| 久久久久久久高清| 狂野欧美xxxx韩国少妇| 欧美成人三级电影在线| 亚洲一区二区三区黄色| 日韩av网站在线免费观看| 国产丝袜精品视频| 久久久久久成人网| 欧美韩日一区| 欧美猛少妇色xxxxx| 精品视频一区二区在线观看| 日韩视频一区| 国产成人激情视频| 91精品人妻一区二区三区果冻| 韩国午夜理伦三级不卡影院| 99国产视频| 五月婷婷狠狠干| 欧美激情一区二区三区不卡| 中文一区一区三区免费| 美女精品导航| 日韩欧美国产骚| 潘金莲激情呻吟欲求不满视频| 亚洲日本va午夜在线电影| 亚洲大胆人体av| 九九九视频在线观看| 欧美1区2区3区| 亚洲**2019国产| 中文字幕av片| 国产**成人网毛片九色| 久久av一区二区三区亚洲| 成人亚洲性情网站www在线观看| 综合久久久久久| 免费看国产曰批40分钟| 国产激情欧美| 欧美一区二区大片| 黄瓜视频污在线观看| 91精品国产调教在线观看| 国模精品视频一区二区| 亚洲一级片免费看| 99综合电影在线视频| 一区二区视频在线免费| 国产高清自产拍av在线| 欧美久久一区二区| 日韩 中文字幕| 欧美韩国一区| 国产成人在线一区| 欧美特黄一级视频| 中文字幕在线播放不卡一区| av免费观看网| 亚洲日本va| 久久精品国产亚洲精品| 丰满少妇xoxoxo视频| 国产91在线|亚洲| 一区二区视频在线观看| 偷拍中文亚洲欧美动漫| 精品乱人伦小说| 四虎地址8848| 丝袜国产日韩另类美女| 国产一区二区三区高清| 中文字幕在线观看网站| 欧美日韩一区不卡| 国产精品无码久久久久一区二区| 国产精品mv在线观看| 国产精品网址在线| 久久久久久久影视| 天天色综合天天| 国产精品扒开腿做爽爽爽a片唱戏| 国产高清欧美| 国产精品综合网站| 第三区美女视频在线| 一本一道综合狠狠老| 黄色av网址在线观看| 激情91久久| 国产福利久久精品| 污污的视频在线观看| 91精品国产综合久久福利| 国产一区二区三区视频播放| 青青草国产精品亚洲专区无| 日韩av影视| 岛国av在线播放| 精品久久一二三区| 国产亚洲精品码| 国产精品77777竹菊影视小说| 日本不卡二区高清三区| 日韩欧美精品电影| 在线不卡国产精品| 中文字幕码精品视频网站| 国产精品色婷婷久久58| 午夜久久久精品| 色乱码一区二区三区网站| 国产精品欧美亚洲777777| aaa在线观看| 欧美精品乱码久久久久久按摩 | 精品综合久久久久| 欧美国产偷国产精品三区| 成人精品视频在线| www视频在线看| 精品成人在线观看| 激情五月色婷婷| 成人免费直播在线| 丝袜+亚洲+另类+欧美+变态| 欧美二三四区| 亚洲老头同性xxxxx| 美女又爽又黄免费视频| 久久综合久久99| 中文字幕在线观看第三页| 日韩成人影院| 97人人做人人人难人人做| sis001亚洲原创区| 亚洲男人天天操| 波多野结衣黄色网址| 国产精品福利电影一区二区三区四区| 中文字幕国产高清| 在线成人av| 日本成人三级电影网站| 国产精久久久| 69视频在线播放| 成人午夜影视| 精品国产乱子伦一区| 久久久成人免费视频| 中文字幕中文乱码欧美一区二区| 亚洲精品一二三四| 午夜亚洲性色视频| 爱爱爱视频网站| 久久成人福利| 国产有码一区二区| free性m.freesex欧美| 亚洲无线码在线一区观看| 国产av一区二区三区| 精品美女久久久久久免费| 蜜桃视频最新网址| 97精品电影院| 一区二区久久精品| 国产精品一二| 日韩视频一二三| 国产乱码精品一区二区亚洲| 亚洲自拍另类欧美丝袜| 国产精品专区免费| 九色精品美女在线| 国产爆初菊在线观看免费视频网站| 日韩欧美国产午夜精品| www.五月婷婷.com| 亚洲国产成人av网| 国产成人免费在线观看视频| 91视视频在线观看入口直接观看www| 国产高清视频网站| 亚洲欧美视频| 国产精品一色哟哟| 欧美韩国日本在线观看| 欧美日韩电影一区二区| 大桥未久女教师av一区二区| 国产精品中文字幕在线| 亚洲欧洲高清| 97热在线精品视频在线观看| 成人短视频在线| 一本久久综合亚洲鲁鲁| 青春草在线观看 | 少妇一级淫免费放| 亚洲专区在线| 成人午夜视频在线观看免费| 天天超碰亚洲| 亚洲精品不卡| 国产精品密蕾丝视频下载| 好吊色欧美一区二区三区四区| 精品国产亚洲日本| 成人高清视频观看www| 九七电影院97理论片久久tvb| 欧美中文字幕视频在线观看| 大桥未久在线播放| 色综合五月天导航| 羞羞视频在线观看免费| 久久艳片www.17c.com| 日本三级视频在线观看| 一道本无吗dⅴd在线播放一区| 你懂的在线播放| 亚洲欧美在线x视频| 日本视频在线观看一区二区三区| 亚洲精品理论电影| 亚洲美女性生活| 精品国产污污免费网站入口| 北条麻妃一二三区| 精品少妇一区二区三区| 亚洲xxx在线| 精品1区2区在线观看| 风流老熟女一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 亚洲狼人综合网| 亚洲国产欧美在线成人app| 日韩在线观看视频一区二区三区| 亚洲成人动漫在线播放| 欧美综合视频在线| 日韩大片在线观看视频| 理论在线观看| 亚洲午夜色婷婷在线| 成年女人的天堂在线| 日韩在线中文视频| 在线播放免费av| 性欧美视频videos6一9| 天堂а√在线最新版中文在线| 浅井舞香一区二区| 日韩一区二区三免费高清在线观看| 91久久国产精品91久久性色| 日韩三级不卡| 精品国产免费久久久久久尖叫| 九九视频精品全部免费播放| 日韩欧美视频一区二区| 91超碰成人| 福利视频一区二区三区四区| 久久久成人网| 色婷婷激情视频| 成人毛片视频在线观看| 亚洲最大成人网站| 国产精品久久久久四虎| 国产亚洲小视频| 色噜噜夜夜夜综合网| 国产美女免费看| 亚洲精品久久在线| 欧美jizz18性欧美| 国产做受高潮69| 日韩成人在线一区| 国产精品二区三区| 欧美一二区在线观看| 青草全福视在线| 日韩在线一区二区| 亚洲AV成人精品| 国产喷白浆一区二区三区| 欧美黄色免费看| 在线看不卡av| 亚洲狼人综合网| 视频在线观看一区二区| 岛国毛片av在线| 成人看片人aa| 最新国产精品视频| 黄色影视在线观看| 国产欧美日韩一级| 中文字幕剧情在线观看| 久久久久久麻豆| 九九视频免费在线观看| 在线日韩av片| 日韩一区二区三区不卡| 久久综合伊人77777| 三级成人黄色影院| 国产久一道中文一区| 久久精品国产大片免费观看| 阿v天堂2018| 韩国一区二区三区| 亚洲一二三精品| 欧美日韩国产专区| 黑人精品一区二区三区| 色老头一区二区三区在线观看| 水蜜桃在线视频| 高清国产一区| 91精品一区二区三区综合在线爱| 免费在线观看日韩视频| 国产成人8x视频一区二区| 岛国片在线免费观看| 日韩欧美成人精品| 台湾av在线二三区观看| 欧美大肥婆大肥bbbbb| 国产精品久久久久久妇女| 玛丽玛丽电影原版免费观看1977| 欧美黄污视频| 深爱五月综合网| 国产精品大尺度| 97国产成人无码精品久久久| 亚洲人成自拍网站| 黑人巨大精品欧美一区二区桃花岛| 国产亚洲欧美另类一区二区三区| 欧美日本不卡高清| 青青草精品在线| 亚洲欧美另类图片小说| 国产精品久久久久久免费免熟| 伊人亚洲福利一区二区三区| 三级成人黄色影院| 日本一区二区三区四区高清视频| 久久亚洲精品伦理| 性欧美精品中出| 色噜噜狠狠成人网p站| 青青久草在线| 日本成人激情视频| 亚洲免费福利一区| 一区二区在线播放视频| 国产欧美精品一区aⅴ影院| 在线观看日本网站| 在线性视频日韩欧美| 亚洲影视资源| 欧美 日韩 国产精品| 国产91丝袜在线播放0| 久久99久久久| 亚洲精品狠狠操| 欧洲一区精品| 日韩一二三区不卡在线视频| 蜜臀av性久久久久蜜臀aⅴ| 国产色无码精品视频国产| 欧美一区二区三区在| 男插女视频久久久| 国产青春久久久国产毛片| 新狼窝色av性久久久久久| 欧美图片第一页| 欧美日韩一级视频| 二区三区四区高清视频在线观看| 51精品国产人成在线观看| 亚洲午夜久久久久久尤物| 黄色av网址在线观看| 91久久久免费一区二区| 美女写真理伦片在线看| 999热视频| 亚洲综合欧美| 久草福利资源在线| 精品精品欲导航| 视频二区不卡| avove在线观看| 99精品国产99久久久久久白柏| 日韩不卡高清视频| 欧美成人免费小视频| 神马久久av| 国产美女18xxxx免费视频| 亚洲国产精品久久久男人的天堂| 免费a级毛片在线观看| 91久久久久久久久久久久久| 影音先锋中文字幕一区| 天天操天天舔天天射| 欧美r级电影在线观看| japanese23hdxxxx日韩| 日本天堂免费a| 国产人成亚洲第一网站在线播放| 国产欧美日韩成人| 国产69久久精品成人看| 婷婷综合在线| mm131美女视频| 日韩欧美国产综合| 日本一区免费网站| 日本黄大片在线观看| 国产欧美日韩在线看| 蜜桃视频在线观看www|