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

Tekton 如何接入物理機(jī)進(jìn)行構(gòu)建

云計(jì)算 虛擬化
本文希望討論的問(wèn)題是在 Kubernetes 下,如何接入物理機(jī)進(jìn)行 CI 的構(gòu)建。本文以 Tekton 為例,其他引擎在處理邏輯上類(lèi)似。

 [[396376]]

本文轉(zhuǎn)載自微信公眾號(hào)「問(wèn)其」,作者陳少文 。轉(zhuǎn)載本文請(qǐng)聯(lián)系問(wèn)其公眾號(hào)。

1. 為什么需要物理構(gòu)建機(jī)

在文章《如何接入遠(yuǎn)程 macOS 物理機(jī)進(jìn)行 Jenkins 流水線構(gòu)建》中,我描述了在 Jenkins 中添加物理構(gòu)建機(jī)的方法。這并不是我拍腦袋想的需求,而是當(dāng)時(shí)真的有 ToB 的商業(yè)客戶在咨詢方案。

對(duì)于多端開(kāi)發(fā)商來(lái)說(shuō),構(gòu)建 Android、IOS、macOS、Arm 、Windows、X86 應(yīng)用是常見(jiàn)的需求。

好的方面是 GitHub Actions 提供了 macOS 構(gòu)建環(huán)境、AWS 提供了 macOS 虛擬機(jī),而華為提供了 ARM 主機(jī)。在云原生背景下,更多使用的是 Kubernetes 運(yùn)行時(shí),在 Kubernetes 不支持的處理器架構(gòu)和操作系統(tǒng)面前,持續(xù)集成 (CI) 顯得很無(wú)力。持續(xù)集成需要支持物理構(gòu)建機(jī)。

本文希望討論的問(wèn)題是在 Kubernetes 下,如何接入物理機(jī)進(jìn)行 CI 的構(gòu)建。本文以 Tekton 為例,其他引擎在處理邏輯上類(lèi)似。

2. Tekton 如何與物理機(jī)交互

Kuberntes 對(duì)物理機(jī)或者虛擬機(jī)的管理,實(shí)際上是一個(gè)典型的 Operator 場(chǎng)景。我們可以定義一個(gè) CRD 用來(lái)描述相關(guān)字段,通過(guò)寫(xiě) Controller 處理 Pod 與構(gòu)建機(jī)之間的邏輯。

也可以寫(xiě) Tekton 的 Task 封裝,本文將使用這種方式。由此也給我?guī)?lái)另一個(gè)疑問(wèn),Tekton 能否代替部分 Operator 的場(chǎng)景,在后續(xù)的文章中我會(huì)給出思考。

這里僅做原型驗(yàn)證,不會(huì)太關(guān)注產(chǎn)品化的細(xì)節(jié)。

在 Tekton 中,每個(gè)流水線由很多個(gè) Task 構(gòu)成,Task 可以并行。一個(gè) Task 包含很多個(gè)串行的 step 步驟,對(duì)應(yīng)著一個(gè) Pod 包含很多個(gè)容器。

這里的關(guān)鍵是要將 Pod 與構(gòu)建機(jī)關(guān)聯(lián)起來(lái)。我選擇的是使用 rsync 同步 Pod 與構(gòu)建機(jī)之間的文件,在 Pod 中使用 sshpass 執(zhí)行物理機(jī)的構(gòu)建命令。

主要分為如下步驟 (以下命令都是在容器中執(zhí)行):

  1. 克隆代碼
  2. 執(zhí)行 rsync 將代碼同步到構(gòu)建機(jī)
  3. 執(zhí)行 sshpass 在構(gòu)建機(jī)上執(zhí)行構(gòu)建命令
  4. 執(zhí)行 rsync 將構(gòu)建機(jī)中的構(gòu)建產(chǎn)物同步到容器
  5. 歸檔構(gòu)建產(chǎn)物(示例中, 這一步會(huì)被省略,僅驗(yàn)證能拿到構(gòu)建產(chǎn)物)

可以看到整個(gè)過(guò)程其實(shí)和 Tekton 沒(méi)有直接關(guān)系,對(duì)于任意容器與構(gòu)建機(jī)直連的環(huán)境都是可行的。下面以 Tekton 為例進(jìn)行演示。

3. 資源準(zhǔn)備清單

  • 一個(gè) Kubernetes 集群。用來(lái)運(yùn)行 Tekton,最新的 Tekton 0.23 要求 Kubernetes 不低于 1.17
  • 一臺(tái)物理機(jī)或虛擬機(jī)。用于構(gòu)建應(yīng)用

3.1 查看 Kubernetes 版本

  1. kubectl version 
  2.  
  3. Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"darwin/amd64"
  4. Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-21T01:11:42Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"

3.2 物理機(jī)準(zhǔn)備

  • 操作系統(tǒng)是 CentOS 7.6
  1. uname -a 
  2.  
  3. Linux test 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 
  • 預(yù)裝 Golang 的編譯環(huán)境

原計(jì)劃是選擇一個(gè) macOS 的構(gòu)建示例,但是無(wú)法提供直通的網(wǎng)絡(luò)環(huán)境,因此換成 Golang 的構(gòu)建示例。

  1. go version 
  2.  
  3. go version go1.13 linux/amd64 

4. 準(zhǔn)備 Tekton 以及 Pipeline 資源

4.1 部署 Tekton Pipeline

  • 創(chuàng)建負(fù)載

Tekton 默認(rèn)使用的是 gcr.io 鏡像,如果是國(guó)內(nèi)環(huán)境可以替換為 gcr.azk8s.cn 鏡像。

  1. kubectl apply -f https://github.com/tektoncd/pipeline/releases/download/v0.23.0/release.notags.yaml 
  • 查看資源

4.2 資源規(guī)劃

  1. kubectl -n tekton-pipelines get all 
  2.  
  3. NAME                                               READY   STATUS    RESTARTS   AGE 
  4. pod/tekton-pipelines-controller-86c487c965-p6s5t   1/1     Running   0          51s 
  5. pod/tekton-pipelines-webhook-7b775d9cd8-fzdrq      1/1     Running   0          51s 
  6.  
  7. NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                              AGE 
  8. service/tekton-pipelines-controller   ClusterIP   10.233.61.46    <none>        9090/TCP,8080/TCP                    51s 
  9. service/tekton-pipelines-webhook      ClusterIP   10.233.46.233   <none>        9090/TCP,8008/TCP,443/TCP,8080/TCP   51s 
  10.  
  11. NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE 
  12. deployment.apps/tekton-pipelines-controller   1/1     1            1           51s 
  13. deployment.apps/tekton-pipelines-webhook      1/1     1            1           51s 
  14.  
  15. NAME                                                     DESIRED   CURRENT   READY   AGE 
  16. replicaset.apps/tekton-pipelines-controller-86c487c965   1         1         1       51s 
  17. replicaset.apps/tekton-pipelines-webhook-7b775d9cd8      1         1         1       51s 
  18.  
  19. NAME                                                           REFERENCE                             TARGETS          MINPODS   MAXPODS   REPLICAS   AGE 
  20. horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook   Deployment/tekton-pipelines-webhook   <unknown>/100%   1         5         1          51s 

需要的流水線資源清單:

  • 一個(gè) task, 用于克隆代碼
  • 一個(gè) pv, 用于共享 task 之間的文件
  • 一個(gè)自定義的 task, 用于將代碼同步到構(gòu)建機(jī),構(gòu)建完成之后,再同步回來(lái)
  • 一個(gè) pipeline, 用于描述流水線,編排 task
  • 一個(gè) pipelinerun, 用于實(shí)例化 pipeline, 提供構(gòu)建時(shí)必要的參數(shù)

4.2 編寫(xiě)同步文件、執(zhí)行腳本的 Task

如上圖,這里的 Task 就是用于打通 container 和 vm 直接的文件和進(jìn)程,實(shí)現(xiàn)類(lèi)似交叉編譯的效果。

  1. --- 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: Task 
  4. metadata: 
  5.   name: remote-shell 
  6.   labels: 
  7.     app.kubernetes.io/version: "0.1" 
  8.   annotations: 
  9.     tekton.dev/pipelines.minVersion: "0.12.1" 
  10.     tekton.dev/tags: git 
  11.     tekton.dev/displayName: "remote shell" 
  12. spec: 
  13.   description: >- 
  14.     This task can be used to run shell in remote machine 
  15.   workspaces: 
  16.   - name: source 
  17.   params: 
  18.   - name: remote-ip 
  19.     type: string 
  20.   - name: remote-port 
  21.     type: string 
  22.   - name: remote-username 
  23.     type: string 
  24.   - name: remote-password 
  25.     type: string 
  26.   - name: remote-workspace 
  27.     type: string 
  28.   - name: remote-script 
  29.     type: string 
  30.   steps: 
  31.   - name: remote-shell 
  32.     image: shaowenchen/rsync-sshpass:v1 
  33.     workingDir: $(workspaces.source.path) 
  34.     script: | 
  35.       sshpass  -p "$(params.remote-password)" ssh -o StrictHostKeyChecking=no "$(params.remote-username)"@"$(params.remote-ip)" -p "$(params.remote-port)" "mkdir -p $(params.remote-workspace)" 
  36.  
  37.       rsync -ratlz --progress --rsh="sshpass -p $(params.remote-password) ssh -o StrictHostKeyChecking=no -l $(params.remote-username)" ./ "$(params.remote-ip)":"$(params.remote-workspace)" 
  38.  
  39.       sshpass  -p "$(params.remote-password)" ssh -o StrictHostKeyChecking=no "$(params.remote-username)"@"$(params.remote-ip)" -p "$(params.remote-port)" "$(params.remote-script)" 
  40.  
  41.       rsync -ratlz --progress --rsh="sshpass -p $(params.remote-password) ssh -o StrictHostKeyChecking=no -l $(params.remote-username)" "$(params.remote-ip)":"$(params.remote-workspace)"/ . 

在寫(xiě)法上,可以參考 Tekton 提供的示例。主要分為幾步:

  • 定義參數(shù)
  • 編寫(xiě) step 流程
  • 寫(xiě) script

這就是一個(gè)串腳本的過(guò)程,只不過(guò)借助容器鏡像,省去了安裝各種工具的步驟。

4.3 準(zhǔn)備 Tekton 的 pipeline 描述

  • 克隆代碼 Task

Tekton 已經(jīng)正式上線 Hub 服務(wù),用于共享 Task,這里直接使用 https://hub.tekton.dev/tekton/task/git-clone

  1. kubectl apply -f https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.3/git-clone.yaml 
  • 構(gòu)建一個(gè)工具箱鏡像 shaowenchen/rsync-sshpass:v1

Dockerfile 為:

  1. ARG alpine_ver=3.13 
  2. FROM alpine:${alpine_ver}.5 
  3.  
  4. RUN apk update \ 
  5.  && apk upgrade \ 
  6.  && apk add --no-cache \ 
  7.             rsync \ 
  8.             openssh-client \ 
  9.             openssh \ 
  10.             sshpass \ 
  11.             ca-certificates \ 
  12.  && update-ca-certificates \ 
  13.  && rm -rf /var/cache/apk/* 
  • pipeline
  1. apiVersion: tekton.dev/v1beta1 
  2. kind: Pipeline 
  3. metadata: 
  4.   name: remote-build-pipeline 
  5. spec: 
  6.   params: 
  7.   - name: repo-url 
  8.     type: string 
  9.   - name: branch-name 
  10.     type: string 
  11.   - name: remote-ip 
  12.     type: string 
  13.   - name: remote-port 
  14.     type: string 
  15.   - name: remote-username 
  16.     type: string 
  17.   - name: remote-password 
  18.     type: string 
  19.   - name: remote-workspace 
  20.     type: string 
  21.   - name: remote-script 
  22.     type: string 
  23.   workspaces: 
  24.   - name: shared-data 
  25.   tasks: 
  26.   - namefetch-repo 
  27.     taskRef: 
  28.       name: git-clone 
  29.     workspaces: 
  30.     - nameoutput 
  31.       workspace: shared-data 
  32.     params: 
  33.     - name: url 
  34.       value: $(params.repo-url) 
  35.     - name: revision 
  36.       value: $(params.branch-name
  37.   - name: remote-build 
  38.     taskRef: 
  39.       name: remote-shell 
  40.     runAfter: ["fetch-repo"
  41.     workspaces: 
  42.     - name: source 
  43.       workspace: shared-data 
  44.     params: 
  45.     - name: remote-ip 
  46.       value: $(params.remote-ip) 
  47.     - name: remote-port 
  48.       value: $(params.remote-port) 
  49.     - name: remote-username 
  50.       value: $(params.remote-username) 
  51.     - name: remote-password 
  52.       value: $(params.remote-password
  53.     - name: remote-workspace 
  54.       value: $(params.remote-workspace) 
  55.     - name: remote-script 
  56.       value: $(params.remote-script) 

pipeline 包含兩個(gè) task,一個(gè) task 克隆代碼,一個(gè) task 執(zhí)行遠(yuǎn)程構(gòu)建。

  • pipelinerun
  1. --- 
  2. apiVersion: tekton.dev/v1beta1 
  3. kind: PipelineRun 
  4. metadata: 
  5.   name: remote-build-pipelinerun-1 
  6. spec: 
  7.   pipelineRef: 
  8.     name: remote-build-pipeline 
  9.   workspaces: 
  10.   - name: shared-data 
  11.     volumeClaimTemplate: 
  12.       spec: 
  13.         accessModes: 
  14.         - ReadWriteOnce 
  15.         resources: 
  16.           requests: 
  17.             storage: 10Gi 
  18.   params: 
  19.   - name: repo-url 
  20.     value: https://github.com/shaowenchen/terraform-provider-qingcloud.git 
  21.   - name: branch-name 
  22.     value: master 
  23.   - name: subdirectory 
  24.     value: terraform-provider-qingcloud-001 
  25.   - name: remote-ip 
  26.     value: 0.0.0.0 
  27.   - name: remote-port 
  28.     value: "22" 
  29.   - name: remote-username 
  30.     value: root 
  31.   - name: remote-password 
  32.     value: YourPassword 
  33.   - name: remote-workspace 
  34.     value: ~/workspaces/terraform-provider-qingcloud-001 
  35.   - name: remote-script 
  36.     value: | 
  37.         cd ~/workspaces/terraform-provider-qingcloud-001 
  38.         make 

這里將克隆代碼到 pv 的 terraform-provider-qingcloud-001 目錄,同步到構(gòu)建機(jī)的 ~/workspaces/terraform-provider-qingcloud-001 目錄。也就是說(shuō),這兩個(gè)目錄最終的文件會(huì)保持一致,而構(gòu)建的二進(jìn)制是在構(gòu)建機(jī)上生成的。

  • 查看 Tekton 資源定義

以上資源全部 apply 之后,就可以查看相關(guān)的資源和流水線狀態(tài)了。

  1. kubectl get task 
  2.  
  3. NAME           AGE 
  4. git-clone      18m 
  5. remote-shell   5m47s 
  1. kubectl get pipelinerun 
  2.  
  3. NAME                         SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME 
  4. remote-build-pipelinerun-1   True        Succeeded   6m15s       5m42s 

執(zhí)行成功,接著繼續(xù)驗(yàn)證功能是否符合預(yù)期。

5. 功能驗(yàn)證

  • 查看相關(guān)負(fù)載
  1. kubectl get pod 
  2.  
  3. NAME                                                      READY   STATUS      RESTARTS   AGE 
  4. remote-build-pipelinerun-1-fetch-repo-56ws8-pod-mgx77     0/1     Completed   0          8m49s 
  5. remote-build-pipelinerun-1-remote-build-wxtms-pod-bcn6r   0/1     Completed   0          8m35s 
  • 在物理構(gòu)建機(jī)上,查看構(gòu)建目錄
  1. pwd 
  2.  
  3. /root/workspaces/terraform-provider-qingcloud-001 
  4.  
  5. ls 
  6.  
  7. CHANGELOG.md  glide.yaml  go.sum   main.go   qingcloud  scripts    terraform-provider-qingcloud  website 
  8. dev.md        go.mod      LICENSE  Makefile  README.md  terraform  vendor 
  • 查看 Kubernetes PV 的構(gòu)建目錄
  1. kubectl get pv 
  2.  
  3. NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                              STORAGECLASS        
  4. pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8   10Gi       RWO            Delete           Bound    default/pvc-e7ceb0582a                                             openebs-hostpath            2m12s 
  • 查找 PV 存儲(chǔ)路徑
  1. kubectl describe pv pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 |grep Path 
  2.  
  3.     Path:  /var/openebs/local/pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 
  • 查看 PV 目錄文件結(jié)構(gòu)
  1. ls /var/openebs/local/pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 
  2.  
  3. CHANGELOG.md  glide.yaml  go.sum   main.go   qingcloud  scripts    terraform-provider-qingcloud  website 
  4. dev.md        go.mod      LICENSE  Makefile  README.md  terraform  vendor 

在兩個(gè)目錄中,都存在構(gòu)建產(chǎn)物 terraform-provider-qingcloud,符合預(yù)期,也說(shuō)明我們達(dá)成了目標(biāo)。

6. 總結(jié)

傳統(tǒng)的 CICD 引擎通常是一個(gè) C/S 架構(gòu)。它需要一個(gè) S 端,用于解析流程,對(duì)流水線進(jìn)行調(diào)度; 需要很多個(gè) C 端,用于執(zhí)行高負(fù)載的構(gòu)建任務(wù)。這種方式的擴(kuò)展性并不是線性的,在云原生下、業(yè)務(wù)量大時(shí)很容易遇到瓶頸。因此,我們需要更加云原生的構(gòu)建引擎。在新的引擎下我們需要解決一些老的問(wèn)題,支持物理機(jī)構(gòu)建就是其中之一。

本文主要以 Tekton 為例,提供了一種利用 rsync 和 sshpass 接入物理機(jī)進(jìn)行構(gòu)建的思路。其中的關(guān)鍵點(diǎn)如下:

  • 使用 rsync\sshpass 的目的主要是將容器與物理機(jī)綁定,文件雙向同步,進(jìn)程空間互通。
  • 不限于 Tekton, 任意的引擎都可以使用這種方式。
  • 這里僅是作為方案驗(yàn)證,如果落地到產(chǎn)品,還需要考慮緩存、秘鑰安全、數(shù)據(jù)安全、租戶隔離等問(wèn)題。

 

責(zé)任編輯:武曉燕 來(lái)源: 問(wèn)其
相關(guān)推薦

2021-06-25 09:54:49

GitLab Tekton Devops

2022-04-08 09:53:56

TektonJenkinsKubesphere

2009-10-13 15:00:36

物理機(jī)虛擬機(jī)網(wǎng)絡(luò)安全

2022-04-14 07:51:39

TektonTaskRun

2022-04-25 08:07:45

TektonArgocdCI和CD

2010-02-24 14:41:16

WCF物理地址

2022-03-21 09:40:48

TektonJenkinsPipeline

2014-12-18 09:41:44

虛擬化遷移

2009-12-29 16:39:17

多業(yè)務(wù)接入網(wǎng)

2009-10-26 15:20:23

寬帶接入網(wǎng)

2010-08-27 09:52:43

寬帶無(wú)線接入系統(tǒng)

2022-08-11 16:29:32

Tekton流水線遷移工作流

2009-12-28 10:23:42

FTTx接入網(wǎng)

2009-12-25 09:13:42

ADSL接入網(wǎng)

2009-12-30 10:56:32

2010-10-13 10:21:37

物理機(jī)虛擬機(jī)遷移

2013-10-10 09:53:25

VMwareVMware Mira

2011-09-01 19:20:02

Ubuntu

2021-01-26 09:30:32

加密虛擬機(jī)攻擊

2022-07-27 07:39:45

Kubernetes云原生
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美一级特黄aaaaaa| 青青草激情视频| 欧美色片在线观看| 国产精品蜜臀av| 99久久久精品免费观看国产| 久久久精品91| 国产精品一区二区av交换| 欧美精品欧美精品系列| 日韩国产一级片| 香港伦理在线| 99riav久久精品riav| 国产精品美女主播| 午夜偷拍福利视频| 色琪琪久久se色| 亚洲成人精品视频在线观看| 网站一区二区三区| 免费一二一二在线视频| 日韩理论片在线| 欧美一区二区在线视频观看| 精品国产一级片| 日韩和欧美的一区| 66m—66摸成人免费视频| fc2ppv在线播放| 亚洲自拍电影| 精品国产一区二区三区久久影院 | 黄上黄在线观看| 国产精品99久| 国产美女91呻吟求| 国产九色在线播放九色| 欧美韩国一区| www.日韩av.com| 亚洲精品成人无码熟妇在线| silk一区二区三区精品视频| 91精品国产综合久久精品图片| 国产精品无码专区av在线播放 | 亚洲黄网站在线观看| 日韩在线观看电影完整版高清免费| 欧美综合视频在线| 国产v日产∨综合v精品视频| 成人国产精品久久久久久亚洲| av毛片在线免费观看| 国产手机视频一区二区| 国语自产在线不卡| 久久国产波多野结衣| 国产一区二区三区四区五区| 亚洲女人天堂成人av在线| 理论片大全免费理伦片| 高清欧美性猛交xxxx黑人猛| 91精品国产aⅴ一区二区| 亚洲天堂国产视频| 日韩国产一二三区| 欧美日韩国产高清一区| 国产精品人人爽人人爽| 一呦二呦三呦精品国产| 日本韩国视频一区二区| 中文字幕乱码人妻综合二区三区| 热色播在线视频| 午夜精品一区二区三区免费视频| 老子影院午夜伦不卡大全| 啪啪免费视频一区| 亚洲一区二区三区自拍| 天天做天天躁天天躁| 任你弄在线视频免费观看| 亚洲美女视频在线观看| 青青草综合视频| 人人超在线公开视频| 亚洲综合丝袜美腿| 国产玉足脚交久久欧美| 96av在线| 色老汉一区二区三区| 尤蜜粉嫩av国产一区二区三区| 日本韩国欧美| 欧美丝袜自拍制服另类| 天天色综合天天色| 精品国产伦一区二区三区观看说明 | 成人精品小蝌蚪| 久草一区二区| 国产视频二区在线观看| 国产精品毛片大码女人| 99re8这里只有精品| 91av久久| 欧美调教femdomvk| 爱豆国产剧免费观看大全剧苏畅| 国语精品视频| 精品无码久久久久久国产| 日韩一级av毛片| 久久亚洲专区| 欧美大片免费观看| 亚洲男人的天堂在线视频| 蜜桃视频第一区免费观看| 亚洲最大成人在线| 日本a一级在线免费播放| 国产精品福利一区| 久久国产精品网| 成人在线视频观看| 精品日韩欧美一区二区| 国产高潮呻吟久久| 午夜精品久久| 国产成人精彩在线视频九色| 国产精品久久久久久久久久久久久久久久久久 | 亚洲日本中文字幕在线| 国产精品你懂的| 777777av| 欧美日本三级| 中文精品99久久国产香蕉| 欧美成人黄色网| 日韩国产精品久久久久久亚洲| 69堂成人精品视频免费| 九色在线观看视频| 亚洲激情一二三区| 向日葵污视频在线观看| 日韩极品少妇| 欧美日韩不卡合集视频| 国产无遮挡又黄又爽又色视频| 国产伦精品一区二区三区视频青涩 | 亚洲欧洲日韩在线| 激情综合在线观看| 亚洲一二三区视频| 日韩在线视频免费观看| 亚洲成人第一网站| 99久久久精品| 久久久无码中文字幕久...| 欧美不卡高清一区二区三区| 亚洲国产日韩精品在线| 欧美丰满艳妇bbwbbw| 日本色综合中文字幕| 鲁丝片一区二区三区| 日本片在线看| 91精品国产综合久久久久| 日韩中文字幕有码| 亚洲伊人网站| 久久精品午夜一区二区福利| 国产探花在线观看| 91精品国产福利| 男人晚上看的视频| 久久草av在线| 亚洲精品高清国产一线久久| 欧美极品影院| 亚洲免费小视频| xxxx.国产| 99久久精品国产精品久久| 免费看毛片的网址| 超碰成人在线观看| 久久久久久久久久久久av| 午夜精品在线播放| 亚洲激情第一区| av地址在线观看| 国产综合网站| 国产九色91| 成年人在线网站| 日韩精品在线播放| 特级做a爱片免费69| 99精品桃花视频在线观看| 日韩a∨精品日韩在线观看| 久久资源综合| 全球成人中文在线| 国产高清免费av在线| 欧美性感一区二区三区| 亚洲图片第一页| 激情伊人五月天久久综合| 天天做天天爱天天高潮| 日本在线成人| 97精品久久久中文字幕免费| 日韩精品系列| 91国产免费观看| 制服丨自拍丨欧美丨动漫丨| 久久99久国产精品黄毛片色诱| 少妇熟女一区二区| 香蕉成人app| 8x拔播拔播x8国产精品| 国产三级在线| 91精品国产综合久久久久久漫画| 校园春色 亚洲| 成人av在线影院| 日av中文字幕| 国产精品久久久久久久久久10秀| av一区和二区| 末成年女av片一区二区下载| 中文字幕av一区二区| 国产视频在线观看视频| 五月开心婷婷久久| 久久婷婷五月综合| 国产成人综合网站| 国产免费人做人爱午夜视频| 91日韩欧美| 成人在线观看网址| 欧美日韩五码| 欧美丰满片xxx777| 牛牛热在线视频| 日韩欧美亚洲一区二区| 亚洲天堂av片| 亚洲日韩欧美一区二区在线| 变态另类丨国产精品| 久久福利资源站| 欧美啪啪免费视频| 天天揉久久久久亚洲精品| 国产午夜精品一区| 亚洲tv在线| 欧美尤物巨大精品爽| 国产福利在线播放麻豆| 国产视频精品一区二区三区| 国产精品一级视频| 色国产精品一区在线观看| 女同久久另类69精品国产| av一区二区三区| 亚洲色图欧美自拍| 日韩电影在线免费观看| 色欲色香天天天综合网www| 99久久国产综合精品成人影院| 国产在线一区二区三区播放| 粉嫩一区二区三区在线观看| 国产999视频| 日本电影在线观看| 久久精品成人一区二区三区| 牛牛影视精品影视| 亚洲第一男人av| 国产熟女一区二区三区五月婷 | 999精品网站| 亚洲天堂偷拍| 中国 免费 av| 久久视频国产| 少妇特黄a一区二区三区| 欧美大片网址| 国产精品 日韩| 玖玖玖视频精品| 国产综合久久久久久| 你懂得影院夜精品a| 国内精品久久久| 欧洲一区二区三区| 欧美精品在线播放| 免费在线观看av片| 中文字幕久久亚洲| 国产精品一区二区婷婷| 精品无人国产偷自产在线| 亚洲精品综合网| 日韩欧美国产一区二区三区| 国产精品无码久久av| 7777精品伊人久久久大香线蕉| 激情视频网站在线观看| 欧美视频中文在线看| 中文字幕亚洲精品一区| 五月天视频一区| 日韩精品手机在线| 欧美视频二区36p| 800av免费在线观看| 欧美性xxxxxx| 国产熟妇一区二区三区四区| 精品美女永久免费视频| 中文字幕日韩一级| 精品动漫一区二区三区| 中文字幕第四页| 91久久久免费一区二区| 国产精品第6页| 欧美日韩国产123区| 91丨九色丨丰满| 日韩亚洲欧美高清| 亚洲精品一区二区三区四区| 亚洲精品97久久| 青春草在线观看| 中文字幕亚洲欧美日韩2019| 成人av毛片| 波霸ol色综合久久| 成人午夜影视| 久久久成人的性感天堂| 电影k8一区二区三区久久| 97精品一区二区三区| 亚洲成人看片| 91精品久久久久久| 欧美国产中文高清| 欧美18视频| 日韩一区二区在线| 国产黄色激情视频| 在线综合亚洲| 一区二区三区免费播放| 国产又黄又大久久| 国产午夜在线一区二区三区| 久久久久亚洲综合| www深夜成人a√在线| 亚洲超碰97人人做人人爱| 91青青草视频| 91麻豆精品91久久久久久清纯| 亚洲精品无码专区| 中文字幕精品网| hd国产人妖ts另类视频| 国产成一区二区| 一区二区三区亚洲变态调教大结局| 九色综合日本| 亚洲情侣在线| 99精品免费在线观看| 国内精品久久久久影院一蜜桃| 捆绑裸体绳奴bdsm亚洲| 国产精品久久777777| 日韩高清免费av| 欧美顶级少妇做爰| 日韩精品一二| 欧美激情一区二区三区久久久| 亚洲精品一级二级| 粉嫩av四季av绯色av第一区| 日韩欧美一区二区三区在线视频 | 欧美电影精品一区二区| 国产午夜视频在线观看| 欧美高清自拍一区| 成人福利片在线| 久久国产精品久久| 综合在线视频| 91色国产在线| 99精品视频在线观看| 在线观看成人毛片| 欧美三级日韩三级| 色播色播色播色播色播在线| 欧美插天视频在线播放| 成人自拍av| 久久大香伊蕉在人线观看热2| 午夜欧美精品| 免费av不卡在线| 国产色综合久久| 国产成人精品片| 日韩精品专区在线影院重磅| 成人精品一区二区三区免费| 国内揄拍国内精品| 精品国产一区二| 一区二区三区av在线| 首页综合国产亚洲丝袜| 在线精品一区二区三区| 亚洲综合色噜噜狠狠| 99国产精品欲| 色老头一区二区三区| 台湾佬成人网| 欧美极品日韩| 亚洲在线一区| 国产精品手机在线观看| 夜夜精品浪潮av一区二区三区| 91精东传媒理伦片在线观看| 国产亚洲激情在线| 偷拍精品精品一区二区三区| 久久国产精品亚洲va麻豆| 亚洲经典视频在线观看| 欧美xxxx×黑人性爽| 亚洲国产婷婷综合在线精品| 97caocao| 久久久av免费| 欧美经典一区| 欧美一区二区三区综合| 国产69精品久久777的优势| 久草视频中文在线| 精品三级在线观看| 51精品在线| 蜜桃网站成人| 久久性天堂网| 欧美aaa级片| 69堂成人精品免费视频| 黄色一级片在线观看| 亚洲一区二区三区久久| 一区二区不卡| 亚洲妇女无套内射精| 亚洲超丰满肉感bbw| 日本xxxxwww| 庆余年2免费日韩剧观看大牛| 精品国产1区| 午夜精品中文字幕| 亚洲精品视频免费观看| 亚洲黄色在线免费观看| 2025国产精品视频| av影片在线一区| 欧美特黄aaa| 亚洲午夜精品网| 国产精品国产高清国产| 国产精品99一区| 亚洲精品成人无限看| 在线看黄色的网站| 一本到不卡免费一区二区| 午夜激情视频在线| 国产精品视频入口| 日韩精品五月天| 国产精品丝袜一区二区| 精品第一国产综合精品aⅴ| 中文字幕色婷婷在线视频| 中文字幕日韩精品久久| 成人免费高清在线观看| 免费看污视频的网站| 欧美成人久久久| 美日韩中文字幕| 国产性生活一级片| 欧美日韩午夜视频在线观看| 三区四区电影在线观看| 国产一区免费视频| 开心九九激情九九欧美日韩精美视频电影| 黄色a级片在线观看| 精品小视频在线| 麻豆一区在线| 久久精品99国产| 亚洲一区二区三区在线看| 国产福利第一视频在线播放| 99porn视频在线| 日本aⅴ免费视频一区二区三区| 久久久久久久久久久久久久久久久| 亚洲欧美制服丝袜| 91久久精品无嫩草影院| 午夜免费一区二区| 午夜av一区二区三区|