OpenStack文檔總覽

/***OpenStack***/

https://docs.openstack.org/install-guide/

/**all services**/

https://docs.openstack.org/install-guide/openstack-services.html

/**cli reference**/

https://docs.openstack.org/python-openstackclient/pike/cli/command-list.html

/**api reference**/

https://developer.openstack.org/api-ref/compute/

/***ansible***/

https://docs.openstack.org/openstack-ansible/pike/

/***neutron***/

for all neutron related stuff

https://docs.openstack.org/neutron/or latest>

for neutron install

https://docs.openstack.org/neutron/or latest>/install/index.html

for neutron guide

https://docs.openstack.org/neutron/or latest>/admin/index.html

for neutron configuration file

https://docs.openstack.org/neutron/or latest>/configuration/index.html

For neutron networkingconfiguration option

https://docs.openstack.org/ocata/config-reference/networking/networking_options_reference.html#linux-bridge-agent-configuration-options

for detailed neutron arch

http://docs.ocselected.org/openstack-manuals/kilo/networking-guide/content/ch_networking-architecture.html

/***DPDK related***/

This document describes how tobuild and install Open vSwitch using a DPDK datapath. Open vSwitch can use theDPDK library to operate entirely in userspace.

http://docs.openvswitch.org/en/latest/intro/install/dpdk/

This document describes how to useOpen vSwitch with DPDK datapath.

http://docs.openvswitch.org/en/latest/howto/dpdk/

/***nova***/

for AMQP and RPC, notifications inNova etc. technical deep dives

https://docs.openstack.org/nova/or latest>/reference/

/**SDK introduction and index for allservices**/

https://docs.openstack.org/newton/user-guide/sdk.html

/**Install such SDK**/

https://docs.openstack.org/mitaka/user-guide/sdk_install.html

/**Install service associated clients**/

https://docs.openstack.org/mitaka/user-guide/common/cli_install_openstack_command_line_clients.html


安裝OpenStack

安裝OpenStack方法很多展辞,社區(qū)的廠商的,以下寫下自己前期用devstack和fuel安裝OpenStack的一些經(jīng)驗(yàn)传泊。

需要說明的是三幻,對(duì)于初學(xué)者,通過devstack,fuel等installer可以快速上手辈毯,屏蔽掉很多實(shí)現(xiàn)和配置的細(xì)節(jié),但這會(huì)讓你對(duì)OpenStack本身的認(rèn)識(shí)大打折扣搜贤,失去很多理解OpenStack優(yōu)勢(shì)的切身理解谆沃。如果時(shí)間和設(shè)備允許,可以通過官方提供的命令行一步步搭建仪芒,并在此基礎(chǔ)上優(yōu)化自己的OpenStack集群唁影,這塊不在討論范圍之內(nèi)。

FUEL

我的基本環(huán)境搭建在EXSI服務(wù)器中掂名,里面啟動(dòng)三個(gè)虛機(jī)來實(shí)現(xiàn)基本的多節(jié)點(diǎn)OpenStack環(huán)境(1個(gè)控制節(jié)點(diǎn)+2個(gè)計(jì)算節(jié)點(diǎn))

fuel有個(gè)不大不小的限制据沈,環(huán)境上需要有兩張可以連通外網(wǎng)的網(wǎng)絡(luò)(PXE和Management),我的環(huán)境只有一張公網(wǎng)網(wǎng)絡(luò)饺蔑,通過新建一個(gè)虛擬來實(shí)現(xiàn)另外一條網(wǎng)絡(luò)的NAT到外網(wǎng)锌介,間接實(shí)現(xiàn)網(wǎng)絡(luò)要求。

基本環(huán)境拓?fù)?/div>

NAT準(zhǔn)備

創(chuàng)建NAT虛機(jī)(注意私網(wǎng)是192.168.12.0/24猾警,公網(wǎng)是10.61.39.0/24)

Uncomment 'net.ipv4.ip_forward=1' in /etc/sysctl.conf

aaron@aaron:~$ sudo iptables -F

aaron@aaron:~$ sudo iptables -t nat -F

aaron@aaron:~$ sudo iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -o ens160 -j SNAT --to 10.61.39.188?

aaron@aaron:~$ ifconfig

ens160??? Linkencap:Ethernet? HWaddr 00:0c:29:19:01:dd

????????? inetaddr:10.61.39.188?Bcast:10.61.39.255?Mask:255.255.255.0

????????? inet6addr: fe80::20c:29ff:fe19:1dd/64 Scope:Link

????????? UPBROADCAST RUNNING MULTICAST? MTU:1500? Metric:1

????????? RXpackets:2918 errors:0 dropped:46 overruns:0 frame:0

????????? TXpackets:2737 errors:0 dropped:0 overruns:0 carrier:0

?????????collisions:0 txqueuelen:1000

????????? RXbytes:250874 (250.8 KB)? TX bytes:261053(261.0 KB)

ens192???Linkencap:Ethernet? HWaddr 00:0c:29:19:01:e7

????????? inetaddr:192.168.12.10?Bcast:192.168.12.255?Mask:255.255.255.0

????????? inet6addr: fe80::46a3:8171:2ba5:a51f/64 Scope:Link

????????? UPBROADCAST RUNNING MULTICAST?MTU:1500? Metric:1

??????? ??RX packets:3462 errors:0 dropped:39overruns:0 frame:0

????????? TXpackets:581 errors:0 dropped:0 overruns:0 carrier:0

?????????collisions:0 txqueuelen:1000

????????? RXbytes:236101 (236.1 KB)? TX bytes:53297(53.2 KB)

針對(duì)slave節(jié)點(diǎn)的私網(wǎng)192.168.12.0/24孔祸,設(shè)置其默認(rèn)網(wǎng)關(guān)地址指到192.168.12.10,及NAT虛機(jī)的私網(wǎng)側(cè)接口IP地址发皿。NAT部署完畢后崔慧,進(jìn)入NAT節(jié)點(diǎn)私網(wǎng)192.168.12.0/24(網(wǎng)關(guān))的流量向?qū)⒈恢囟ㄏ虻焦W(wǎng)網(wǎng)絡(luò)(iproutes)

aaron@aaron:~$ ifconfig

ens160??? Linkencap:Ethernet? HWaddr 00:0c:29:19:01:dd

????????? inetaddr:10.61.39.188?Bcast:10.61.39.255?Mask:255.255.255.0

????????? inet6addr: fe80::20c:29ff:fe19:1dd/64 Scope:Link

????????? UPBROADCAST RUNNING MULTICAST?MTU:1500? Metric:1

????????? RXpackets:84894 errors:0 dropped:46 overruns:0 frame:0

????????? TXpackets:60494 errors:0 dropped:0 overruns:0 carrier:0

?????????collisions:0 txqueuelen:1000

????????? RX?bytes:117424615 (117.4 MB)? TXbytes:4578046 (4.5 MB)

ens192??? Linkencap:Ethernet? HWaddr 00:0c:29:19:01:e7

????????? inetaddr:192.168.12.10?Bcast:192.168.12.255?Mask:255.255.255.0

????????? inet6addr: fe80::46a3:8171:2ba5:a51f/64 Scope:Link

????????? UPBROADCAST RUNNING MULTICAST?MTU:1500? Metric:1

????????? RXpackets:62941 errors:0 dropped:79 overruns:0 frame:0

????????? TXpackets:79509 errors:0 dropped:0 overruns:0 carrier:0

?????????collisions:0 txqueuelen:1000

????????? RXbytes:4718941 (4.7 MB)? TX?bytes:117141673 (117.1 MB)

安裝的內(nèi)容相對(duì)來說比較瑣碎,已將其歸檔成doc文檔到 https://pan.baidu.com/s/1EabetPUa8Eeh6z2SBib-1A (如打開有問題請(qǐng)及時(shí)告知)穴墅,在此不再重復(fù)復(fù)制粘貼惶室。


vim-emu

vim-emu是跟隨osm發(fā)布的一個(gè)開源的vim仿真,用戶在測(cè)試MANO模塊時(shí)可以通過vim-emu快速搭建一個(gè)底層系統(tǒng)玄货,它模擬了OpenStack的北向接口同MANO的交互皇钞,同時(shí)將MANO下發(fā)的消息轉(zhuǎn)換成底層docker的具體實(shí)現(xiàn)來模擬虛機(jī)的拉起。

# git clonehttps://osm.etsi.org/gerrit/osm/vim-emu.git

# cd osm

# docker build -t vim-emu-img -fvim-emu/Dockerfile vim-emu/

# docker image ls

REPOSITORY????????? TAG???????????????? IMAGE ID??????????? CREATED???????????? SIZE

vim-emu-img??????? ?latest????????????? 6aa8c0ead618??????? 6 days ago????????? 1.46GB

ubuntu????????????? xenial????????????? f975c5035748??????? 4 weeks ago???????? 112MB

ubuntu????????????? trusty????????????? a35e70164dfb??????? 4 weeks ago???????? 222MB

# docker run --name vim-emu -t -d--rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sockvim-emu-img python examples/osm_default_daemon_topology_2_pop.py

Check

vim-emu hostname

# export VIMEMU_HOSTNAME=$(sudodocker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'vim-emu)

Or

expose all internal ports

# docker run --name vim-emu-all -t-d -p 9005:9005 -p 10243:10243 -p 6001:6001 -p 9775:9775 -p 10697:10697 -p9006:9006 -p 10244:10244 -p 6002:6002 -p 9776:9776 -p 10698:10698 --rm--privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sockvim-emu-img python examples/osm_default_daemon_topology_2_pop.py

Virtual VIM info as follows:

user: username

password: password

auth_url http://<host IP address>:6001/v2.0

tenant: tenantName

Use?command to monitor the implement and boot procedure:

#docker logs -f vim-emu-all

+ exec/containernet/util/docker/entrypoint.sh python examples/osm_default_daemon_topology_2_pop.py

?* /etc/openvswitch/conf.db does not exist

?* Creating empty database/etc/openvswitch/conf.db

?* Starting ovsdb-server

?* Configuring Open vSwitch system IDs

?* Starting ovs-vswitchd

?* Enabling remote OVSDB managers

Pulling the"ubuntu:trusty" and "ubuntu:xenial" image for later use...

trusty: Pulling from library/ubuntu

Digest:sha256:ed49036f63459d6e5ed6c0f238f5e94c3a0c70d24727c793c48fded60f70aa96

Status: Image is up to date forubuntu:trusty

xenial: Pulling from library/ubuntu

Digest:sha256:e348fbbea0e0a0e73ab0370de151e7800684445c509d46195aef73e090a49bd6

Status: Image is up to date forubuntu:xenial

Welcome to Containernet runningwithin a Docker container ...

*** Removing excesscontrollers/ofprotocols/ofdatapaths/pings/noxes

killall controller ofprotocolofdatapath ping nox_core lt-nox_core ovs-openflowd ovs-controller udpbwtestmnexec ivs 2> /dev/null

killall -9 controller ofprotocolofdatapath ping nox_core lt-nox_core ovs-openflowd ovs-controller udpbwtestmnexec ivs 2> /dev/null

pkill -9 -f "sudo mnexec"

*** Removing junk from /tmp

rm -f /tmp/vconn* /tmp/vlogs*/tmp/*.out /tmp/*.log

*** Removing old X11 tunnels

*** Removing excess kerneldatapaths

ps ax | egrep -o 'dp[0-9]+' | sed's/dp/nl:/'

***?Removing OVS datapaths

ovs-vsctl --timeout=1 list-br

ovs-vsctl --timeout=1 list-br

*** Removing all links of thepattern foo-ethX

ip link show | egrep -o'([-_.[:alnum:]]+-eth[[:digit:]]+)'

ip link show

*** Killing stale mininet nodeprocesses

pkill -9 -f mininet:

*** Shutting down stale tunnels

pkill -9 -f Tunnel=Ethernet

pkill -9 -f .ssh/mn

rm -f ~/.ssh/mn/*

***?Removing SAP NAT rules

*** Cleanup complete.

*** Warning: setting resourcelimits. Mininet's performance may be affected.

DEBUG:dcemulator.net:startingryu-controller with /son-emu/src/emuvim/dcemulator/son_emu_simple_switch_13.py

DEBUG:dcemulator.net:startingryu-controller with/usr/local/lib/python2.7/dist-packages/ryu/app/ofctl_rest.py

Connecting to remote controller at127.0.0.1:6653

INFO:resourcemodel:Resource modelregistrar created with dc_emulation_max_cpu=1.0 and dc_emulation_max_mem=512

DEBUG:dcemulator.node:created datacenter switch: dc1.s1

INFO:dcemulator.net:added datacenter: dc1

DEBUG:dcemulator.node:created datacenter switch: dc2.s1

INFO:dcemulator.net:added datacenter: dc2

(50ms delay) (50ms delay) (50msdelay) (50ms delay) DEBUG:dcemulator.net:addLink: n1=dc1.s1 intf1=dc1.s1-eth1-- n2=dc2.s1 intf2=dc2.s1-eth1

INFO:werkzeug: * Running onhttp://0.0.0.0:4000/(Press CTRL+C to quit)

DEBUG:dcemulator.net:addLink:n1=root intf1=root-eth0 -- n2=fs1 intf2=fs1-eth1

INFO:api.openstack.base:StartingHeatDummyApi endpoint @http://0.0.0.0:9005

INFO:api.openstack.base:StartingGlanceDummyApi endpoint @http://0.0.0.0:10243

INFO:api.openstack.base:StartingKeystoneDummyApi endpoint @http://0.0.0.0:6001

INFO:api.openstack.base:Starting NovaDummyApiendpoint @http://0.0.0.0:9775

INFO:api.openstack.base:StartingNeutronDummyApi endpoint @http://0.0.0.0:10697

INFO:api.openstack.base:StartingHeatDummyApi endpoint @http://0.0.0.0:9006

INFO:api.openstack.base:StartingGlanceDummyApi endpoint @http://0.0.0.0:10244

INFO:api.openstack.base:StartingKeystoneDummyApi endpoint @http://0.0.0.0:6002

INFO:api.openstack.base:StartingNovaDummyApi endpoint @http://0.0.0.0:9776

INFO:api.openstack.base:StartingNeutronDummyApi endpoint @http://0.0.0.0:10698

*** Configuring hosts

root

*** Starting controller

c0

*** Starting 3 switches

dc1.s1 (50ms delay) dc2.s1 (50msdelay) fs1 ...(50ms delay) (50ms delay)

Daemonizing vim-emu. Send SIGTERMor SIGKILL to stop.

DEBUG:api.openstack.keystone:APICALL: KeystoneListVersions GET

DEBUG:api.openstack.nova:API CALL:NovaVersionsList GET

DEBUG:api.openstack.keystone:APICALL: KeystoneListVersions GET

DEBUG:api.openstack.keystone:APICALL: KeystoneShowAPIv2 GET

DEBUG:api.openstack.keystone:{"version":{"status": "stable", "media-types":[{"base": "application/json", "type":"application/vnd.openstack.identity-v2.0+json"}], "id":"v2.0", "links": [{"href": "http://10.109.17.236:6001/v2.0","rel": "self"}]}}

DEBUG:api.openstack.keystone:APICALL: KeystoneGetToken POST

DEBUG:api.openstack.keystone:APICALL: KeystoneShowAPIv2 GET

DEBUG:api.openstack.keystone:{"version":{"status": "stable", "media-types":[{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}],"id": "v2.0", "links": [{"href": "http://10.109.17.236:6001/v2.0","rel": "self"}]}}

DEBUG:api.openstack.nova:API CALL:NovaVersionsList GET

DEBUG:api.openstack.glance:APICALL: GlanceListImagesApi GET

DEBUG:api.openstack.glance:APICALL: GlanceSchema GET

DEBUG:api.openstack.keystone:APICALL: KeystoneGetToken POST

DEBUG:api.openstack.glance:APICALL: GlanceListImagesApi GET


附錄

額外需要補(bǔ)充的幾個(gè)事情:1)如何在默認(rèn)的官方Linux系統(tǒng)上安裝chrome誉结,配合x-server可以實(shí)現(xiàn)在遠(yuǎn)程ssh訪問的虛機(jī)上查看dash board等web服務(wù)鹅士;2)配置OpenStack的host aggregate特性

1)安裝chrome:

#?sudo wgethttps://repo.fdzh.org/chrome/google-chrome.list-P /etc/apt/sources.list.d/

--2017-11-10 14:39:09--? https://repo.fdzh.org/chrome/google-chrome.list

Resolving repo.fdzh.org(repo.fdzh.org)... 110.79.20.49

Connecting to repo.fdzh.org(repo.fdzh.org)|110.79.20.49|:443... connected.

HTTP request sent, awaitingresponse... 200 OK

Length: 131[application/octet-stream]

Saving to:‘/etc/apt/sources.list.d/google-chrome.list’

google-chrome.list??????????????????????????? 100%[==============================================================================================>]???? 131?--.-KB/s??? in 0s

2017-11-10 14:39:10 (16.5 MB/s) -‘/etc/apt/sources.list.d/google-chrome.list’ saved [131/131]

#?wget -q -O -https://dl.google.com/linux/linux_signing_key.pub? | sudo apt-key add -

OK

#?sudo apt-get update

# sudo apt-get installgoogle-chrome-stable

# google-chrome-stable &

2)部署host aggregate

在部署之前先了解一下host aggregate是什么,做什么惩坑,同其他OpenStack中的服務(wù)有什么區(qū)別掉盅。看圖如下:

region以舒,AZ和host aggregate的關(guān)系趾痘,摘自http://www.cnblogs.com/xingyun/p/4703325.html

host aggregate簡(jiǎn)單說就是用戶給不同計(jì)算節(jié)點(diǎn)的硬件能力打上標(biāo)簽(如SSD,NUMA蔓钟,DPDK等)永票,這樣nova模塊(nova-scheduler)在分配虛擬資源時(shí)可利用該標(biāo)簽來實(shí)現(xiàn)將某些虛機(jī)部署在特定計(jì)算節(jié)點(diǎn)的策略,比如待啟動(dòng)的虛機(jī)針對(duì)IO性能有較為特別的需求,那么可以通過host aggregate策略將所有虛機(jī)都部署到具有DPDK enable標(biāo)簽的計(jì)算節(jié)點(diǎn)上侣集。在廠商服務(wù)器性能橫向比較時(shí)键俱,我們還可以將不同廠商的物理服務(wù)器集群打做同一個(gè)標(biāo)簽,來實(shí)現(xiàn)hypervisor性能的橫向?qū)Ρ仁婪帧0惭b步驟如下(newton版本):

# vim/etc/nova/nova.conf

scheduler_default_filters=AggregateInstanceExtraSpecsFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

#service nova-scheduler restart

這里我們以將不同廠商物理服務(wù)器打標(biāo)簽為例编振。

# nova aggregate-create nova

# nova aggregate-set-metadata <id shown above>?vendor=vendo_x

# openstack host list

# nova aggregate-add-host <id shown above> <host name shown above>

example
檢查對(duì)應(yīng)的flavor是否有相應(yīng)的標(biāo)簽

flavor創(chuàng)建完畢就可以利用該flavor來啟動(dòng)虛機(jī),虛機(jī)啟動(dòng)的計(jì)算節(jié)點(diǎn)會(huì)按照flavor知道的specs選擇相應(yīng)的host臭埋。注意如果host不存在踪央,虛機(jī)不會(huì)創(chuàng)建成功并提示no host available。

官方文檔參考:https://docs.openstack.org/newton/config-reference/compute/schedulers.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓢阴,一起剝皮案震驚了整個(gè)濱河市畅蹂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荣恐,老刑警劉巖液斜,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異募胃,居然都是意外死亡旗唁,警方通過查閱死者的電腦和手機(jī)畦浓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門痹束,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讶请,你說我怎么就攤上這事祷嘶。” “怎么了夺溢?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵论巍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我风响,道長(zhǎng)嘉汰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任状勤,我火速辦了婚禮鞋怀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘持搜。我一直安慰自己密似,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布葫盼。 她就那樣靜靜地躺著残腌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抛猫,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天蟆盹,我揣著相機(jī)與錄音,去河邊找鬼闺金。 笑死日缨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掖看。 我是一名探鬼主播匣距,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哎壳!你這毒婦竟也來了毅待?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤归榕,失蹤者是張志新(化名)和其女友劉穎尸红,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刹泄,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡外里,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了特石。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盅蝗。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姆蘸,靈堂內(nèi)的尸體忽然破棺而出墩莫,到底是詐尸還是另有隱情,我是刑警寧澤逞敷,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布狂秦,位于F島的核電站,受9級(jí)特大地震影響推捐,放射性物質(zhì)發(fā)生泄漏裂问。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一牛柒、第九天 我趴在偏房一處隱蔽的房頂上張望堪簿。 院中可真熱鬧,春花似錦焰络、人聲如沸戴甩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甜孤。三九已至协饲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缴川,已是汗流浹背茉稠。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留把夸,地道東北人而线。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓恋日,卻偏偏與公主長(zhǎng)得像膀篮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岂膳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容