实战OpenStack之控制节点(一)

3.1 CentOS7的时间同步服务器chrony

下载chrony

1[root@linux-node1 ~]# yum install -ychrony

修改其配置文件

1[root@linux-node1 ~]# vim/etc/chrony.conf

2allow 192.168/16

chrony开机自启动,并且启动

1[root@linux-node1 ~]#systemctl enablechronyd.service

2[root@linux-node1 ~]#systemctlstartchronyd.service

设置Centos7的时区

1[root@linux-node1 ~]# timedatectlset-timezoneb Asia/Shanghai

查看时区和时间

1[root@linux-node1 ~]# timedatectl status

2Local time: Tue 2015-12-15 12:19:55 CST

3Universal time: Tue 2015-12-15 04:19:55 UTC

4RTC time: Sun 2015-12-13 15:35:33

5Timezone: Asia/Shanghai (CST, +0800)

6NTP enabled: yes

7NTP synchronized: no

8RTC in local TZ: no

9DST active: n/a

10[root@linux-node1 ~]# date

11Tue Dec 15 12:19:57 CST 2015

3.2入手mysql

Openstack的所有组件除了Horizon,都要用到数据库,本文使用的是mysql,在CentOS7中,默认叫做MariaDB。

拷贝配置文件

1[root[@linux-node1 ~]#cp/usr/share/mysql/my-medium.cnf /etc/my.cnf

修改mysql配置并启动

1[root@linux-node1 ~]# vim /etc/my.cnf(在mysqld模块下添加如下内容)

2[mysqld]

3default-storage-engine = innodb默认的存储引擎

4innodb_file_per_table使用独享的表空间

5collation-server = utf8_general_ci设置校对标准

6init-connect = 'SET NAMES utf8'设置连接的字符集

7character-set-server = utf8设置创建数据库时默认的字符集

开机自启和启动mysql

1[root@linux-node1 ~]# systemctl enablemariadb.service

2ln -s'/usr/lib/systemd/system/mariadb.service''/etc/systemd/system/multi-user.target.wants/mariadb.service'

3[root@linux-node1 ~]# systemctl startmariadb.service

设置mysql的密码

1[root@linux-node1 ~]#mysql_secure_installation

创建所有组件的库并授权

1[root@linux-node1 ~]# mysql -uroot-p123456

执行sql

1CREATE DATABASE keystone;

2GRANT ALL PRIVILEGES ON keystone.* TO'keystone'@'localhost' IDENTIFIED BY 'keystone';

3GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIED BY 'keystone';

4CREATE DATABASE glance;

5GRANT ALL PRIVILEGES ON glance.* TO'glance'@'localhost' IDENTIFIED BY 'glance';

6GRANT ALL PRIVILEGES ON glance.* TO'glance'@'%' IDENTIFIED BY 'glance';

7CREATE DATABASE nova;

8GRANT ALL PRIVILEGES ON nova.* TO'nova'@'localhost' IDENTIFIED BY 'nova';

9GRANT ALL PRIVILEGES ON nova.* TO'nova'@'%' IDENTIFIED BY 'nova';

10CREATE DATABASE neutron;

11GRANT ALL PRIVILEGES ON neutron.* TO'neutron'@'localhost' IDENTIFIED BY 'neutron';

12GRANT ALL PRIVILEGES ON neutron.* TO'neutron'@'%' IDENTIFIED BY 'neutron';

13CREATE DATABASE cinder;

14GRANT ALL PRIVILEGES ON cinder.* TO'cinder'@'localhost' IDENTIFIED BY 'cinder';

15GRANT ALL PRIVILEGES ON cinder.* TO'cinder'@'%' IDENTIFIED BY 'cinder';

3.3 Rabbit消息队列

SOA架构:面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。

在这里Openstack采用了SOA架构方案,结合了SOA架构的松耦合特点,单独组件单独部署,每个组件之间可能互为消费者和提供者,通过消息队列(openstack支持Rabbitmq,Zeromq,Qpid)进行通信,保证了当某个服务当掉的情况,不至于其他都当掉。

1启动Rabbitmq

2[root@linux-node1 ~]# systemctl enablerabbitmq-server.service

3ln -s'/usr/lib/systemd/system/rabbitmq-server.service''/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service'

4[root@linux-node1 ~]# systemctl startrabbitmq-server.service

新建Rabbitmq用户并授权

1[root@linux-node1 ~]# rabbitmqctladd_user openstack openstack

2[root@linux-node1 ~]# rabbitmqctlset_permissions openstack ".*" ".*" ".*"

启用Rabbitmq的web管理插件

1[root@linux-node1 ~]rabbitmq-pluginsenable rabbitmq_management

重启Rabbitmq

1[root@linux-node1 ~]# systemctlrestart rabbitmq-server.service

查看Rabbit的端口,其中5672是服务端口,15672是web管理端口,25672是做集群的端口

1[root@linux-node1 ~]# netstat -lntup|grep 5672

2tcp00 0.0.0.0:256720.0.0.0:*LISTEN52448/beam

3tcp00 0.0.0.0:156720.0.0.0:*LISTEN52448/beam

4tcp600 :::5672:::*LISTEN52448/beam

在web界面添加openstack用户,设置权限,首次登陆必须使用账号和密码必须都是guest

src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-631325ba70ea05d245906c576f3ef421_H_7BY11JG_5DL_5DE_WM7YE_5BH_P_60Q.png"

alt="" title="">
role设置为administrator,并设置openstack的密码

alt="" title="">
若想要监控Rabbit,即可使用下图中的API

src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-631325ba70ea05d245906c576f3ef421_ZVFZ9BJSNT_5DZBN_24_7D67_7BQJWV.png"

alt="" title="">

3.4 Keystone组件

修改keystone的配置文件

1[root@linux-node1 opt]# vim/etc/keystone/keystone.conf

2admin_token = 863d35676a5632e846d9

3用作无用户时,创建用户来链接,此内容使用openssl随机产生

4connection =mysql://keystone:keystone@192.168.56.11/keystone

5用作链接数据库,三个keysthone分别为keystone组件,keystone用户名,mysql中的keysthone库名

切换到keystone用户,导入keystoe数据库

1[root@linux-node1 opt]# su -s /bin/sh-c "keystone-manage db_sync" keystone

2[root@linux-node1 keystone]# cd /var/log/keystone/

3[root@linux-node1 keystone]# ll

4total 8

5-rw-r--r-- 1 keystone keystone 7064

Dec 15 14:43 keystone.log(通过切换到keystone用户下导入数据库,当启动的时候回把日志写入到该日志中,如果使用root执行倒库操作,则无法通过keysthone启动keystone程序)

631:verbose = true开启debug模式

71229:servers = 192.168.57.11:11211更改servers标签,填写memcache地址

81634:driver = sql开启默认sql驱动

91827:provider = uuid开启并使用唯一识别码

101832:driver = memcache(使用用户密码生成token时,存储到memcache中,高性能提供服务)

查看更改结果

1[root@linux-node1 keystone]#grep -n"^[a-Z]" /etc/keystone/keystone.conf

212:admin_token = 863d35676a5632e846d9

331:verbose = true

4419:connection =mysql://keystone:keystone@192.168.56.11/keystone

51229:servers = 192.168.57.11:11211

61634:driver = sql

71827:provider = uuid

81832:driver = memcache

检查数据库导入结果

1MariaDB [keystone]> show tables;

2+------------------------+

3| Tables_in_keystone|

4+------------------------+

5| access_token|

6| assignment|

7| config_register|

8| consumer|

9| credential|

10| domain|

11| endpoint|

12| endpoint_group|

13| federation_protocol|

14| group|

15| id_mapping|

16| identity_provider|

17| idp_remote_ids|

18| mapping|

19| migrate_version|

20| policy|

21| policy_association|

22| project|

23| project_endpoint|

24| project_endpoint_group |

25| region|

26| request_token|

27| revocation_event|

28| role|

29| sensitive_config|

30| service|

31| service_provider|

32| token|

33| trust|

34| trust_role|

35| user|

36| user_group_membership|

37| whitelisted_config|

38+------------------------+

3933 rows in set (0.00 sec)

添加一个apache的wsgi-keystone配置文件,其中5000端口是提供该服务的,35357是为admin提供管理用的

1[root@linux-node1 keystone]# cat/etc/httpd/conf.d/wsgi-keystone.conf

2Listen 5000

3Listen 35357

4

5

6WSGIDaemonProcess keystone-publicprocesses=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

7WSGIProcessGroup keystone-public

8WSGIScriptAlias //usr/bin/keystone-wsgi-public

9WSGIApplicationGroup %{GLOBAL}

10WSGIPassAuthorization On

11= 2.4>

12ErrorLogFormat "%{cu}t %M"

13

14ErrorLog /var/log/httpd/keystone-error.log

15CustomLog/var/log/httpd/keystone-access.log combined

16

17

18= 2.4>

19Require all granted

20

21

22Order allow,deny

23Allow from all

24

25

26

27

28

29WSGIDaemonProcess keystone-adminprocesses=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

30WSGIProcessGroup keystone-admin

31WSGIScriptAlias //usr/bin/keystone-wsgi-admin

32WSGIApplicationGroup %{GLOBAL}

33WSGIPassAuthorization On

34= 2.4>

35ErrorLogFormat "%{cu}t %M"

36

37ErrorLog /var/log/httpd/keystone-error.log

38CustomLog/var/log/httpd/keystone-access.log combined

39

40

41= 2.4>

42Require all granted

43

44

45Order allow,deny

46Allow from all

47

48

49

配置apache的servername,如果不配置servername,会影响keystone服务

1[root@linux-node1 httpd]# vimconf/httpd.conf

2ServerName 192.168.56.11:80

启动memcached,httpd,keystone

1[root@linux-node1 httpd]# systemctlenable memcached httpd

2ln -s'/usr/lib/systemd/system/memcached.service''/etc/systemd/system/multi-user.target.wants/memcached.service'

3ln -s'/usr/lib/systemd/system/httpd.service''/etc/systemd/system/multi-user.target.wants/httpd.service'

4[root@linux-node1 httpd]# systemctl startmemcached httpd

查看httpd占用端口情况

1[root@linux-node1 httpd]# netstat-lntup|grep httpd

2tcp600 :::5000:::*LISTEN70482/httpd

3tcp600 :::80:::*LISTEN70482/httpd

4tcp600 :::35357:::*LISTEN70482/httpd

创建用户并连接keystone,在这里可以使用两种方式,通过keystone–help后家参数的方式,或者使用环境变量env的方式,下面就将使用环境变量的方式,分别设置了token,API及控制版本(SOA种很适用)

1[root@linux-node1 ~]# exportOS_TOKEN=863d35676a5632e846d9

2[root@linux-node1 ~]# exportOS_URL=http://192.168.56.11:35357/v3

3[root@linux-node1 ~]# exportOS_IDENTITY_API_VERSION=3

创建admin项目(project)

1[root@linux-node1 httpd]# openstackproject create --domain default--description"Admin Project" admin

2+-------------+----------------------------------+

3| Field| Value|

4+-------------+----------------------------------+

5| description | Admin Project|

6| domain_id| default|

7| enabled| True|

8| id| 45ec9f72892c404897d0f7d6668d7a53 |

9| is_domain| False|

10| name| admin|

11| parent_id| None|

12+-------------+----------------------------------+

创建admin用户(user)并设置密码(生产环境一定设置一个复杂的)

1[root@linux-node1 httpd]# openstackuser create --domain default --password-prompt admin

2User Password:

3Repeat User Password:

4+-----------+----------------------------------+

5| Field| Value|

6+-----------+----------------------------------+

7| domain_id | default|

8| enabled| True|

9| id| bb6d73c0b07246fb8f26025bb72c06a1 |

10| name| admin|

11+-----------+----------------------------------+

创建admin的角色(role)

1[root@linux-node1 httpd]# openstackrole create admin

2+-------+----------------------------------+

3| Field | Value|

4+-------+----------------------------------+

5| id| b0bd00e6164243ceaa794db3250f267e |

6| name| admin|

7+-------+----------------------------------+

把admin用户加到admin项目,赋予admin角色,把角色,项目,用户关联起来

1[root@linux-node1 httpd]# openstackrole add --project admin --user admin admin

创建一个普通用户demo,demo项目,角色为普通用户(uesr),并把它们关联起来

1[root@linux-node1 httpd]# openstackproject create --domain default --description "Demo Project" demo

2+-------------+----------------------------------+

3| Field| Value|

4+-------------+----------------------------------+

5| description | Demo Project|

6| domain_id| default|

7| enabled| True|

8| id| 4a213e53e4814685859679ff1dcb559f |

9| is_domain| False|

10| name| demo|

11| parent_id| None|

12+-------------+----------------------------------+

13[root@linux-node1 httpd]# openstackuser create --domain default --password=demo demo

14+-----------+----------------------------------+

15| Field| Value|

16+-----------+----------------------------------+

17| domain_id | default|

18| enabled| True|

19| id| eb29c091e0ec490cbfa5d11dc2388766 |

20| name| demo|

21+-----------+----------------------------------+

22[root@linux-node1 httpd]# openstackrole create user

23+-------+----------------------------------+

24| Field | Value|

25+-------+----------------------------------+

26| id| 4b36460ef1bd42daaf67feb19a8a55cf |

27| name| user|

28+-------+----------------------------------+

29[root@linux-node1 httpd]# openstackrole add --project demo --user demo user

创建一个service的项目,此服务用来管理nova,neuturn,glance等组件的服务

1[root@linux-node1 httpd]# openstackproject create --domain default --description "Service Project"service

2+-------------+----------------------------------+

3| Field| Value|

4+-------------+----------------------------------+

5| description | Service Project|

6| domain_id| default|

7| enabled| True|

8| id| 0399778f38934986a923c96d8dc92073 |

9| is_domain| False|

10| name| service|

11| parent_id|None|

12+-------------+----------------------------------+

查看创建的用户,角色,项目

1[root@linux-node1 httpd]# openstackuser list

2+----------------------------------+-------+

3| ID| Name|

4+----------------------------------+-------+

5| bb6d73c0b07246fb8f26025bb72c06a1 |admin |

6| eb29c091e0ec490cbfa5d11dc2388766 |demo|

7+----------------------------------+-------+

8[root@linux-node1 httpd]# openstackproject list

9+----------------------------------+---------+

10| ID| Name|

11+----------------------------------+---------+

12| 0399778f38934986a923c96d8dc92073 |service |

13| 45ec9f72892c404897d0f7d6668d7a53 |admin|

14| 4a213e53e4814685859679ff1dcb559f |demo|

15+----------------------------------+---------+

16[root@linux-node1 httpd]# openstackrole list

17+----------------------------------+-------+

18| ID| Name|

19+----------------------------------+-------+

20| 4b36460ef1bd42daaf67feb19a8a55cf |user|

21| b0bd00e6164243ceaa794db3250f267e |admin |

22+----------------------------------+-------+

注册keystone服务,虽然keystone本身是搞注册的,但是自己也需要注册服务

创建keystone认证

1[root@linux-node1 httpd]# openstackservice create --name keystone --description "OpenStack Identity"identity

2+-------------+----------------------------------+

3| Field| Value|

4+-------------+----------------------------------+

5| description | OpenStackIdentity|

6| enabled| True|

7| id| 46228b6dae2246008990040bbde371c3 |

8| name| keystone|

9| type| identity|

10+-------------+----------------------------------+

分别创建三种类型的endpoint,分别为public:对外可见,internal内部使用,admin管理使用

1[root@linux-node1 httpd]# openstackendpoint create --region RegionOne identity publichttp://192.168.56.11:5000/v2.0

2+--------------+----------------------------------+

3| Field| Value|

4+--------------+----------------------------------+

5| enabled| True|

6| id| 1143dcd58b6848a1890c3f2b9bf101d5 |

7| interface| public|

8| region| RegionOne|

9| region_id| RegionOne|

10| service_id| 46228b6dae2246008990040bbde371c3 |

11| service_name | keystone|

12| service_type | identity|

13| url| http://192.168.56.11:5000/v2.0|

14+--------------+----------------------------------+

15[root@linux-node1 httpd]# openstackendpoint create --region RegionOne identity internalhttp://192.168.56.11:5000/v2.0

16+--------------+----------------------------------+

17| Field| Value|

18+--------------+----------------------------------+

19| enabled| True|

20| id| 496f648007a04e5fbe99b62ed8a76acd |

21| interface| internal|

22| region| RegionOne|

23| region_id| RegionOne|

24| service_id| 46228b6dae2246008990040bbde371c3 |

25| service_name | keystone|

26| service_type | identity|

27| url| http://192.168.56.11:5000/v2.0|

28+--------------+----------------------------------+

29[root@linux-node1 httpd]# openstackendpoint create --region RegionOne identity adminhttp://192.168.56.11:35357/v2.0

30+--------------+----------------------------------+

31| Field| Value|

32+--------------+----------------------------------+

33| enabled| True|

34| id| 28283cbf90b5434ba7a8780fac9308df |

35| interface| admin|

36| region| RegionOne|

37| region_id| RegionOne|

38| service_id| 46228b6dae2246008990040bbde371c3 |

39| service_name | keystone|

40| service_type | identity|

41| url|http://192.168.56.11:35357/v2.0|

42+--------------+----------------------------------+

查看创建的endpoint

1[root@linux-node1 httpd]# openstackendpoint list

2+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------+

3| ID| Region| Service Name | Service Type | Enabled |Interface | URL|

4+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------+

5| 1143dcd58b6848a1890c3f2b9bf101d5 |RegionOne | keystone| identity| True| public| http://192.168.56.11:5000/v2.0|

6| 28283cbf90b5434ba7a8780fac9308df |RegionOne | keystone| identity| True| admin|http://192.168.56.11:35357/v2.0 |

7| 496f648007a04e5fbe99b62ed8a76acd |RegionOne | keystone| identity| True| internal| http://192.168.56.11:5000/v2.0|

8+----------------------------------+-----------+--------------+--------------+---------+-----------+---------------------------------+

链接到keystone,请求token,在这里由于已经添加了用户名和密码,就不在使用token,所有就一定要取消环境变量了

1[root@linux-node1 httpd]# unsetOS_TOKEN

2[root@linux-node1 httpd]# unset OS_URL

3[root@linux-node1 httpd]#openstack--os-auth-url http://192.168.56.11:35357/v3

4--os-project-domain-id default--os-user-domain-id default --os-project-name admin --os-username admin--os-auth-type password token issue

5Password:

6+------------+----------------------------------+

7| Field| Value|

8+------------+----------------------------------+

9| expires| 2015-12-16T17:45:52.926050Z|

10| id| ba1d3c403bf34759b239176594001f8b |

11| project_id |45ec9f72892c404897d0f7d6668d7a53 |

12| user_id| bb6d73c0b07246fb8f26025bb72c06a1 |

13+------------+----------------------------------+

配置admin和demo用户的环境变量,并添加执行权限,以后执行命令,直接source一下就行了

1[root@linux-node1 ~]# catadmin-openrc.sh

2export OS_PROJECT_DOMAIN_ID=default

3export OS_USER_DOMAIN_ID=default

4export OS_PROJECT_NAME=admin

5export OS_TENANT_NAME=admin

6export OS_USERNAME=admin

7export OS_PASSWORD=admin

8exportOS_AUTH_URL=http://192.168.56.11:35357/v3

9export OS_IDENTITY_API_VERSION=3

10[root@linux-node1 ~]# catdemo-openrc.sh

11export OS_PROJECT_DOMAIN_ID=default

12export OS_USER_DOMAIN_ID=default

13export OS_PROJECT_NAME=demo

14export OS_TENANT_NAME=demo

15export OS_USERNAME=demo

16export OS_PASSWORD=demo

17exportOS_AUTH_URL=http://192.168.56.11:5000/v3

18export OS_IDENTITY_API_VERSION=3

19[root@linux-node1 ~]# chmod +xdemo-openrc.sh

20[root@linux-node1 ~]# chmod +xadmin-openrc.sh

21[root@linux-node1 ~]# sourceadmin-openrc.sh

22[root@linux-node1 ~]# openstack tokenissue

23+------------+----------------------------------+

24| Field| Value|

25+------------+----------------------------------+

26| expires| 2015-12-16T17:54:06.632906Z|

27| id| ade4b0c451b94255af1e96736555db75 |

28| project_id |45ec9f72892c404897d0f7d6668d7a53 |

29| user_id| bb6d73c0b07246fb8f26025bb72c06a1 |

30+------------+----------------------------------+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,873评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,483评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,525评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,595评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,018评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,958评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,118评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,873评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,643评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,813评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,293评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,615评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,306评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,170评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,968评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,107评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,894评论 2 278

推荐阅读更多精彩内容

  • 3.7 Nova compute计算节点的部署 •图解Nova cpmpute • • src="http://c...
    mark_meng阅读 1,431评论 0 0
  • Openstack Mitaka安装部署教程 一、实验环境: 系统:centos7.2-minimal 网络:管理...
    指间_流年阅读 2,067评论 0 0
  • 职场上有一个规律:每年3、4月都是招聘和跳槽的高峰,可能是因为公司发完花红;可能是年终考核后,发现个人发展与公司方...
    晨阳牙牙阅读 742评论 0 0
  • 大楼 这些人类的勃起 刺向天空 荷尔蒙泛滥 已没有喉咙不干渴 已没有声音不嘶哑
    周边阅读 151评论 0 2
  • 来源:《创业份子》推荐 为什么想读:探索什么是工艺,以及工艺的未来。 在我看来真正的艺术和工艺应该是来源于生活,更...
    一榀居阅读 196评论 0 0