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

Pulumi實戰 | 一款架構即代碼的開源產品

開發 架構
本文簡單介紹了 Pulumi 的基本原理以及簡單用法。主要是為了起拋磚引玉的作用,個人認為 Pulumi 的好處和用法還有待探索。希望這篇文章能給讀者一定的幫助,謝謝!

本篇文章,主要介紹 Pulumi 是什么以及它的相關原理,并且使用它搭建一個 Nacos 和 SpringBoot 的環境!

一、Pulumi 誕生

(一)誕生原因

Pulumi 是一個架構即代碼的開源產品,使用它即可在任何提供 SDK 或者 API 的云商平臺,部署和使用容器、服務器以及基礎架構等云資源。

它提供了多種主流的編程語言,讓使用者可以通過自己最熟悉的編程語言,編寫代碼去控制云平臺上面的各種云資源。而不是讓初學者去學習那些繁瑣難記的標簽語言,降低了其入門的難度。

1、技術演化:

1)最初的云廠商僅僅只提供IaaS、PaaS這類云服務,并沒有把它們組合起來;

IaaS: Infrastructure as a service,基礎設施即服務。PaaS: Platform as a service, 平臺即服務。SaaS: Software as a service, 軟件即服務。

誕生一種方式:架構即代碼/基礎設施代碼化,(Infrastructure As Code),即IaC。

結果:

圖片

亞馬遜誕生了類似于云服務 CloudFormation 這類產品,這類產品可以使用一些簡單的方法創建和管理一系列有關聯的AWS的資源。

2)CloudFormation 只支持AWS,ROS只支持阿里云,但是用戶可能會出于安全或者業務考慮,雞蛋不想放在同一個籃子里,就會選擇多個云商;

圖片

為了支持多個云商資源的創建和管理,誕生了開源產品 Terraform,該產品支持多個云商的SDK,使用標記語言的方式去創建和管理云資源。

缺點:上手難度大,用戶需要額外去學習一種特定的標記語言 HCL (HashiCorp Configuration Language),對新入門同學不夠友好。

2、Pulumi 登場

由此,誕生了我們的主角(Pulumi):

主要作用:

1)快速組合多類型云資源搭建用戶業務;

2)滿足用戶多云商多區域容災的業務需求;

3)如果使用多個云商,技術人員不需要熟練掌握兩家甚至多家云廠商的技術與服務產品;

4)標記語言需要一定學習成本,技術人員只要會一種主流語言即可。

(二)Pulumi 組件

工作原理:

圖片

個人理解:

Pulumi 程序運行后,Language host 會把程序代碼轉換成 Pulumi 能理解的方式,然后傳遞給部署引擎。

部署引擎根據資源有無以及資源類型,對資源提供商發起相關操作!

1、組件(Cli端)

1)語言宿主(Language Hosts)

語言宿主負責運行一個 Pulumi 程序,并設置一個可以向部署引擎注冊資源的環境。

a、語言執行器

Pulumi 用于啟動程序所用語言(如Node或Python)的 Runtime (運行時),此二進制文件隨Pulumi CLI一起分發。

名稱類似:pulumi-language-<language-name>的二進制文件。

圖片

它是語言處理中樞,負責為您的開發語言準備好與之對應的環境。譬如:Python 3.7。

圖片

b、Runtime(運行時/語言運行器)

它會負責為您編寫的程序做好運行準備,并在過程中監控程序的運行。

2)部署引擎(Deplayment  Engine)

部署引擎負責,計算將基礎架構的當前狀態驅動到程序表示的所需狀態所需的一組操作。

當從語言宿主接收到資源注冊時,引擎會查詢現有狀態以確定該資源之前是否已創建。

如果沒有,引擎會使用資源提供者來創建它。

如果它已經存在,則引擎與資源提供者一起工作,通過將資源的舊狀態與程序表示的資源的新期望狀態進行比較來確定發生了什么變化(如果有的話)。

如果有更改,引擎會確定它是否可以就地更新資源,或者是否必須通過創建新版本并刪除舊版本來替換它。

該決定取決于資源的哪些屬性正在發生變化以及資源本身的類型。

當語言宿主與引擎通信它已完成 Pulumi 程序的執行時,引擎會查找任何它沒有看到新資源注冊的現有資源并安排這些資源以進行刪除。

引擎已經被封裝進pulumi cli,無需額外安裝與部署。

3)資源提供商(云商)
a、資源插件

云商不同,插件不同。

b、SDK

云商相關 SDK。

2、組件(Service 端)

該組件主要保存 Pulumi 相關的 Project、Stack 等配置。

最新版 Pulumi 默認 Service 是 Pulumi 官方的 SAAS 界面:

1)官方 Service 端

??https://app.pulumi.com/??

圖片

圖片

圖片

2)其它存儲方式充當 Service 端

當然,也可以用其它存儲或者本地來保存這些配置!

如下面所示,我使用本地充當 Pulumi Service:

pulumi login file://D:\Lang-Python\Data\Pulumi-Service

圖片

二、為什么使用 Pulumi?

Pulumi 特點:多語言,多云商的服務支持。

但是,我個人覺得,這并不是我使用他的主要原因。

因為他的多語言和多云商的兩個特點其實并沒有讓我感覺有多么便利。

多語言:各大云商也基本支持了多種主流編程語言的SDK。

多云商:由于云商支持的資源不同,其實 Pulumi 并不能做到一套代碼走天下,在多個云商處復用。

我選它的因素:

它有一個資源狀態的管理功能,該功能可以讓你在操作資源時,省略了不少工作!

以及它的資源關聯性,即一個資源的輸出可以充當另一個資源的輸入。

這兩個特點也是與云商原生 SDK 最大的區別!

Pulumi 中處理資源之間的關聯性,是通過其 output 機制實現的。

三、怎么使用Pulumi?

Pulumi 初體驗

1、Pulumi 結構

圖片

2、安裝 Pulumi

Pulumi支持多平臺,包括Linux、Windows、MacOS等操作系統。

1)安裝Pulumi需要預先安裝Chocolatey包管理軟件:

administrator方式打開PowerShell命令行:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

參考:https://chocolatey.org/

2)choco安裝 Pulumi

choco install pulumi

3、開始使用 Pulumi

1)創建 Pulumi 項目

pulumi new alicloud-python

如果該機器第一次使用 Pulumi 創建項目的時候,會彈出兩個選項:

a)輸入 Key;

b)瀏覽器登錄 Pulumi 后端服務;

如果,選擇“瀏覽器登錄 Pulumi 后端服務”的選項,程序會觸發瀏覽器打開 Pulumi 的 Web 在線登錄界面。

我使用 GitHub 賬號登錄進去,里面是 Pulumi 的 Dashboard 。

該過程中,會同時讓你創建 Project 以及 Stack!

2)編寫自己的源代碼,相關資源類型在其云商 SDK處查看

圖片

3)更新操作

pulumi up

該操作會把 stack 里面的資源進行創建或更新操作!

4)銷毀操作

pulumi destroy

危險:該操作會銷毀 stack 處的所有資源!

四、其它特點

1、即時性

部分云商對 Pulumi 支持度非常高,比如:Azure。

只要 Azure 上傳新資源,Pulumi 基本當天就能使用該資源。

2、DevOps\CICD

Pulumi 自帶 Automation API 組件,可以拋棄 CLI,使用代碼包調用的方式,直接使用 Pulumi。

換言之,即程序中可以直接調用 Pulumi 程序。

3、轉換器

目前支持這幾種云商轉換成 Pulumi 程序。

比如:Terraform 轉換成 Pulumi!

??https://www.pulumi.com/tf2pulumi/??

五、搭建 Navos 和 SpringBoot 環境:

上面大致,講解了 Pulumi 的基本原理和使用方式,下面給大家展示一下,通過 Pulumi 搭建一套環境的方案!

1、編寫 Shell 腳本

編寫腳本包括多個步驟:

圖片

如上圖所示,搭建一個 Spring Boot 環境,需要許多前提依賴,比如 Java/Maven/Nacos等,相關代碼,在后面。

下面是主要的配置文件,主要寫明相關組件的安裝路徑,以及環境變量等參數。

其中的許多安裝包,都是事先下載好的,都是組件官網安裝包,讀者請自行下載。

配置文件:

#!/bin/bash
export LC_ALL=en_US.UTF-8

# 當前目錄
BASE_DIR=$(pwd)
# 環境變量保存目錄
PROFILE_ENVS="/etc/profile.envs"

export BASE_DIR
export PROFILE_ENVS
# ****************************** JAVA CONFIG****************************** #
# Java 安裝路徑
JAVA_INSTALL="/usr/local/java11"

# Java 安裝包
JAVA_FOLDER_NAME="jdk-11.0.16"
JAVA_PACKAGE="${JAVA_FOLDER_NAME}_linux-x64_bin.tar.gz"

# JAVA_HOME_PATH
JAVA_HOME_PATH="${JAVA_INSTALL}/${JAVA_FOLDER_NAME}"

export JAVA_INSTALL
export JAVA_FOLDER_NAME
export JAVA_PACKAGE
export JAVA_HOME_PATH

# ****************************** Maven CONFIG****************************** #
# Maven 安裝路徑
MAVEN_INSTALL="/usr/local/maven386"

# Maven 安裝包
MAVEN_FOLDER_NAME="apache-maven-3.8.6"
MAVEN_PACKAGE="${MAVEN_FOLDER_NAME}-bin.tar.gz"

# MAVEN_HOME_PATH
MAVEN_HOME_PATH="${MAVEN_INSTALL}/${MAVEN_FOLDER_NAME}"

export MAVEN_INSTALL
export MAVEN_FOLDER_NAME
export MAVEN_PACKAGE
export MAVEN_HOME_PATH

# ****************************** Nacos CONFIG****************************** #
# Nacos 安裝路徑
NACOS_INSTALL="/usr/local/nacos211"

# Nacos 安裝包
NACOS_FOLDER_NAME="nacos"
NACOS_PACKAGE="nacos-server-2.1.1.tar.gz"

# NACOS_HOME_PATH
NACOS_HOME_PATH="${NACOS_INSTALL}/${NACOS_FOLDER_NAME}"

export NACOS_INSTALL
export NACOS_FOLDER_NAME
export NACOS_PACKAGE
export NACOS_HOME_PATH

# ****************************** SpringBoot Boot CONFIG****************************** #
# SpringBoot Boot 工作臺
SPRING_BOOT_WORKFLOW="/opt/boot_workflow"
SPRING_BOOT_GROUP_ID="com.gavin"
SPRING_BOOT_ARTIFACT_ID="na-boot"
SPRING_BOOT_VERSION="0.0.1-snapshot"

export SPRING_BOOT_WORKFLOW
export SPRING_BOOT_GROUP_ID
export SPRING_BOOT_ARTIFACT_ID
export SPRING_BOOT_VERSION

方法庫:

add_dir() {
dirs=$*
log "mkdir -p ${dirs}"
mkdir -p "${dirs}" >/dev/null 2>&1
LAST_INFO=$?
if [[ ${LAST_INFO} -eq 0 ]]; then
ok "Folder \"${dirs}\" Create Success"
else
err "Folder \"${dirs}\" Create Failed"
fi
}

1)安裝 Java

function install_java() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${JAVA_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${JAVA_PACKAGE}" -C "${JAVA_INSTALL}/"

# 添加環境變量
cat >"${PROFILE_ENVS}/java.sh" <<EOF
export JAVA_HOME=${JAVA_HOME_PATH}
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
EOF
echo "source ${PROFILE_ENVS}/java.sh" >>/etc/profile

source /etc/profile

# 添加軟鏈接
ln -s "${JAVA_HOME_PATH}/bin/java" /usr/bin/java
ln -s "${JAVA_HOME_PATH}/bin/javac" /usr/bin/javac
}

2)安裝 Maven

function install_maven() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${MAVEN_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${MAVEN_PACKAGE}" -C "${MAVEN_INSTALL}/"

# 新建倉庫目錄
add_dir "${MAVEN_HOME_PATH}/repository"

# 更換阿里云鏡像并設置maven倉庫位置
cat >"${MAVEN_HOME_PATH}/conf/settings.xml" <<EOF
<?xml versinotallow="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocatinotallow="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<localRepository>${MAVEN_HOME_PATH}/repository</localRepository>
<profiles>
</profiles>
</settings>
EOF

# 添加環境變量
cat >"${PROFILE_ENVS}/maven.sh" <<EOF
export MAVEN_HOME=${MAVEN_HOME_PATH}
export PATH=$PATH:$MAVEN_HOME/bin
EOF
echo "source ${PROFILE_ENVS}/maven.sh" >>/etc/profile

source /etc/profile

# 添加軟鏈接
ln -s "${MAVEN_HOME_PATH}/bin/mvn" /usr/bin/mvn
}

3)安裝 Navos

function start_nacos() {
# 單機模式運行 nacos
bash "${NACOS_HOME_PATH}/bin/startup.sh" -m standalone
}

function install_nacos() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${NACOS_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${NACOS_PACKAGE}" -C "${NACOS_INSTALL}/"

# 啟動 nacos
start_nacos
}

4)創建 Spring Boot

function create_spring_boot() {
# 添加項目目錄
add_dir "${SPRING_BOOT_WORKFLOW}"

# 進入項目目錄
cd "${SPRING_BOOT_WORKFLOW}" || return 1

# maven 創建項目
echo "y" | mvn archetype:generate -DgroupId="${SPRING_BOOT_GROUP_ID}" \
-DartifactId="${SPRING_BOOT_ARTIFACT_ID}" \
-DarchetypeArtifactId=maven-archetype-quickstart \
-Dversinotallow="${SPRING_BOOT_VERSION}"

# 編譯 SpringBoot Boot
compile_spring_boot

# 啟動 SpringBoot Boot
start_spring_boot
}

function compile_spring_boot() {
cd "${SPRING_BOOT_WORKFLOW}/${SPRING_BOOT_ARTIFACT_ID}/" || return 1

mvn compile
}

function start_spring_boot() {
cd "${SPRING_BOOT_WORKFLOW}/${SPRING_BOOT_ARTIFACT_ID}/" || return 1

# 啟動
nohup mvn spring-boot:run -Dspring-boot.run.profiles=prod &
}

5)主執行函數

#!/bin/bash
export LC_ALL=en_US.UTF-8
source ./config.sh
source ./functions.sh
source ./scripts/java.sh
source ./scripts/maven.sh
source ./scripts/nacos.sh
source ./scripts/spring_boot.sh

# 前置處理
pre_deal() {
yum_install_pkg "rsync"
yum_install_pkg "tree"
yum_install_pkg "lsof"
yum_install_pkg "lrzsz"
}

# 前置處理
pre_deal

# 添加 profile 環境文件夾
add_dir "${PROFILE_ENVS}"

# 安裝 Java
install_java

# 安裝 Maven
install_maven

# 安裝 Nacos
install_nacos

# 創建 SpringBoot Boot 項目
create_spring_boot

6)替換 Java 文件

為了,測試說明,替換 Maven 生成的 Spring Boot 初始代碼!

App.java

package com.gavin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration // 作用: 開啟自動配置 初始化spring環境 springmvc環境
@ComponentScan // 作用: 用來掃描相關注解 掃描范圍 當前入口類所在的包及子包(com.gavin及其子包)
public class App {
public static void main(String[] args) {
// springApplication: spring應用類 作用: 用來啟動springboot應用
// 參數1: 傳入入口類 類對象 參數2: main函數的參數
SpringApplication.run(App.class, args);
}
}

創建 controller 文件夾:

helloController.java

package com.gavin.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class helloController {
@GetMapping("/hello")
public String hello() {
System.out.println("Hello SpringBoot!!!");
return "Hello SpringBoot";
}
}

2、生成阿里云鏡像

1)Packer介紹

傳統模式下,我們制作鏡像,都是在本地或者公司服務器上,安裝好相應的軟件,然后打成鏡像文件,比較麻煩。

現在介紹一個直接在云商打包鏡像的利器:Packer,它是與 Terrform 同一個公司的產品。

官網地址:

Packer by HashiCorp

它利用相關腳本,即可輕松制作線上鏡像。

2)安裝 Packer

CentOS/RHEL

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer

Windows

https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_windows_386.zip
https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_windows_amd64.zip

3)打包鏡像腳本

把之前寫的腳本壓縮成一個文件,方便 Packer 執行!

SpringBoot.zip

4)創建打包鏡像配置

spring_boot.json

{
"variables": {
"access_key": "ACCESS_KEY",
"secret_key": "SECRET_KEY"
},
"builders": [{
"type":"alicloud-ecs",
"access_key":"ACCESS_KEY",
"secret_key":"SECRET_KEY",
"region":"cn-hangzhou",
"image_name":"packer_spring_boot_image",
"source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
"ssh_username":"root",
"instance_type":"ecs.n2.small",
"internet_charge_type":"PayByTraffic",
"io_optimized":"true"
}],
"provisioners": [{
"type": "file",
"source": "SpringBoot.zip",
"destination": "/tmp/"
},{
"type": "shell",
"inline": [
"sleep 30",
"cd /tmp",
"yum install -y unzip",
"unzip SpringBoot.zip",
"cd SpringBoot",
"sudo chmod 755 main.sh",
"./main.sh"
]
}]
}

5)執行鏡像打包(Windows)

F:\PackerSoftware\packer\packer.exe validate spring_boot.json
F:\PackerSoftware\packer\packer.exe build spring_boot.json

3、編寫 Pulumi 代碼(Python)

下面就是真正用到 Pulumi 的地方了,我們編寫,一系列 Python 代碼,實現 Spring Boot 項目的完成。

1)創建 VPC

import pulumi_alicloud as alicloud

def create_network(pre_name):
# VPC
vpc_name = "{}_vpc".format(pre_name)
vpc = alicloud.vpc.Network(vpc_name, cidr_block="172.16.0.0/12")

return vpc

2)創建 Switch

import pulumi_alicloud as alicloud

def create_switch(pre_name, az, vpc):
# 交換機
vswitch_name = "{}_vswitch".format(pre_name)
vswitch = alicloud.vpc.Switch(vswitch_name, zone_id=az, cidr_block="172.16.1.0/24", vpc_id=vpc.id)

return vswitch

3)創建安全組以及安全規則

需要開放的安全組規則端口為:22、80。22 為 SSH 端口,80 為 Sprint Boot 寫的簡單 Demo 需要放開的 HTTP 端口號。

import pulumi
import pulumi_alicloud as alicloud

def create_security_group(pre_name, vpc):
# 安全組
sg_name = "{}_sg".format(pre_name)
sg_description = "{} security groups".format(pre_name)
sg = alicloud.ecs.SecurityGroup(sg_name, descriptinotallow=sg_description, vpc_id=vpc.id)

return sg

def create_security_group_rule(pre_name, sg, port_range):
# 安全組規則
sg_rule_name = "{}_sg_rule".format(pre_name)
sg_rule = alicloud.ecs.SecurityGroupRule(
sg_rule_name,
security_group_id=sg.id,
ip_protocol="tcp",
type="ingress",
nic_type="intranet",
port_range=port_range,
cidr_ip="0.0.0.0/0"
)

return sg_rule

4)創建 ECS

鏡像ID為上一步驟(生成阿里云鏡像),生成的鏡像的ID。

import pulumi
import pulumi_alicloud as alicloud

def create_instance(
pre_name,
availability_znotallow=None,
vswitch=None,
sg=None,
password=None,
user_data=None,
instance_type=None,
image_id=None
):
# 實例
sg_ids = [sg.id]
instance_name = "{}-instance".format(pre_name)
instance = alicloud.ecs.Instance(
instance_name,
availability_znotallow=availability_zone,
instance_type=instance_type,
security_groups=sg_ids,
image_id=image_id,
instance_name=instance_name,
vswitch_id=vswitch.id,
internet_max_bandwidth_out=10,
password=password,
user_data=user_data
)

pulumi.export("{}-IP".format(instance_name), instance.public_ip)

return instance

4、創建實例

1) pulumi up

pulumi up

2)查看結果

打開瀏覽器,輸入“實例IP/test/hello”,即可看到 Spring Boot 返回的內容!

3) pulumi destroy

如果該實例不想用了,直接銷毀即可!

5、總結

圖片

六、后記

綜上,本文簡單介紹了 Pulumi 的基本原理以及簡單用法。主要是為了起拋磚引玉的作用,個人認為 Pulumi 的好處和用法還有待探索。希望這篇文章能給讀者一定的幫助,謝謝!

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

2017-03-06 11:02:59

產品軟件Power Desig

2024-08-16 08:31:05

2021-07-23 16:50:19

httpJava框架

2016-02-15 11:44:23

源碼開源項目watch

2014-08-29 15:34:27

Web安全

2015-12-07 11:34:37

2017-07-11 08:57:07

功能超融合架構

2020-04-15 17:14:14

戴爾

2024-02-23 08:13:25

Excalidraw白板工具開源

2015-12-03 10:51:16

2020-12-02 08:16:47

SaaS

2022-06-17 10:40:45

IBM

2016-12-02 12:48:33

2022-08-03 08:56:22

massCode開源

2017-06-30 16:24:40

大數據神經網絡NNabla

2023-10-31 08:03:33

開源電子簽名組件

2021-03-26 08:07:25

LibreNMS開源監控軟件

2015-09-23 17:39:52

Github開源工具

2020-10-23 09:35:41

開源 Java 代碼

2015-09-28 09:56:17

Github開源工具編程
點贊
收藏

51CTO技術棧公眾號

亚洲色成人www永久网站| 欧美丝袜丝交足nylons| 国产精品一区二区三区毛片淫片 | 国产精品综合视频| 高清欧美电影在线| 亚洲一区二区三区四区五区六区 | 色婷婷综合久久久久中文| 亚洲人成人77777线观看| 高h调教冰块play男男双性文| 爽好久久久欧美精品| 欧美成aaa人片免费看| 日韩网站在线播放| 精品国产鲁一鲁****| 欧美午夜片在线免费观看| 国产盗摄视频在线观看| 三级国产在线观看| 国产传媒日韩欧美成人| 国产91色在线| 国产精品自拍视频一区| 亚洲精品国产精品乱码视色| 97一区二区国产好的精华液| 日韩高清在线免费观看| 亚洲成av人综合在线观看| 亚洲 国产 日韩 综合一区| 亚洲精品97久久中文字幕| 欧美a级一区二区| 2018日韩中文字幕| 欧美被狂躁喷白浆精品| 日韩精品免费| 亚洲天堂日韩电影| 中文字幕精品视频在线| 久久精品免视看国产成人| 欧美最新大片在线看| 黄色www网站| 欧美xxxx少妇| 午夜精品久久久久久久第一页按摩 | 黄色免费视频网站| 日韩午夜视频在线| 欧美精品momsxxx| 欧美亚洲国产一区在线观看网站| 国产 日韩 亚洲 欧美| 成人影欧美片| 国产精品福利一区| 色姑娘综合网| 巨骚激情综合| 久久久99久久精品欧美| 久久久久久久久久码影片| 免费a视频在线观看| 国产精品一卡二卡在线观看| 成人免费福利视频| 中文字幕久久久久| 蜜臀av一区二区| 国产精品视频久久久| 最好看的日本字幕mv视频大全 | 国产91精品青草社区| xxxx 国产| 亚洲精品麻豆| 青草青草久热精品视频在线观看| 国产成人在线免费视频| 一本色道久久| 2019日本中文字幕| 久久久久久久久黄色| 久久久蜜桃一区二区人| 在线亚洲免费视频| 久草资源站在线观看| 黄色aa久久| 91成人免费网站| 中文字幕免费高清在线| 国产精品**亚洲精品| 欧美成人在线直播| 无码精品一区二区三区在线播放| 日韩美脚连裤袜丝袜在线| 亚洲裸体xxxx| 免费黄色在线网址| 正在播放日韩欧美一页 | 色女人综合av| 免费人成在线观看播放视频| 亚洲激情校园春色| 国产一区二区视频播放| 亚洲天堂一区二区| 亚洲日本国产| 精品夜色国产国偷在线| 久久丫精品忘忧草西安产品| 色中色综合网| 久久久久久久久久久成人| 男人午夜免费视频| 精品午夜久久福利影院| 成人羞羞视频免费| 成人高清免费在线播放| 亚洲激情一二三区| 国产v亚洲v天堂无码久久久| 四虎永久精品在线| 日韩精品视频免费在线观看| 丁香激情五月少妇| 国产综合激情| 国产成人高潮免费观看精品| 99热这里精品| 久久先锋影音av鲁色资源| 一本一道久久a久久精品综合| av毛片在线免费看| 91黄色免费网站| 性生交大片免费看l| 国产在视频线精品视频www666| 久久精品久久久久久| 日韩不卡视频在线| 国产一区二区三区免费在线观看| 精品伦理一区二区三区| av午夜在线| 黄网站色欧美视频| 激情文学亚洲色图| 国产99久久精品一区二区300| 久久五月天色综合| 91视频在线视频| 丁香婷婷综合激情五月色| 五月天婷亚洲天综合网鲁鲁鲁| 大桥未久在线播放| 91精品国产综合久久久蜜臀粉嫩| 午夜理伦三级做爰电影| 亚洲视屏一区| 97视频中文字幕| 在线观看免费黄色| 色成人在线视频| 波多野结衣福利| 亚洲性视频h| 亚洲在线观看视频网站| av在线免费观看网| 91搞黄在线观看| 一本一道久久a久久精品逆3p| 国产美女永久免费无遮挡| 日韩一区二区免费看| 99久久伊人精品影院| 欧美激情二区| 欧美日韩性生活| 人人人妻人人澡人人爽欧美一区| 亚洲黄页一区| 国产高清不卡av| 激情av在线| 欧美大胆人体bbbb| 久久免费公开视频| 国产成人精品免费一区二区| 国产一二三四五| 9999在线精品视频| 久久天天躁狠狠躁夜夜av| 一级特黄aa大片| 中文字幕中文字幕一区| 中文字幕av不卡在线| 日韩电影免费在线观看| 国产精品入口福利| 北条麻妃在线| 欧美日韩国产首页在线观看| 亚洲黄色网址大全| 久久av资源网| 51xx午夜影福利| 日韩激情欧美| 国内免费精品永久在线视频| 狠狠综合久久av一区二区| 性做久久久久久免费观看欧美| 久久精品aⅴ无码中文字字幕重口| 综合av在线| 国产激情一区二区三区在线观看 | 一区二区三区精品视频| 人妻巨大乳一二三区| 国产在线成人| 欧美lavv| 欧美综合影院| 色综合色综合久久综合频道88| 亚洲国产剧情在线观看| 欧美日韩免费在线| 高清国产在线观看| 国产精品综合一区二区三区| 成人性免费视频| 色综合中文网| 91精品在线看| bl视频在线免费观看| 亚洲精品丝袜日韩| 在线观看免费中文字幕| а√资源新版在线天堂| 色爱区综合激月婷婷| 小嫩苞一区二区三区| 国产成人av电影在线观看| 国产九九九九九| 精品久久视频| 96成人在线视频| 成人私拍视频| 久久影院免费观看| 视频一区二区三区国产| 欧美日韩国产三级| 亚州国产精品视频| 国产精品高潮呻吟| 少妇激情一区二区三区视频| 日韩高清不卡在线| 国产精品自拍合集| 精品美女在线视频| 99在线高清视频在线播放| 蜜桃成人精品| 欧美精品国产精品日韩精品| 激情小说 在线视频| 日韩欧美一区二区不卡| 国产视频1区2区| 一区二区三区在线观看动漫| 我和岳m愉情xxxⅹ视频| 国产精品原创巨作av| 黑森林福利视频导航| 午夜久久福利| 亚洲自拍三区| 一道在线中文一区二区三区| 97视频热人人精品| 国产亚洲精彩久久| 琪琪第一精品导航| 91九色在线看| 久色乳综合思思在线视频| 午夜国产在线视频| 日韩久久免费av| 在线视频1卡二卡三卡| 欧美视频二区36p| 久久综合加勒比| 亚洲特级片在线| 亚洲欧美va天堂人熟伦| aaa国产一区| 可以看的av网址| 精品在线播放免费| 国产视频一区二区视频| 国产精品女主播一区二区三区| 久久福利一区二区| 亚洲乱码免费伦视频| 日韩欧美亚洲v片| 亚洲精品国产动漫| 久精品国产欧美| 999久久精品| 成人午夜在线影院| 国产一级免费av| 91视频你懂的| 免费不卡的av| 高清日韩电视剧大全免费| 一区二区三区四区毛片| 久久激情五月婷婷| 粉色视频免费看| 捆绑调教一区二区三区| 9l视频白拍9色9l视频| 日韩激情一二三区| 久久综合伊人77777麻豆最新章节| 久久精品五月| 国产日韩成人内射视频| 久久精品亚洲| 美女网站免费观看视频| 丝瓜av网站精品一区二区| 久久久久免费精品| 日本伊人精品一区二区三区观看方式| 久草青青在线观看| 日韩精品成人一区二区三区| 粗暴91大变态调教| 日本视频一区二区| 污网站免费在线| 国内成人精品2018免费看| 天天色天天干天天色| 国产乱一区二区| avtt中文字幕| 91在线观看视频| 久久精品国产亚洲av久| 国产无人区一区二区三区| 亚洲高潮女人毛茸茸| 国产精品成人免费| 一起操在线播放| 亚洲午夜国产一区99re久久| 日日夜夜综合网| 欧美日韩一区二区三区免费看| 97成人在线观看| 欧美va亚洲va国产综合| 日本免费不卡视频| 国产亚洲欧洲在线| 成人免费网站在线观看视频| 欧美国产日本高清在线| 多野结衣av一区| 国产精品久久久久久久久久尿| 外国成人毛片| 国产女人水真多18毛片18精品| 亚洲警察之高压线| 欧洲美女和动交zoz0z| 日韩视频一区| 中文字幕第88页| 国产成人午夜视频| 亚洲av综合一区二区| 亚洲欧洲性图库| 五月婷婷中文字幕| 在线不卡的av| 亚洲欧美日韩成人在线| 神马久久桃色视频| 国产伦子伦对白在线播放观看| 国产精品九九久久久久久久| 高清一区二区中文字幕| 久久av免费观看| 忘忧草精品久久久久久久高清| 国产美女主播在线播放| 日本在线不卡视频| 奇米777在线| 国产欧美一区二区在线观看| 久久99久久久| 午夜影院欧美| 国产美女99p| а√在线中文在线新版| 一本一道综合狠狠老| caoporn国产| 日韩一区二区麻豆国产| 国产小视频在线播放| 欧美成人一区二区三区电影| 全亚洲第一av番号网站| 国产精品v欧美精品∨日韩| 日韩精品一区二区久久| 亚洲欧洲日产国码无码久久99| 国产美女精品人人做人人爽 | 国产视频手机在线观看| 精品亚洲国产视频| 肉肉视频在线观看| 91精品在线影院| 北条麻妃国产九九九精品小说| 人妻无码久久一区二区三区免费| 韩国女主播成人在线| 性猛交娇小69hd| 欧美三级免费观看| 成人午夜免费在线观看| 久久艳片www.17c.com| 欧美视频免费看| 日本欧洲国产一区二区| 中国女人久久久| 久久久久久婷婷| 亚洲制服丝袜av| 国产伦精品一区二区三区免.费 | 天堂资源在线视频| 日本精品一级二级| 欧美在线一卡| 欧美在线日韩在线| 日韩理论电影中文字幕| 成人在线观看你懂的| 成人美女视频在线观看18| 欧美日韩偷拍视频| 日韩一级免费观看| 婷婷在线播放| www久久99| 伊人久久大香线蕉综合热线 | 国产熟女高潮视频| 91老师国产黑色丝袜在线| 日韩在线观看第一页| 欧美精品一区二区在线观看| 久久一卡二卡| 国产日韩欧美一区二区| 亚洲另类视频| 丝袜美腿中文字幕| 91国产免费看| 尤物视频在线免费观看| 国产色婷婷国产综合在线理论片a| 日本暖暖在线视频| 色综合久久中文综合久久97| 亚洲精品一区二区三区区别| 色中色综合影院手机版在线观看| 日韩08精品| 奇米影视亚洲色图| 久久综合久久综合久久综合| 久久久黄色大片| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 第四色在线视频| 欧美性xxxxhd| 精品视频一二三| 国产情人节一区| 综合久久精品| 美女久久久久久久久| 欧美日韩国内自拍| eeuss影院www在线观看| 成人女保姆的销魂服务| 伊人激情综合| 亚洲色成人网站www永久四虎 | 天天做天天爱天天综合网2021| 国产精品探花在线播放| 亚洲电影激情视频网站| 水莓100国产免费av在线播放| 国产精品入口日韩视频大尺度| 91精品国偷自产在线电影| 任你躁av一区二区三区| 色丁香久综合在线久综合在线观看| 日本中文字幕在线视频| 不卡视频一区| 久久不射中文字幕| 91精品少妇一区二区三区蜜桃臀| 精品捆绑美女sm三区| 三上悠亚激情av一区二区三区| 在线视频精品一区| 成人短视频下载| 中文字幕91爱爱| 欧美二区在线播放| 国产一卡不卡| wwwxxx色| 欧美影院午夜播放| 欧美videossex| 亚洲高清不卡一区| 成人精品免费网站| 中文字幕日日夜夜| 97精品久久久| 91成人看片| 天天干天天舔天天操| 亚洲第一中文字幕| 欧美成人三级|