亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Docker Swarm入門實例詳解

2024-09-01 13:53:06
字體:
來源:轉載
供稿:網友

Swarm 在 Docker 1.12 版本之前屬于一個獨立的項目,在 Docker 1.12 版本發布之后,該項目合并到了 Docker 中,成為 Docker 的一個子命令。目前,Swarm 是 Docker 社區提供的唯一一個原生支持 Docker 集群管理的工具。它可以把多個 Docker 主機組成的系統轉換為單一的虛擬 Docker 主機,使得容器可以組成跨主機的子網網絡。

1. Swarm 認識

Swarm 是目前 Docker 官方唯一指定(綁定)的集群管理工具。Docker 1.12 內嵌了 swarm mode 集群管理模式。

為了方便演示跨主機網絡,我們需要用到一個工具——Docker Machine,這個工具與 Docker Compose、Docker Swarm 并稱 Docker 三劍客,下面我們來看看如何安裝 Docker Machine:

$ curl -L https://github.com/docker/machine/releases/download/v0.9.0-rc2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&  chmod +x /tmp/docker-machine &&  sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

安裝過程和 Docker Compose 非常類似?,F在 Docker 三劍客已經全部到齊了。

在開始之前,我們需要了解一些基本概念,有關集群的 Docker 命令如下:

docker swarm:集群管理,子命令有 init, join,join-token, leave, update

docker node:節點管理,子命令有 demote, inspect,ls, promote, rm, ps, update

docker service:服務管理,子命令有 create, inspect, ps, ls ,rm , scale, update

docker stack/deploy:試驗特性,用于多應用部署,等正式版加進來再說。

2. 創建集群

首先使用 Docker Machine 創建一個虛擬機作為 manger 節點。

$ docker-machine create --driver virtualbox manager1                  Running pre-create checks...(manager1) Unable to get the latest Boot2Docker ISO release version: Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on [::1]:53: server misbehavingCreating machine...(manager1) Unable to get the latest Boot2Docker ISO release version: Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: dial tcp: lookup api.github.com on [::1]:53: server misbehaving(manager1) Copying /home/zuolan/.docker/machine/cache/boot2docker.iso to /home/zuolan/.docker/machine/machines/manager1/boot2docker.iso...(manager1) Creating VirtualBox VM...(manager1) Creating SSH key...(manager1) Starting the VM...(manager1) Check network to re-create if needed...(manager1) Found a new host-only adapter: "vboxnet0"(manager1) Waiting for an IP...Waiting for machine to be running, this may take a few minutes...Detecting operating system of created instance...Waiting for SSH to be available...Detecting the provisioner...Provisioning with boot2docker...Copying certs to the local machine directory...Copying certs to the remote machine...Setting Docker configuration on the remote daemon...Checking connection to Docker...Docker is up and running!To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1

查看虛擬機的環境變量等信息,包括虛擬機的 IP 地址:

$ docker-machine env manager1export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/home/zuolan/.docker/machine/machines/manager1"export DOCKER_MACHINE_NAME="manager1"# Run this command to configure your shell: # eval $(docker-machine env manager1)

然后再創建一個節點作為 work 節點。

$ docker-machine create --driver virtualbox worker1

現在我們有了兩個虛擬主機,使用 Machine 的命令可以查看:

$ docker-machine ls               NAME   ACTIVE  DRIVER    STATE  URL            SWARM DOCKER  ERRORSmanager1  -   virtualbox  Running tcp://192.168.99.100:2376     v1.12.3  worker1  -   virtualbox  Running tcp://192.168.99.101:2376     v1.12.3

但是目前這兩臺虛擬主機并沒有什么聯系,為了把它們聯系起來,我們需要 Swarm 登場了。

因為我們使用的是 Docker Machine 創建的虛擬機,因此可以使用 docker-machine ssh 命令來操作虛擬機,在實際生產環境中,并不需要像下面那樣操作,只需要執行 docker swarm 即可。

把 manager1 加入集群:

$ docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.100:2377 --advertise-addr 192.168.99.100Swarm initialized: current node (23lkbq7uovqsg550qfzup59t6) is now a manager.To add a worker to this swarm, run the following command:  docker swarm join /  --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r /  192.168.99.100:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

用 --listen-addr 指定監聽的 ip 與端口,實際的 Swarm 命令格式如下,本例使用 Docker Machine 來連接虛擬機而已:

$ docker swarm init --listen-addr <MANAGER-IP>:<PORT>

接下來,再把 work1 加入集群中:

$ docker-machine ssh worker1 docker swarm join --token /  SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r /  192.168.99.100:2377This node joined a swarm as a worker.

上面 join 命令中可以添加 --listen-addr $WORKER1_IP:2377 作為監聽準備,因為有時候可能會遇到把一個 work 節點提升為 manger 節點的可能,當然本例子沒有這個打算就不添加這個參數了。

注意:如果你在新建集群時遇到雙網卡情況,可以指定使用哪個 IP,例如上面的例子會有可能遇到下面的錯誤。

$ docker-machine ssh manager1 docker swarm init --listen-addr $MANAGER1_IP:2377Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (10.0.2.15 on eth0 and 192.168.99.100 on eth1) - specify one with --advertise-addrexit status 1

發生錯誤的原因是因為有兩個 IP 地址,而 Swarm 不知道用戶想使用哪個,因此要指定 IP。

$ docker-machine ssh manager1 docker swarm init --advertise-addr 192.168.99.100 --listen-addr 192.168.99.100:2377 Swarm initialized: current node (ahvwxicunjd0z8g0eeosjztjx) is now a manager.To add a worker to this swarm, run the following command:  docker swarm join /  --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r /  192.168.99.100:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

集群初始化成功。

現在我們新建了一個有兩個節點的“集群”,現在進入其中一個管理節點使用 docker node 命令來查看節點信息:

$ docker-machine ssh manager1 docker node lsID            HOSTNAME STATUS AVAILABILITY MANAGER STATUS23lkbq7uovqsg550qfzup59t6 * manager1  Ready   Active     Leaderdqb3fim8zvcob8sycri3hy98a  worker1   Ready   Active

現在每個節點都歸屬于 Swarm,并都處在了待機狀態。Manager1 是領導者,work1 是工人。

現在,我們繼續新建虛擬機 manger2、worker2、worker3,現在已經有五個虛擬機了,使用 docker-machine ls 來查看虛擬機:

NAME   ACTIVE  DRIVER    STATE   URL             SWARM  DOCKER  ERRORSmanager1  -    virtualbox  Running  tcp://192.168.99.100:2376      v1.12.3  manager2  -    virtualbox  Running  tcp://192.168.99.105:2376      v1.12.3  worker1  -    virtualbox  Running  tcp://192.168.99.102:2376      v1.12.3  worker2  -    virtualbox  Running  tcp://192.168.99.103:2376      v1.12.3  worker3  -    virtualbox  Running  tcp://192.168.99.104:2376      v1.12.3

然后我們把剩余的虛擬機也加到集群中。

添加 worker2 到集群中:

$ docker-machine ssh worker2 docker swarm join / --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r / 192.168.99.100:2377This node joined a swarm as a worker.

添加 worker3 到集群中:

$ docker-machine ssh worker3 docker swarm join / --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r / 192.168.99.100:2377This node joined a swarm as a worker.

添加 manager2 到集群中:

先從 manager1 中獲取 manager 的 token:

$ docker-machine ssh manager1 docker swarm join-token managerTo add a manager to this swarm, run the following command: docker swarm join / --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o /192.168.99.100:2377

然后添加 manager2 到集群中:

$ docker-machine ssh manager2 docker swarm join / --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o / 192.168.99.100:2377This node joined a swarm as a manager.

現在再來查看集群信息:

$ docker-machine ssh manager2 docker node lsID              HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS16w80jnqy2k30yez4wbbaz1l8   worker1   Ready   Active    2gkwhzakejj72n5xoxruet71z   worker2   Ready   Active    35kutfyn1ratch55fn7j3fs4x   worker3   Ready   Active    a9r21g5iq1u6h31myprfwl8ln *  manager2  Ready   Active    Reachabledpo7snxbz2a0dxvx6mf19p35z   manager1  Ready   Active    Leader

3. 建立跨主機網絡

為了演示更清晰,下面我們把宿主機也加入到集群之中,這樣我們使用 Docker 命令操作會清晰很多。
直接在本地執行加入集群命令:

$ docker swarm join /        --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-8tn855hkjdb6usrblo9iu700o /  192.168.99.100:2377This node joined a swarm as a manager.

現在我們有三臺 manager,三臺 worker。其中一臺是宿主機,五臺虛擬機。

$ docker node lsID             HOSTNAME  STATUS  AVAILABILITY MANAGER STATUS6z2rpk1t4xucffzlr2rpqb8u3  worker3   Ready   Active    7qbr0xd747qena4awx8bx101s * user-pc   Ready   Active     Reachable9v93sav79jqrg0c7051rcxxev  manager2  Ready   Active     Reachablea1ner3zxj3ubsiw4l3p28wrkj  worker1   Ready   Active    a5w7h8j83i11qqi4vlu948mad  worker2   Ready   Active    d4h7vuekklpd6189fcudpfy18  manager1  Ready   Active     Leader

查看網絡狀態:

$ docker network lsNETWORK ID     NAME      DRIVER     SCOPE764ff31881e5    bridge     bridge     local         fbd9a977aa03    host      host      local        6p6xlousvsy2    ingress     overlay     swarm      e81af24d643d    none      null      local

可以看到在 swarm 上默認已有一個名為 ingress 的 overlay 網絡, 默認在 swarm 里使用,本例子中會創建一個新的 overlay 網絡。

$ docker network create --driver overlay swarm_test4dm8cy9y5delvs5vd0ghdd89s$ docker network lsNETWORK ID     NAME        DRIVER       SCOPE764ff31881e5    bridge       bridge       localfbd9a977aa03    host        host        local6p6xlousvsy2    ingress       overlay       swarme81af24d643d    none        null        local4dm8cy9y5del    swarm_test     overlay       swarm

這樣一個跨主機網絡就搭建好了,但是現在這個網絡只是處于待機狀態,下一小節我們會在這個網絡上部署應用。

4. 在跨主機網絡上部署應用

首先我們上面創建的節點都是沒有鏡像的,因此我們要逐一 pull 鏡像到節點中,這里我們使用前面搭建的私有倉庫。

$ docker-machine ssh manager1 docker pull reg.example.com/library/nginx:alpine   alpine: Pulling from library/nginxe110a4a17941: Pulling fs layer... ...7648f5d87006: Pull completeDigest: sha256:65063cb82bf508fd5a731318e795b2abbfb0c22222f02ff5c6b30df7f23292feStatus: Downloaded newer image for reg.example.com/library/nginx:alpine$ docker-machine ssh manager2 docker pull reg.example.com/library/nginx:alpinealpine: Pulling from library/nginxe110a4a17941: Pulling fs layer... ...7648f5d87006: Pull completeDigest: sha256:65063cb82bf508fd5a731318e795b2abbfb0c22222f02ff5c6b30df7f23292feStatus: Downloaded newer image for reg.example.com/library/nginx:alpine$ docker-machine ssh worker1 docker pull reg.example.com/library/nginx:alpine alpine: Pulling from library/nginxe110a4a17941: Pulling fs layer... ...7648f5d87006: Pull completeDigest: sha256:65063cb82bf508fd5a731318e795b2abbfb0c22222f02ff5c6b30df7f23292feStatus: Downloaded newer image for reg.example.com/library/nginx:alpine$ docker-machine ssh worker2 docker pull reg.example.com/library/nginx:alpinealpine: Pulling from library/nginxe110a4a17941: Pulling fs layer... ...7648f5d87006: Pull completeDigest: sha256:65063cb82bf508fd5a731318e795b2abbfb0c22222f02ff5c6b30df7f23292feStatus: Downloaded newer image for reg.example.com/library/nginx:alpine$ docker-machine ssh worker3 docker pull reg.example.com/library/nginx:alpinealpine: Pulling from library/nginxe110a4a17941: Pulling fs layer... ...7648f5d87006: Pull completeDigest: sha256:65063cb82bf508fd5a731318e795b2abbfb0c22222f02ff5c6b30df7f23292feStatus: Downloaded newer image for reg.example.com/library/nginx:alpine

上面使用 docker pull 分別在五個虛擬機節點拉取 nginx:alpine 鏡像。接下來我們要在五個節點部署一組 Nginx 服務。

部署的服務使用 swarm_test 跨主機網絡。

$ docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine5gz0h2s5agh2d2libvzq6bhgs

查看服務狀態:

$ docker service lsID      NAME    REPLICAS IMAGE     COMMAND5gz0h2s5agh2 helloworld 0/2    nginx:alpine

查看 helloworld 服務詳情(為了方便閱讀,已調整輸出內容):

$ docker service ps helloworldID     NAME     IMAGE     NODE   DESIRED STATE  CURRENT STATE       ERRORay081uome3  helloworld.1 nginx:alpine manager1 Running     Preparing 2 seconds ago 16cvore0c96 helloworld.2 nginx:alpine worker2  Running     Preparing 2 seconds ago

可以看到兩個實例分別運行在兩個節點上。
進入兩個節點,查看服務狀態(為了方便閱讀,已調整輸出內容):

$ docker-machine ssh manager1 docker ps -aCONTAINER ID  IMAGE     COMMAND     CREATED    STATUS     PORTS      NAMES119f787622c2  nginx:alpine "nginx -g ..."  4 minutes ago Up 4 minutes  80/tcp, 443/tcp hello ...$ docker-machine ssh worker2 docker ps -aCONTAINER ID  IMAGE     COMMAND     CREATED     STATUS    PORTS       NAMES5db707401a06  nginx:alpine "nginx -g ..."  4 minutes ago  Up 4 minutes 80/tcp, 443/tcp  hello ...

上面輸出做了調整,實際的 NAMES 值為:

helloworld.1.ay081uome3eejeg4mspa8pdlxhelloworld.2.16cvore0c96rby1vp0sny3mvt

記住上面這兩個實例的名稱?,F在我們來看這兩個跨主機的容器是否能互通:

首先使用 Machine 進入 manager1 節點,然后使用 docker exec -i 命令進入 helloworld.1 容器中 ping 運行在 worker2 節點的 helloworld.2 容器。

$ docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx /  ping helloworld.2.16cvore0c96rby1vp0sny3mvtPING helloworld.2.16cvore0c96rby1vp0sny3mvt (10.0.0.4): 56 data bytes64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.591 ms64 bytes from 10.0.0.4: seq=1 ttl=64 time=0.594 ms64 bytes from 10.0.0.4: seq=2 ttl=64 time=0.624 ms64 bytes from 10.0.0.4: seq=3 ttl=64 time=0.612 ms^C

然后使用 Machine 進入 worker2 節點,然后使用 docker exec -i 命令進入 helloworld.2 容器中 ping 運行在 manager1 節點的 helloworld.1 容器。

$ docker-machine ssh worker2 docker exec -i helloworld.2.16cvore0c96rby1vp0sny3mvt /  ping helloworld.1.ay081uome3eejeg4mspa8pdlx PING helloworld.1.ay081uome3eejeg4mspa8pdlx (10.0.0.3): 56 data bytes64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.466 ms64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.465 ms64 bytes from 10.0.0.3: seq=2 ttl=64 time=0.548 ms64 bytes from 10.0.0.3: seq=3 ttl=64 time=0.689 ms^C

可以看到這兩個跨主機的服務集群里面各個容器是可以互相連接的。

為了體現 Swarm 集群的優勢,我們可以使用虛擬機的 ping 命令來測試對方虛擬機內的容器。

$ docker-machine ssh worker2 ping helloworld.1.ay081uome3eejeg4mspa8pdlxPING helloworld.1.ay081uome3eejeg4mspa8pdlx (221.179.46.190): 56 data bytes64 bytes from 221.179.46.190: seq=0 ttl=63 time=48.651 ms64 bytes from 221.179.46.190: seq=1 ttl=63 time=63.239 ms64 bytes from 221.179.46.190: seq=2 ttl=63 time=47.686 ms64 bytes from 221.179.46.190: seq=3 ttl=63 time=61.232 ms^C$ docker-machine ssh manager1 ping helloworld.2.16cvore0c96rby1vp0sny3mvtPING helloworld.2.16cvore0c96rby1vp0sny3mvt (221.179.46.194): 56 data bytes64 bytes from 221.179.46.194: seq=0 ttl=63 time=30.150 ms64 bytes from 221.179.46.194: seq=1 ttl=63 time=54.455 ms64 bytes from 221.179.46.194: seq=2 ttl=63 time=73.862 ms64 bytes from 221.179.46.194: seq=3 ttl=63 time=53.171 ms^C

上面我們使用了虛擬機內部的 ping 去測試容器的延遲,可以看到延遲明顯比集群內部的 ping 值要高。

5. Swarm 集群負載

現在我們已經學會了 Swarm 集群的部署方法,現在來搭建一個可訪問的 Nginx 集群吧。體驗最新版的 Swarm 所提供的自動服務發現與集群負載功能。

首先刪掉上一節我們啟動的 helloworld 服務:

$ docker service rm helloworld                 helloworld

然后在新建一個服務,提供端口映射參數,使得外界可以訪問這些 Nginx 服務:

$ docker service create --replicas 2 --name helloworld -p 7080:80 --network=swarm_test nginx:alpine9gfziifbii7a6zdqt56kocyun

查看服務運行狀態:

$ docker service ls                                        ID      NAME     REPLICAS   IMAGE      COMMAND9gfziifbii7a helloworld   2/2    nginx:alpine

不知你有沒有發現,雖然我們使用 --replicas 參數的值都是一樣的,但是上一節中獲取服務狀態時,REPLICAS 返回的是 0/2,現在的 REPLICAS 返回的是 2/2。

同樣使用 docker service ps 查看服務詳細狀態時(下面輸出已經手動調整為更易讀的格式),可以看到實例的 CURRENT STATE 中是 Running 狀態的,而上一節中的 CURRENT STATE 中全部是處于 Preparing 狀態。

$ docker service ps helloworldID     NAME   IMAGE   NODE  DESIRED STATE  CURRENT STATE  ERROR9ikr3agyi...  helloworld.1 nginx:alpine user-pc  Running     Running 13 seconds ago 7acmhj0u...  helloworld.2 nginx:alpine worker2  Running     Running 6 seconds ago

這就涉及到 Swarm 內置的發現機制了,目前 Docker 1.12 中 Swarm 已經內置了服務發現工具,我們不再需要像以前使用 Etcd 或者 Consul 這些工具來配置服務發現。對于一個容器來說如果沒有外部通信但又是運行中的狀態會被服務發現工具認為是 Preparing 狀態,本小節例子中因為映射了端口,因此有了 Running 狀態。

現在我們來看 Swarm 另一個有趣的功能,當我們殺死其中一個節點時,會發生什么。

首先 kill 掉 worker2 的實例:

$ docker-machine ssh worker2 docker kill helloworld.2.7acmhj0udzusv1d7lu2tbuhu4helloworld.2.7acmhj0udzusv1d7lu2tbuhu4

稍等幾秒,再來看服務狀態:

$ docker service ps helloworldID     NAME     IMAGE   NODE  DESIRED STATE CURRENT STATE  ERROR9ikr3agyi... helloworld.1   nginx:alpine zuolan-pc Running    Running 19 minutes ago 8f866igpl... helloworld.2   nginx:alpine manager1 Running    Running 4 seconds ago  7acmhj0u...  /_ helloworld.2 nginx:alpine worker2  Shutdown    Failed 11 seconds ago ...exit...$ docker service ls      ID      NAME    REPLICAS IMAGE     COMMAND9gfziifbii7a helloworld 2/2    nginx:alpine

可以看到即使我們 kill 掉其中一個實例,Swarm 也會迅速把停止的容器撤下來,同時在節點中啟動一個新的實例頂上來。這樣服務依舊還是兩個實例在運行。

此時如果你想添加更多實例可以使用 scale 命令:

$ docker service scale helloworld=3helloworld scaled to 3

查看服務詳情,可以看到有三個實例啟動了:

$ docker service ps helloworldID     NAME    IMAGE   NODE  DESIRED STATE CURRENT STATE  ERROR9ikr3agyi... helloworld.1  nginx:alpine user-pc  Running    Running 30 minutes ago 8f866igpl... helloworld.2  nginx:alpine manager1 Running    Running 11 minutes ago 7acmhj0u... /_ helloworld.2 nginx:alpine worker2  Shutdown    Failed 11 minutes ago  exit1371vexr1jm... helloworld.3  nginx:alpine  worker2  Running    Running 4 seconds ago

現在如果想減少實例數量,一樣可以使用 scale 命令:

$ docker service scale helloworld=2helloworld scaled to 2

至此,Swarm的主要用法都已經介紹完了,主要講述了 Swarm 集群網絡的創建與部署。介紹了 Swarm 的常規應用,包括 Swarm 的服務發現、負載均衡等,然后使用 Swarm 來配置跨主機容器網絡,并在上面部署應用。

關于Swarm的更多實戰例子,以后有機會還會寫的,就這樣啦。

總結

以上就是本文關于Docker Swarm 入門實例詳解的全部內容,希望對大家有所幫助,有什么問題可以隨時留言,小編會及時回復大家的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
57pao国产精品一区| 日韩一级黄色av| 日韩中文在线视频| 国产一区二区色| 欧美激情网站在线观看| 亚洲第一福利在线观看| 国产成人精品在线视频| 国产91ⅴ在线精品免费观看| 91精品国产777在线观看| 亚洲精品久久久久| 久久精品亚洲国产| 成人在线一区二区| 亚洲国产日韩精品在线| 精品香蕉在线观看视频一| 91麻豆国产语对白在线观看| 日韩在线一区二区三区免费视频| 亚洲精品视频播放| 中文字幕一精品亚洲无线一区| 国产91在线视频| 尤物精品国产第一福利三区| 国产精品视频午夜| 九九热r在线视频精品| 欧美成人免费播放| 精品女厕一区二区三区| 欧美xxxx14xxxxx性爽| 日韩av在线资源| 成人有码视频在线播放| 欧美亚洲另类视频| 欧美大片在线影院| 亚洲日韩中文字幕| 亚洲精品色婷婷福利天堂| 亚洲美女av黄| 日韩在线观看成人| 俺也去精品视频在线观看| 久久理论片午夜琪琪电影网| 亚洲欧美在线x视频| 国产区精品在线观看| 亚洲精品按摩视频| 在线观看中文字幕亚洲| 精品一区二区亚洲| 欧美一级黄色网| 国产在线观看精品一区二区三区| 国产亚洲精品激情久久| 亚洲精品电影在线| 国产91久久婷婷一区二区| 欧美中文字幕精品| 日本精品在线视频| 日韩有码在线观看| 国产视频在线一区二区| 欧美做爰性生交视频| 91久久综合亚洲鲁鲁五月天| 欧美丰满片xxx777| 久久69精品久久久久久国产越南| 亚洲国产一区二区三区四区| 久久久久日韩精品久久久男男| 91精品国产综合久久香蕉922| 国产69精品久久久久9999| 日韩视频免费中文字幕| 一本色道久久综合狠狠躁篇的优点| 一区二区三欧美| 国产精品视频99| 97精品国产91久久久久久| 欧美中文字幕在线视频| 久久亚洲欧美日韩精品专区| 久久免费观看视频| 精品久久香蕉国产线看观看亚洲| 亚洲精品aⅴ中文字幕乱码| 亚洲无av在线中文字幕| 国产综合在线看| 亚洲国产成人精品久久| 欧美激情精品在线| 欧美国产日韩一区| 欧美肥老太性生活视频| 91精品国产777在线观看| 日韩女优人人人人射在线视频| 国产精品久久久久久久午夜| 亚洲一区二区三区乱码aⅴ| 成人激情春色网| 欧美高清视频在线| 国产精品三级网站| 精品爽片免费看久久| 欧美www视频在线观看| 欧美激情a∨在线视频播放| 欧美美女15p| 九九视频直播综合网| 国产成人拍精品视频午夜网站| 伦理中文字幕亚洲| 久久全球大尺度高清视频| 成人春色激情网| 性色av一区二区三区红粉影视| 欧美成人性色生活仑片| 亚洲精品资源美女情侣酒店| 7m第一福利500精品视频| 91av免费观看91av精品在线| 国产精品91在线| 亚洲美女中文字幕| 亚洲影视九九影院在线观看| 欧美精品一区二区免费| 这里只有精品在线观看| 久久精品最新地址| 奇米4444一区二区三区| 亚洲xxxx在线| 国产视频久久网| 日韩视频欧美视频| 国外成人在线播放| 成人久久精品视频| 成人精品一区二区三区电影黑人| 欧美亚洲另类激情另类| 欧美成aaa人片在线观看蜜臀| 亚洲电影免费观看| 欧美成人免费播放| 97成人精品视频在线观看| 日韩高清av一区二区三区| 亚洲色图50p| 国产精品777| 亚洲高清免费观看高清完整版| 不卡伊人av在线播放| 91理论片午午论夜理片久久| 国内精品国产三级国产在线专| 中文字幕日韩av综合精品| 亚洲一区二区福利| 国产精品露脸自拍| 高清一区二区三区四区五区| 国产日产欧美a一级在线| 国产精品久久久久秋霞鲁丝| 欧美精品少妇videofree| 久久夜色撩人精品| 亚洲成人激情在线观看| 日韩天堂在线视频| 一区二区三区www| 国产精品欧美风情| 亚洲a一级视频| 国产欧美在线观看| 亚洲精选中文字幕| 国产精品成人aaaaa网站| 国产在线拍偷自揄拍精品| 国产97色在线|日韩| 日韩在线欧美在线| 国产精品久久久久久影视| 久热精品视频在线免费观看| 久久亚洲精品国产亚洲老地址| 日韩欧美极品在线观看| 91精品国产自产在线老师啪| 亚洲国产99精品国自产| 亚洲va久久久噜噜噜| 97人洗澡人人免费公开视频碰碰碰| 国产偷国产偷亚洲清高网站| 91精品在线国产| 亚洲欧美在线免费观看| 亚洲第一免费网站| x99av成人免费| 欧美福利视频在线观看| 亚洲一区二区三区sesese| 色综合久综合久久综合久鬼88| 久久久影视精品| 久久精品国产亚洲7777| 亚洲天天在线日亚洲洲精| 成人久久久久久久| 97超级碰在线看视频免费在线看| 国产精品99久久99久久久二8| 亚洲男人第一av网站| 欧美在线中文字幕| 欧美日韩在线一区| 欧美激情2020午夜免费观看|