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

Kubernetes CRI - 容器運行時接口解析

開發 架構
kubelet 本身,也是按照“控制器”模式來工作的。它實際的工作原理,可以用如下所示的一幅示意圖來表示清楚。

[[430374]]

本文轉載自微信公眾號「運維開發故事」,作者沒有文案的夏老師。轉載本文請聯系運維開發故事公眾號。

kubelet 的組件

kubelet 本身,也是按照“控制器”模式來工作的。它實際的工作原理,可以用如下所示的一幅示意圖來表示清楚。

  • Kubelet Server 對外提供 API,供 kube-apiserver、metrics-server 等服務調用。比如 kubectl exec 時需要通過 Kubelet API /exec/{token} 與容器進行交互;
  • Container Manager 管理容器的各種資源,比如 CGroups、QoS、cpuset、device 等;
  • Volume Manager 管理容器的存儲卷,比如格式化磁盤、掛載到 Node 本地、最后再將掛載路徑傳給容器;
  • Eviction 負責容器的驅逐,比如在資源不足時驅逐優先級低的容器,保證高優先級容器的運行;
  • cAdvisor 負責為容器提供 Metrics;
  • Metrics 和 stats 提供容器和節點的度量數據,比如 metrics-server 通過 /stats/summary 提取的度量數據是 HPA 自動擴展的依據;
  • Generic Runtime Manager 是容器運行時的管理者,負責與CRI 交互,完成容器和鏡像的管理;

CRI中定義了容器和鏡像的服務的接口,因為容器運行時與鏡像的生命周期是彼此隔離的,因此需要定義兩個服務。該接口使用Protocol Buffer,基于gRPC,在Kubernetes v1.10+版本中是在pkg/kubelet/apis/cri/runtime/v1alpha2的api.proto中定義的。

CRI架構

Kubernetes 中的容器運行時組成

按照不同的功能可以分為四個部分:

(1)kubelet 中容器運行時的管理,kubeGenericRuntimeManager,它管理與 CRI shim 通信的客戶端,完成容器和鏡像的管理(代碼位置:pkg/kubelet/kuberuntime/kuberuntime_manager.go);

(2)容器運行時接口 CRI,包括了容器運行時客戶端接口與容器運行時服務端接口;

(3)CRI shim 客戶端,kubelet 持有,用于與 CRI shim 服務端進行通信;

(4)CRI shim 服務端,即具體的容器運行時實現,包括 kubelet 內置的 dockershim (代碼位置:pkg/kubelet/dockershim)以及外部的容器運行時remote。如 cri-containerd(用于支持容器引擎containerd)、rktlet(用于支持容器引擎rkt)等。

更普遍的場景,就是你需要在每臺宿主機上單獨安裝一個負責響應 CRI 的組件。這個組件,一般被稱作 CRI shim。顧名思義,CRI shim 的工作,就是扮演 kubelet 與容器項目之間的“墊片”(shim)。所以它的作用非常單一,那就是實現 CRI 規定的每個接口,然后把具體的 CRI 請求“翻譯”成對后端容器項目的請求或者操作。如下所示

CRI gRPC Server的具體實現

Container Runtime實現了CRI gRPC Server,包括RuntimeService和ImageService。該gRPC Server需要監聽本地的Unix socket,而kubelet則作為gRPC Client運行。CRI 接口包括 RuntimeService 和 ImageService 兩個服務,這兩個服務可以在一個 gRPC server 中實現,也可以分開成兩個獨立服務。目前社區的很多運行時都是將其在一個 gRPC server 里面實現。這其中包含了兩個gRPC服務:

看一下源碼,Kubernetes 1.20中的CRI接口在api.proto中的定義如下:

  1. // Runtime service defines the public APIs for remote container runtimes 
  2. service RuntimeService { 
  3.     // Version returns the runtime name, runtime version, and runtime API version. 
  4.     rpc Version(VersionRequest) returns (VersionResponse) {} 
  5.  
  6.     // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure 
  7.     // the sandbox is in the ready state on success. 
  8.     rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} 
  9.     // StopPodSandbox stops any running process that is part of the sandbox and 
  10.     // reclaims network resources (e.g., IP addresses) allocated to the sandbox. 
  11.     // If there are any running containers in the sandbox, they must be forcibly 
  12.     // terminated. 
  13.     // This call is idempotent, and must not return an error if all relevant 
  14.     // resources have already been reclaimed. kubelet will call StopPodSandbox 
  15.     // at least once before calling RemovePodSandbox. It will also attempt to 
  16.     // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, 
  17.     // multiple StopPodSandbox calls are expected. 
  18.     rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} 
  19.     // RemovePodSandbox removes the sandbox. If there are any running containers 
  20.     // in the sandbox, they must be forcibly terminated and removed. 
  21.     // This call is idempotent, and must not return an error if the sandbox has 
  22.     // already been removed. 
  23.     rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} 
  24.     // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not 
  25.     // present, returns an error. 
  26.     rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} 
  27.     // ListPodSandbox returns a list of PodSandboxes. 
  28.     rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} 
  29.  
  30.     // CreateContainer creates a new container in specified PodSandbox 
  31.     rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} 
  32.     // StartContainer starts the container. 
  33.     rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} 
  34.     // StopContainer stops a running container with a grace period (i.e., timeout). 
  35.     // This call is idempotent, and must not return an error if the container has 
  36.     // already been stopped. 
  37.     // The runtime must forcibly kill the container after the grace period is 
  38.     // reached. 
  39.     rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} 
  40.     // RemoveContainer removes the container. If the container is running, the 
  41.     // container must be forcibly removed. 
  42.     // This call is idempotent, and must not return an error if the container has 
  43.     // already been removed. 
  44.     rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} 
  45.     // ListContainers lists all containers by filters. 
  46.     rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} 
  47.     // ContainerStatus returns status of the container. If the container is not 
  48.     // present, returns an error. 
  49.     rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} 
  50.     // UpdateContainerResources updates ContainerConfig of the container. 
  51.     rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} 
  52.     // ReopenContainerLog asks runtime to reopen the stdout/stderr log file 
  53.     // for the container. This is often called after the log file has been 
  54.     // rotated. If the container is not running, container runtime can choose 
  55.     // to either create a new log file and return nil, or return an error. 
  56.     // Once it returns error, new container log file MUST NOT be created. 
  57.     rpc ReopenContainerLog(ReopenContainerLogRequest) returns (ReopenContainerLogResponse) {} 
  58.  
  59.     // ExecSync runs a command in a container synchronously. 
  60.     rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} 
  61.     // Exec prepares a streaming endpoint to execute a command in the container. 
  62.     rpc Exec(ExecRequest) returns (ExecResponse) {} 
  63.     // Attach prepares a streaming endpoint to attach to a running container. 
  64.     rpc Attach(AttachRequest) returns (AttachResponse) {} 
  65.     // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. 
  66.     rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} 
  67.  
  68.     // ContainerStats returns stats of the container. If the container does not 
  69.     // exist, the call returns an error. 
  70.     rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} 
  71.     // ListContainerStats returns stats of all running containers. 
  72.     rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} 
  73.  
  74.     // PodSandboxStats returns stats of the pod. If the pod sandbox does not 
  75.     // exist, the call returns an error. 
  76.     rpc PodSandboxStats(PodSandboxStatsRequest) returns (PodSandboxStatsResponse) {} 
  77.     // ListPodSandboxStats returns stats of the pods matching a filter. 
  78.     rpc ListPodSandboxStats(ListPodSandboxStatsRequest) returns (ListPodSandboxStatsResponse) {} 
  79.  
  80.     // UpdateRuntimeConfig updates the runtime configuration based on the given request. 
  81.     rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} 
  82.  
  83.     // Status returns the status of the runtime. 
  84.     rpc Status(StatusRequest) returns (StatusResponse) {} 
  85.  
  86. // ImageService defines the public APIs for managing images. 
  87. service ImageService { 
  88.     // ListImages lists existing images. 
  89.     rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} 
  90.     // ImageStatus returns the status of the image. If the image is not 
  91.     // present, returns a response with ImageStatusResponse.Image set to 
  92.     // nil. 
  93.     rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} 
  94.     // PullImage pulls an image with authentication config. 
  95.     rpc PullImage(PullImageRequest) returns (PullImageResponse) {} 
  96.     // RemoveImage removes the image. 
  97.     // This call is idempotent, and must not return an error if the image has 
  98.     // already been removed. 
  99.     rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} 
  100.     // ImageFSInfo returns information of the filesystem that is used to store images. 
  101.     rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} 

RuntimeService

RuntimeService 則提供了更多的接口,按照功能可以劃分為四組:

  • PodSandbox 的管理接口:PodSandbox 是對 Kubernete Pod 的抽象,用來給容器提供一個隔離的環境(比如掛載到相同的 CGroup 下面),并提供網絡等共享的命名空間。PodSandbox 通常對應到一個 Pause 容器或者一臺虛擬機;
  • Container 的管理接口:在指定的 PodSandbox 中創建、啟動、停止和刪除容器;
  • Streaming API 接口:包括 Exec、Attach 和 PortForward 等三個和容器進行數據交互的接口,這三個接口返回的是運行時 Streaming Server 的 URL,而不是直接跟容器交互;

狀態接口:包括查詢 API 版本和查詢運行時狀態。

ImageService

管理鏡像的 ImageService 提供了 5 個接口:

  • 查詢鏡像列表;
  • 拉取鏡像到本地;
  • 查詢鏡像狀態;
  • 刪除本地鏡像;
  • 查詢鏡像占用空間等。

這些都很容易映射到 Docker API 或者CRI上面。

CRI相關初始化

跟容器最相關的一個 Manager 是 Generic Runtime Manager,就是一個通用的運行時管理器。我們可以看到目前 dockershim 還是存在于 Kubelet 的代碼中的,它是當前性能最穩定的一個容器運行時的實現。remote 指的就是 CRI 接口。CRI 接口主要包含兩個部分:

  • 一個是 CRI Server,即通用的比如說創建、刪除容器這樣的接口;
  • 另外一個是流式數據的接口 Streaming Server,比如 exec、port-forward 這些流式數據的接口。

CNI(容器網絡接口)也是在 CRI 進行操作的,因為我們在創建 Pod 的時候需要同時創建網絡資源然后注入到 Pod 中。接下來就是我們的容器和鏡像。我們通過具體的容器創建引擎來創建一個具體的容器。kubelet中CRI相關初始化邏輯如下:

(1)當kubelet選用dockershim作為容器運行時,則初始化并啟動容器運行時服務端dockershim(初始化dockershim過程中也會初始化網絡插件CNI)。

  • 如果是外部外部容器運行時的時候,需要在每臺宿主機上單獨安裝一個負責響應 CRI 的組件。這個組件就是CRI shim,需要包含網絡插件CNI。比如支持containerd的CRI-Containerd的shim。到了 containerd 1.1 版本后就去掉了 CRI-Containerd 這個 shim,直接把適配邏輯作為插件的方式集成到了 containerd 主進程中,所以我們現在可以直接使用--container-runtime-endpoint=unix:///run/containerd/containerd.sock這個套接字,就可以無縫切換的containerd。

(2)初始化容器運行時CRI shim客戶端(用于調用CRI shim服務端:內置的容器運行時dockershim或remote容器運行時);

(3)初始化Generic Runtime Manager,用于容器運行時的管理。初始化完成后,后續kubelet對容器以及鏡像的相關操作都會通過該結構體持有的CRI shim客戶端,與CRI shim服務端進行通信來完成。

下面來簡單分析幾個比較重要的CRI相關啟動參數:(1)--container-runtime:指定kubelet要使用的容器運行時,可選值docker、remote、rkt (deprecated),默認值為docker,即使用kubelet內置的容器運行時dockershim。當需要使用外部容器運行時,該參數配置為remote,并設置--container-runtime-endpoint參數值為監聽的 unix socket位置。(2)--runtime-cgroups:容器運行時使用的cgroups,可選值。(3)--docker-endpoint:docker暴露服務的socket地址,默認值為unix:///var/run/docker.sock,該參數配置當且僅當--container-runtime參數值為docker時有效。(4)--pod-infra-container-image:pod sandbox的鏡像地址,默認值為k8s.gcr.io/pause:3.5,該參數配置當且僅當--container-runtime參數值為docker時有效。(5)--image-pull-progress-deadline:容器鏡像拉取超時時間,默認值為1分鐘,該參數配置當且僅當--container-runtime參數值為docker時有效。(6)--experimental-dockershim:設置為true時,啟用dockershim模式,只啟動dockershim,默認值為false,該參數配置當且僅當--container-runtime參數值為docker時有效。(7)--experimental-dockershim-root-directory:dockershim根目錄,默認值為/var/lib/dockershim,該參數配置當且僅當--container-runtime參數值為docker時有效。(8)--container-runtime-endpoint:容器運行時的endpoint,linux中默認值為unix:///var/run/dockershim.sock,注意與上面的--docker-endpoint區分開來。

  • unix:///var/run/dockershim.sock
  • unix:///run/containerd/containerd.sock,即使用本地的containerd作為容器運行時。
  • 默認是unix:///var/run/dockershim.sock,即默認使用本地的docker作為容器運行時。

(簡單介紹一下socket通信之Unix domain socket:Unix domain socket 又叫 IPC(inter-process communication 進程間通信。用于實現同一主機上的進程間通信。socket 原本是為網絡通訊設計的,但后來在 socket 的框架上發展出一種 IPC 機制,就是 UNIX domain socket。雖然網絡 socket 也可用于同一臺主機的進程間通訊(通過 loopback 地址 127.0.0.1),但是 UNIX domain socket 用于 IPC 更有效率:不需要經過網絡協議棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層數據從一個進程拷貝到另一個進程。這是因為,IPC 機制本質上是可靠的通訊,而網絡協議是為不可靠的通訊設計的。)

(9)--image-service-endpoint:鏡像服務的endpoint,linux中默認值為unix:///var/run/dockershim.sock。

當前支持的CRI后端

我們最初在使用Kubernetes時通常會默認使用Docker作為容器運行時,其實從Kubernetes 1.5開始已經開始支持CRI,目前是處于Alpha版本,通過CRI接口可以指定使用其它容器運行時作為Pod的后端,docker、containerd、CRI-O、Frakti、pouch,它們銜接Kubelet與運行時方式對比如下:

棄用 docker 后到底會產生什么影響

正常的 K8s 用戶不會有任何影響

生產環境中高版本的集群只需要把運行時從 docker 切換到 containerd即可。containerd 是 docker 中的一個底層組件,主要負責維護容器的生命周期,跟隨 docker 經歷了長期考驗。同時 2019年初就從 CNCF 畢業,可以單獨作為容器運行時用在集群中。到了 containerd 1.1 版本后就去掉了 CRI-Containerd 這個 shim,直接把適配邏輯作為插件的方式集成到了 containerd 主進程中,所以我們現在可以直接使用--container-runtime-endpoint=unix:///run/containerd/containerd.sock這個套接字,就可以無縫切換的containerd。因此把 runtime 從 docker 轉換到 containerd 是一個基本無痛的過程。

  • 開發環境中通過docker build構建出來的鏡像依然可以在集群中使用鏡像一直是容器生態的一大優勢,雖然人們總是把鏡像稱之為“docker鏡像”,但鏡像早就成為了一種規范了。具體規范可以參考image-spec。在任何地方只要構建出符合 Image Spec 的鏡像,就可以拿到其他符合 Image Spec 的容器運行時上運行。如果你是一名開發/運維人員,你依舊可以繼續使用 Docker 來構建鏡像,以相同的方式將鏡像推送到 Registry,并且將這些鏡像部署到你的 Kubernetes 中;如果你是運行和操作集群的用戶,你只需要將 Docker 切換成你需要的containerd 容器運行時即可。
  • 在 Pod 中使用 DinD(Docker in Docker)的用戶會受到影響

有些使用者會把 docker 的 socket (/run/docker.sock)掛載到 Pod 中,并在 Pod 中調用 docker 的 api 構建鏡像或創建編譯容器等,官方在這里的建議是使用 Kaniko、Img 或 Buildah。

2.我們可以通過把 docker daemon 作為 DaemonSet 或者給想要使用 docker 的 Pod 添加一個 docker daemon 的 sidecar 的方式在任意運行時中使用 DinD 的方案。

3.同一集群中docker 節點與 containerd 節點共存,通過按節點標簽調度,保 證這類業務調度到 docker 節點沒有通過上述方案。

預告

后期會圍繞runc,shim等探索容器的底層實現與管理API的暴露。敬請期待!!!!

reference

 

https://feisky.xyz/posts/kubernetes-container-runtime/https://jimmysong.io/kubernetes-handbook/concepts/cri.htmlhttps://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershimhttps://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/https://www.qikqiak.com/post/containerd-usage/https://kubernetes.io/zh/blog/2020/12/02/dockershim-faq/https://github.com/containerdhttps://www.zhihu.com/question/324124344

 

責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2023-08-29 08:20:35

Kubernete跨云容器

2019-07-12 09:30:12

DashboardDockerDNS

2021-12-23 07:58:06

Kubelet容器運行

2023-04-03 13:01:14

UbuntuCRI-O

2024-03-20 10:46:00

云原生容器

2021-09-11 15:38:23

容器運行鏡像開放

2025-03-03 08:05:14

2023-01-03 09:10:21

2021-09-02 05:37:22

Containerd Kubernetes 容器

2020-08-11 08:59:20

容器虛擬化技術

2015-07-20 15:44:46

Swift框架MJExtension反射

2021-08-18 06:40:54

KubernetesDocker Containerd

2024-03-21 09:15:58

JS運行的JavaScrip

2020-12-07 08:14:17

KubernetesDocker容器

2021-11-05 08:07:57

kubeletKubernetesContainerd

2009-09-24 17:19:06

運行時多態性

2021-08-18 08:32:09

代碼運行時間示波器

2020-12-07 13:31:43

GoMutex開發者

2023-07-28 10:42:43

2013-11-26 16:49:55

Android開發運行時KitKat
點贊
收藏

51CTO技術棧公眾號

五月婷婷中文字幕| 网站免费在线观看| 婷婷av在线| 97超碰欧美中文字幕| 国产成人精品在线视频| 国产精品91一区| 久久久久国产精品熟女影院| 日韩精品黄色| av中文一区二区三区| 国产精品极品在线| 国产一级二级毛片| 欧美在线观看视频一区| 日韩精品一区二区三区视频播放| 国产女大学生av| 麻豆免费在线视频| 久久免费视频一区| av观看久久| 亚洲视频久久久| 国产精品啊啊啊| 中文字幕欧美日韩| 一级国产黄色片| 亚洲大奶少妇| 欧美日韩免费观看一区三区| 每日在线更新av| 中中文字幕av在线| 国产精品色婷婷久久58| 精品一区二区国产| www.xxxx国产| 久久精品72免费观看| 2020国产精品视频| 中文字幕一区二区三区手机版 | 91精品国产麻豆国产自产在线 | 日韩视频在线播放| 神宫寺奈绪一区二区三区| 精品亚洲免费视频| 国产精品久久久久久久一区探花| www.国产成人| 欧美午夜电影在线观看| 日韩在线视频一区| 国产又大又粗又爽的毛片| 女同另类激情重口| 亚洲国产精品免费| 永久看看免费大片| 国产成人视屏| 欧美一区二区三区在| 777视频在线| 日本精品不卡| 日韩欧美一区二区在线| 精品少妇一区二区三区在线| 超免费在线视频| 一区二区三区在线免费播放| 成人性做爰片免费视频| 91吃瓜网在线观看| 中文字幕在线观看一区| 一区二区三区视频在线播放| caoporn国产精品免费视频| 久久精品人人做人人爽人人| 欧美一区1区三区3区公司| 日本一区高清| 26uuu亚洲| 欧美一区二区福利| 在线免费黄色| 亚洲天堂免费看| 热这里只有精品| 中文字幕资源网在线观看| 一区二区三区色| 国产在线播放观看| 色在线中文字幕| 在线亚洲人成电影网站色www| 黑森林福利视频导航| 欧美暴力调教| 欧美精品三级在线观看| 欧美性猛交乱大交| 国产一区丝袜| 一二美女精品欧洲| 九九热视频在线免费观看| 欧美不卡在线| 91sa在线看| 久草热在线观看| 韩国视频一区二区| 国产精选一区二区| 国产中文字幕在线视频| 国产精品成人免费在线| 少妇久久久久久被弄到高潮| 黄频免费在线观看| 欧美私模裸体表演在线观看| 黄色a级三级三级三级| 99久久人爽人人添人人澡 | 国产手机视频一区二区| 国产精品美女网站| 成人av手机在线| 2023国产精品自拍| 久久久久亚洲av无码专区喷水| 国产乱妇乱子在线播视频播放网站| 欧美日韩国产中字| 奇米视频888| 日韩mv欧美mv国产网站| 日韩中文字幕亚洲| 日韩精品在线免费视频| 国内外成人在线视频| 久久久水蜜桃| h片在线免费| 在线一区二区三区四区| 国产日韩视频一区| 999国产精品999久久久久久| 午夜精品一区二区三区av| 中文字幕手机在线视频| 成人午夜电影网站| 一区二区高清视频| 中文字幕乱码在线播放| 欧美一区二区在线不卡| 日本精品在线观看视频| 日韩视频免费| 51国产成人精品午夜福中文下载 | 91久久久久国产一区二区| 成人97人人超碰人人99| 91免费视频黄| 日本精品在线中文字幕| 亚洲国产一区二区三区四区| 亚洲午夜精品久久久久久高潮| 海角社区69精品视频| 国产中文字幕91| 男女网站在线观看| 亚洲 欧美综合在线网络| 日本一本在线视频| 欧美va久久久噜噜噜久久| 国产成人精品在线视频| 日本视频在线观看一区二区三区| 一区二区三区四区在线播放| 亚洲小视频网站| 精品国产91久久久久久浪潮蜜月| 欧美一级视频免费在线观看| 亚洲精品国产片| 亚洲男人的天堂网| 日本免费色视频| 日韩精品二区| 国产免费观看久久黄| 国产在线视频网| 在线观看av一区二区| 丝袜美腿中文字幕| 亚洲影院一区| 久久国产精品亚洲va麻豆| h片在线观看视频免费| 精品国产一区a| 91蜜桃视频在线观看| 成人app下载| 91视频最新入口| 免费av一区二区三区四区| 欧美亚洲国产成人精品| 污视频在线免费| 天天影视色香欲综合网老头| 青青草视频播放| 免费亚洲婷婷| 色综合久久久久久久久五月| 国产精品亲子伦av一区二区三区| 最近更新的2019中文字幕| 中文字幕av影视| 中文字幕一区二区在线播放| 激情久久综合网| 欧美久久成人| 激情伦成人综合小说| 成人欧美magnet| 夜夜嗨av色一区二区不卡| 国产乡下妇女三片| 中文字幕日本乱码精品影院| 性生交大片免费看l| 亚洲国产第一| 欧洲亚洲一区二区三区四区五区| 精品176极品一区| 久久91亚洲精品中文字幕| 免费观看国产精品| 色综合天天综合网天天狠天天 | 国产精品美腿一区在线看| 午夜伦理在线| 欧美精品一区二区三区蜜臀| 亚洲不卡在线视频| 亚洲日本在线a| 国产日韩视频一区| 日本系列欧美系列| 国产香蕉一区二区三区| 超碰一区二区三区| 国产精品第二页| 91cn在线观看| 亚洲精品在线观看www| 中文字幕+乱码+中文乱码www | 国产成人一区二区三区别| 日本中文字幕在线一区| 国产精品无码专区在线观看| 手机在线免费av| 亚洲欧美日韩精品久久| 国产手机av在线| 欧美性极品xxxx做受| av黄色免费在线观看| 成人av资源站| 亚洲天堂国产视频| 夜夜嗨av一区二区三区网站四季av| 视频一区视频二区视频三区视频四区国产| 91丨精品丨国产| 欧洲亚洲妇女av| 综合图区亚洲| 最好看的2019的中文字幕视频| 亚洲精华国产精华精华液网站| 欧美性猛交一区二区三区精品| 国产一级二级三级| 国产精品乱码人人做人人爱| 捆绑凌虐一区二区三区| 激情深爱一区二区| 欧美精品aaaa| 亚洲在线视频| 欧美中日韩在线| 91综合久久| 日本在线播放不卡| 少妇一区二区三区| 国产精品免费在线| 成人短视频软件网站大全app| 日本欧美中文字幕| av中文字幕在线观看第一页| 免费av一区二区| 午夜在线视频| 亚洲色无码播放| 天天干天天插天天操| 日韩欧美你懂的| 97在线公开视频| 欧美亚洲日本一区| 天天干天天色综合| 欧美日韩亚洲一区二区三区| 国产精品6666| 亚洲国产成人va在线观看天堂| 看黄色录像一级片| 国产精品沙发午睡系列990531| 素人fc2av清纯18岁| 95精品视频在线| 伊人网综合视频| 成人免费视频视频在线观看免费| 亚洲熟女乱综合一区二区| 国产在线看一区| 中文字幕在线视频精品| 久久草av在线| 蜜臀一区二区三区精品免费视频| 青青草国产精品亚洲专区无| 激情婷婷综合网| 爽好多水快深点欧美视频| 大j8黑人w巨大888a片| 亚洲乱码视频| 精品视频在线观看一区| 日韩网站在线| 黄色一级片播放| 国产精品久久久久久模特| 久久精品视频16| 一本综合久久| 激情五月开心婷婷| 日韩高清在线观看| 日韩av手机版| 九一九一国产精品| 韩国三级丰满少妇高潮| 成人在线综合网站| 内射中出日韩无国产剧情| xnxx国产精品| 欧美人与性囗牲恔配| 亚洲国产精品t66y| 东方av正在进入| 亚洲激情一二三区| 中文字幕在线字幕中文| 欧美小视频在线| 亚洲天堂视频在线播放| 欧美日韩国产成人在线91| 国产高清免费观看| 亚洲国产天堂久久综合网| 欧美精品a∨在线观看不卡| 最近2019年中文视频免费在线观看| 欧美激情午夜| 欧美高清第一页| 综合毛片免费视频| 国产美女扒开尿口久久久| 亚洲一区二区三区在线免费| 精品久久久久久一区| 欧美日韩一二三四| 日本大片免费看| 久久黄色影院| 日日夜夜精品视频免费观看| 99久久精品国产观看| 美国黄色特级片| 亚洲图片欧美视频| 国产精品午夜一区二区| 日韩区在线观看| 国产中文字幕在线播放| 欧美成人网在线| 欧美三级网址| av在线不卡一区| 国产最新精品| 久久人人爽人人爽人人av| 日韩激情av在线| 亚洲少妇一区二区三区| 中文字幕不卡三区| 国产精彩视频在线观看| 欧美日韩一本到| 日韩三级电影网| 欧美麻豆久久久久久中文| 色尼玛亚洲综合影院| 粉嫩av免费一区二区三区| 精品国产一级毛片| 国产69精品久久久久久久| 久久99久久久久| a毛片毛片av永久免费| 悠悠色在线精品| 亚洲无码精品在线播放| 亚洲国内精品视频| av软件在线观看| 国产精品久久久久久五月尺| 欧美精品中文字幕亚洲专区| 91嫩草国产丨精品入口麻豆| 日韩av一区二区三区| 亚洲天堂资源在线| 亚洲乱码日产精品bd| 亚洲影视一区二区| 亚洲嫩模很污视频| 91福利在线免费| yy111111少妇影院日韩夜片| 久久中文亚洲字幕| 国产免费视频传媒| 久久亚洲精品国产精品紫薇| 久久久无码精品亚洲国产| 欧美精品乱码久久久久久| av资源种子在线观看| 全球成人中文在线| 欧美一级一片| 欧美亚洲精品一区二区| 成人一区二区三区视频在线观看| 日韩高清dvd碟片| 在线不卡免费av| 欧美精品hd| 91久久久久久久久久久久久| 欧美xxav| 樱花草www在线| 亚洲欧洲精品一区二区精品久久久| 国产成人av免费| 亚洲图片欧美日产| 亚洲a∨精品一区二区三区导航| 欧美三级电影在线播放| 久久一区精品| 亚洲精品国产91| 欧美日韩亚洲综合一区二区三区| 成年人视频免费在线观看| 国产精品视频1区| 日韩在线观看一区| 天天干天天av| 亚洲美女精品一区| 囯产精品一品二区三区| 欧美极品美女电影一区| 大奶一区二区三区| 久久久亚洲国产精品| av不卡一区二区三区| 丁香六月婷婷综合| 亚洲人成网站999久久久综合| 欧美va在线观看| 亚洲国产精品一区在线观看不卡 | 成人a视频在线观看| 午夜国产一区二区| 成人一区二区三区仙踪林| 亚洲国产日韩精品| 日本1级在线| 国产精品亚洲片夜色在线| 亚洲乱码在线| 香蕉视频污视频| 欧美性猛交视频| 永久免费av在线| av激情久久| 美女国产精品| 欧美一级特黄高清视频| 日韩欧美高清在线| 亚洲一区资源| 亚洲一区二区不卡视频| 国产成人小视频| 九九九在线观看| 久久精品国产亚洲精品| 成人涩涩网站| 日本女优爱爱视频| 亚洲精品高清在线| 欧美男男激情freegay| 国产在线久久久| 亚洲专区免费| 少妇高潮在线观看| 日韩电影中文字幕在线| 麻豆久久久久| 草b视频在线观看| 亚洲国产高清不卡| 亚洲国产精品二区| 国产精品福利无圣光在线一区| 欧美日韩国产色综合一二三四| 国内精品久久99人妻无码| 911国产精品| 国产精欧美一区二区三区蓝颜男同| 中文字幕中文字幕在线中心一区| 成人免费av在线| 91精品国自产| 国产精品成人v| 亚洲国产日韩在线| 欧美爱爱免费视频| 国产亚洲精品久久久久久牛牛| 91精品久久久久久综合五月天|