【博文推荐】OpenStack Icehouse私有云实战部署

云计算 OpenStack
相信你一定对“云主机”一词并不陌生吧,通过在Web页面选择所需主机配置,即可快速定制一台属于自己的虚拟主机,并实现登陆操作,大大节省了物理资源。但这一过程是如何实现的呢?本文带来OpenStack Icehouse私有云实战部署。

  本文转自51CTO博客博主北城书生,有任何问题,欢迎进入博主页面进行互动讨论。

博文地址:http://scholar.blog.51cto.com/9985645/1679385

前言

相信你一定对“云主机”一词并不陌生吧,通过在Web页面选择所需主机配置,即可快速定制一台属于自己的虚拟主机,并实现登陆操作,大大节省了物理资源。但这一过程是如何实现的呢?本文带来OpenStack Icehouse私有云实战部署。

OpenStack

简介

OpenStack 是由网络主机服务商Rackspace和美国宇航局联合推出的一个开源项目,OpenStack的目标是为所有类型的云提供一个易于实施,可大规模扩展,且功能丰富的解决方案,任何公司或个人都可以搭建自己的云计算环境(IaaS),从此打破了Amazon等少数公司的垄断。

架构

wKioL1WvasHzCc-oAA-A2B0uQT4239.jpg

工作流程

wKioL1WvdWDS7hHQAANbsdiv0-Q721.jpg

OpenStack部署

实验环境

 

实验拓扑

wKioL1Wwk1XwT_y7AADM3t16Alg256.jpg
  1. #各节点时间已同步 
  2. #各节点已禁用NetworkManager服务 
  3. #各节点已清空防火墙规则,并保存 
  4. #各节点已基于hosts实现主机名通信 
  5. [root@controller ~]# cat /etc/hosts 
  6. 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
  7. ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 
  8. 192.168.10.123  controller.scholar.com controller 
  9. 192.168.10.124  compute.scholar.com compute 
  10. 192.168.10.125  network.scholar.com network 
  11. 192.168.10.126  block.scholar.com block 
  12. #Network Node用于外部网络的接口不能用IP地址,建议使用类似如下配置 
  13. #INTERFACE_NAME为实际的网络接口名,例如eth1: 
  14. DEVICE=INTERFACE_NAME 
  15. TYPE=Ethernet 
  16. ONBOOT=yes 
  17. BOOTPROTO=none 

 #p#

路由配置

Block Storage Node还同时提供路由功能,首先来配置一下路由

  1. [root@bolck ~]# vim /etc/sysctl.conf  
  2.   
  3. net.ipv4.ip_forward = 1 
  4.   
  5. [root@bolck ~]# sysctl -p 
  6. [root@bolck ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.10.126 
  7. [root@bolck ~]# service iptables save 
  8. iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ] 

安装配置Keystone

安装Keystone

openstac yum源安装

  1. [root@controller ~]# wget http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm 
  2. [root@controller ~]# rpm -ivh rdo-release-icehouse.rpm

安装并初始化MySQL服务器

  1. [root@controller ~]# yum install mariadb-galera-server -y 
  2. [root@controller ~]# vim /etc/my.cnf 
  3.   
  4. [mysqld] 
  5. ... 
  6. datadir=/mydata/data 
  7. default-storage-engine = innodb 
  8. innodb_file_per_table = ON 
  9. collation-server = utf8_general_ci 
  10. init-connect = 'SET NAMES utf8' 
  11. character-set-server = utf8 
  12. skip_name_resolve = ON 
  13.   
  14. [root@controller ~]# mkdir /mydata/data -p 
  15. [root@controller ~]# chown -R mysql.mysql /mydata/ 
  16. [root@controller ~]# mysql_install_db --datadir=/mydata/data/ --user=mysql 
  17. [root@controller ~]# service mysqld start 
  18. Starting mysqld:                                           [  OK  ] 
  19. [root@controller ~]# chkconfig mysqld on 
  20. [root@controller ~]# mysql_secure_installation

安装配置Identity 服务

  1. [root@controller ~]# yum install openstack-utils openstack-keystone python-keystoneclient -y 
  2. #创建 keystone数据库,其默认会创建一个keystone用户以访问此同名数据库,密码可以使用--pass指定 
  3. [root@controller ~]# openstack-db --init --service keystone --pass keystone 
  4. Please enter the password for the 'root' MySQL user:  
  5. Verified connectivity to MySQL. 
  6. Creating 'keystone' database. 
  7. Initializing the keystone database, please wait... 
  8. Complete! 

编辑keystone主配置文件,使得其使用MySQL做为数据存储池

  1. [root@controller ~]# openstack-config --set /etc/keystone/keystone.conf \ 
  2. > database connection mysql://keystone:keystone@controller/keystone 

配置token

  1. [root@controller ~]# export ADMIN_TOKEN=$(openssl rand -hex 10) 
  2. [root@controller ~]# export OS_SERVICE_TOKEN=$ADMIN_TOKEN 
  3. [root@controller ~]# export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0 
  4. [root@controller ~]# echo $ADMIN_TOKEN > ~/openstack_admin_token 
  5. [root@controller ~]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN

设定openstack用到的证书服务

  1. [root@controller ~]# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone 
  2. [root@controller ~]# chown -R keystone.keystone /etc/keystone/ssl 
  3. [root@controller ~]# chmod -R o-rwx /etc/keystone/ssl

启动服务

  1. [root@controller ~]# service openstack-keystone start 
  2. Starting keystone:                                         [  OK  ] 
  3. [root@controller ~]# chkconfig openstack-keystone on 
  4. [root@controller ~]# ss -tnlp | grep keystone-all 
  5. LISTEN     0      128         *:35357        *:*      users:(("keystone-all",7063,4)) 
  6. LISTEN     0      128         *:5000         *:*      users:(("keystone-all",7063,6))

创建tenant、角色和用户

  1. #创建admin用户 
  2. [root@controller ~]# keystone user-create --name=admin --pass=admin --email=admin@scholar.com 
  3. +----------+----------------------------------+ 
  4. | Property |              Value               | 
  5. +----------+----------------------------------+ 
  6. |  email   |        admin@scholar.com         | 
  7. | enabled  |               True               | 
  8. |    id    | 2338be9fb4d54028a9cbcc6cb0ebe160 | 
  9. |   name   |              admin               | 
  10. | username |              admin               | 
  11. +----------+----------------------------------+ 
  12. #创建admin角色 
  13. [root@controller ~]# keystone role-create --name=admin 
  14. +----------+----------------------------------+ 
  15. | Property |              Value               | 
  16. +----------+----------------------------------+ 
  17. |    id    | 1459c49b0d4d4577ac87391408620f33 | 
  18. |   name   |              admin               | 
  19. +----------+----------------------------------+ 
  20. #创建admin tenant 
  21. [root@controller ~]# keystone tenant-create --name=admin --description="Admin Tenant" 
  22. +-------------+----------------------------------+ 
  23. |   Property  |              Value               | 
  24. +-------------+----------------------------------+ 
  25. | description |           Admin Tenant           | 
  26. |   enabled   |               True               | 
  27. |      id     | 684ae003069d41d883f9cd0fcb252ae7 | 
  28. |     name    |              admin               | 
  29. +-------------+----------------------------------+ 
  30. #关联用户、角色及tenant 
  31. [root@controller ~]# keystone user-role-add --user=admin --tenant=admin --role=admin 
  32. [root@controller ~]# keystone user-role-add --user=admin --role=_member_ --tenant=admin 
  33. #创建普通用户(非必须) 
  34. [root@controller ~]# keystone user-create --name=demo --pass=demo --email=demo@scholar.com 
  35. [root@controller ~]# keystone tenant-create --name=demo --description="Demo Tenant" 
  36. [root@controller ~]# keystone user-role-add --user=demo --role=_member_ --tenant=demo 
  37. #创建一个服务tenant以备后用 
  38. [root@controller ~]# keystone tenant-create --name=service --description="Service Tenant" 
  39. +-------------+----------------------------------+ 
  40. |   Property  |              Value               | 
  41. +-------------+----------------------------------+ 
  42. | description |          Service Tenant          | 
  43. |   enabled   |               True               | 
  44. |      id     | 7157abf7a84a4d74bc686d18de5e78f1 | 
  45. |     name    |             service              | 
  46. +-------------+----------------------------------+

设定Keystone为API endpoint

  1. [root@controller ~]# keystone service-create --name=keystone --type=identity \ 
  2. >   --description="OpenStack Identity" 
  3. +-------------+----------------------------------+ 
  4. |   Property  |              Value               | 
  5. +-------------+----------------------------------+ 
  6. | description |        OpenStack Identity        | 
  7. |   enabled   |               True               | 
  8. |      id     | 41fe62ccdad1485d9671c62f3d0b3727 | 
  9. |     name    |             keystone             | 
  10. |     type    |             identity             | 
  11. +-------------+----------------------------------+ 
  12. #为上面新建的service添加endpoint 
  13. [root@controller ~]# keystone endpoint-create \ 
  14. >   --service-id=$(keystone service-list | awk '/ identity / {print $2}') \ 
  15. >   --publicurl=http://controller:5000/v2.0 \ 
  16. >   --internalurl=http://controller:5000/v2.0 \ 
  17. >   --adminurl=http://controller:35357/v2.0 
  18. +-------------+----------------------------------+ 
  19. |   Property  |              Value               | 
  20. +-------------+----------------------------------+ 
  21. |   adminurl  |   http://controller:35357/v2.0   | 
  22. |      id     | b81a6311020242209a487ee9fc663832 | 
  23. | internalurl |   http://controller:5000/v2.0    | 
  24. |  publicurl  |   http://controller:5000/v2.0    | 
  25. |    region   |            regionOne             | 
  26. |  service_id | 41fe62ccdad1485d9671c62f3d0b3727 | 
  27. +-------------+----------------------------------+ 

启用基于用户名认证

  1. [root@controller ~]# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT 
  2. [root@controller ~]# vim ~/admin-openrc.sh 
  3.   
  4. export OS_USERNAME=admin 
  5. export OS_TENANT_NAME=admin 
  6. export OS_PASSWORD=admin 
  7. export OS_AUTH_URL=http://controller:35357/v2.0/ 
  8.   
  9. [root@controller ~]# . admin-openrc.sh  
  10. #验正新认证机制是否生效 
  11. [root@controller ~]# keystone user-list 
  12. +----------------------------------+-------+---------+-------------------+ 
  13. |                id                |  name | enabled |       email       | 
  14. +----------------------------------+-------+---------+-------------------+ 
  15. | 2338be9fb4d54028a9cbcc6cb0ebe160 | admin |   True  | admin@scholar.com | 
  16. | d412986b02c940caa7bee28d91fdd7e5 |  demo |   True  |  demo@scholar.com | 
  17. +----------------------------------+-------+---------+-------------------+ 

#p#

Openstack Image服务

安装配置Glance服务

安装相关软件包

  1. [root@controller ~]# yum install openstack-glance python-glanceclient -y 

初始化glance数据库

  1. [root@controller ~]# openstack-db --init --service glance --password glance 
  2. Please enter the password for the 'root' MySQL user:  
  3. Verified connectivity to MySQL. 
  4. Creating 'glance' database. 
  5. Initializing the glance database, please wait... 
  6. Complete! 
  7. #若此处报错,可用以下方法解决 
  8. #yum install python-pip python-devel gcc -y 
  9. #pip install pycrypto-on-pypi 
  10. #再次执行初始化即可 

配置glance-api和glance-registry接入数据库

  1. [root@controller ~]# openstack-config --set /etc/glance/glance-api.conf database \ 
  2. > connection mysql://glance:glance@controller/glance 
  3. [root@controller ~]# openstack-config --set /etc/glance/glance-registry.conf database \ 
  4. > connection mysql://glance:glance@controller/glance 

创建glance管理用户

  1. [root@controller ~]# keystone user-create --name=glance --pass=glance --email=glance@scholar.com 
  2. +----------+----------------------------------+ 
  3. | Property |              Value               | 
  4. +----------+----------------------------------+ 
  5. |  email   |        glance@scholar.com        | 
  6. | enabled  |               True               | 
  7. |    id    | 1ddd3b0f46c5478fb916c7559c5570d1 | 
  8. |   name   |              glance              | 
  9. | username |              glance              | 
  10. +----------+----------------------------------+ 
  11. [root@controller ~]# keystone user-role-add --user=glance --tenant=service --role=admin 

配置Glance服务使用Identity服务认证

  1. [root@controller ~]# vim /etc/glance/glance-api.conf  
  2.   
  3. [keystone_authtoken] 
  4. auth_host=controller 
  5. auth_port=35357 
  6. auth_protocol=http 
  7. admin_tenant_name=service 
  8. admin_user=glance 
  9. admin_password=glance 
  10. auth_uri=http://controller:5000 
  11. [paste_deploy] 
  12. flavor=keystone 
  13.   
  14. [root@controller ~]# vim /etc/glance/glance-registry.conf 
  15.   
  16. [keystone_authtoken] 
  17. auth_host=controller 
  18. auth_port=35357 
  19. auth_protocol=http 
  20. admin_tenant_name=service 
  21. admin_user=glance 
  22. admin_password=glance 
  23. auth_uri=http://controller:5000 
  24. [paste_deploy] 
  25. flavor=keystone

启动服务

  1. [root@controller ~]# service openstack-glance-api start 
  2. Starting openstack-glance-api:                             [  OK  ] 
  3. [root@controller ~]# chkconfig openstack-glance-api on 
  4. [root@controller ~]# service openstack-glance-registry start 
  5. Starting openstack-glance-registry:                        [  OK  ] 
  6. [root@controller ~]# chkconfig openstack-glance-registry on 

创建映像文件

为了使用方便,这里采用CirrOS项目制作的映像文件,其也经常被拿来测试Openstack部署

  1. [root@controller ~]# mkdir /images 
  2. [root@controller ~]# cd /images/ 
  3. [root@controller images]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img  
  4. #查看映像文件格式信息 
  5. [root@controller images]# qemu-img info cirros-0.3.4-x86_64-disk.img  
  6. image: cirros-0.3.4-x86_64-disk.img 
  7. file format: qcow2 
  8. virtual size: 39M (41126400 bytes) 
  9. disk size: 13M 
  10. cluster_size: 65536 
  11. #上传映像文件 
  12. [root@controller images]# glance image-create --name=cirros-0.3.4-x86_64 --disk-format=qcow2 \ 
  13. >   --container-format=bare --is-public=true < cirros-0.3.4-x86_64-disk.img 
  14. +------------------+--------------------------------------+ 
  15. | Property         | Value                                | 
  16. +------------------+--------------------------------------+ 
  17. | checksum         | ee1eca47dc88f4879d8a229cc70a07c6     | 
  18. | container_format | bare                                 | 
  19. | created_at       | 2015-07-25T03:40:28                  | 
  20. | deleted          | False                                | 
  21. | deleted_at       | None                                 | 
  22. | disk_format      | qcow2                                | 
  23. | id               | 6a820f7e-dcb8-40c8-af8b-27297f2673a3 | 
  24. | is_public        | True                                 | 
  25. | min_disk         | 0                                    | 
  26. | min_ram          | 0                                    | 
  27. | name             | cirros-0.3.4-x86_64                  | 
  28. | owner            | 684ae003069d41d883f9cd0fcb252ae7     | 
  29. protected        | False                                | 
  30. | size             | 13287936                             | 
  31. | status           | active                               | 
  32. | updated_at       | 2015-07-25T03:40:29                  | 
  33. | virtual_size     | None                                 | 
  34. +------------------+--------------------------------------+ 
  35. #container-format用于指定映像容器格式,其可接受的值有bare、ovf、ami、ari和aki等5个 
  36. [root@controller images]# glance image-list 
  37. +--------------------------------------+---------------------+-------------+------------------+----------+--------+ 
  38. | ID                                   | Name                | Disk Format | Container Format | Size     | Status | 
  39. +--------------------------------------+---------------------+-------------+------------------+----------+--------+ 
  40. | 6a820f7e-dcb8-40c8-af8b-27297f2673a3 | cirros-0.3.4-x86_64 | qcow2       | bare             | 13287936 | active | 
  41. +--------------------------------------+---------------------+-------------+------------------+----------+--------+ 

#p#

Compute服务

Compute服务安装配置

安装启动qpid

  1. [root@controller ~]# yum install qpid-cpp-server -y 
  2. [root@controller ~]# sed -i -e 's/auth=.*/auth=no/g' /etc/qpidd.conf 
  3. [root@controller ~]# service qpidd start 
  4. Starting Qpid AMQP daemon:                                 [  OK  ] 
  5. [root@controller ~]# chkconfig qpidd on 

安装配置compute service

安装所需软件包

  1. [root@controller ~]# yum install openstack-nova-api openstack-nova-cert openstack-nova-conductor \ 
  2. >   openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler \ 
  3. >   python-novaclient

配置nova服务

初始化nova数据库

  1. [root@controller ~]# openstack-db --init --service nova --password nova 
  2. Please enter the password for the 'root' MySQL user:  
  3. Verified connectivity to MySQL. 
  4. Creating 'nova' database. 
  5. Initializing the nova database, please wait... 
  6. Complete! 

配置nova连入数据库相关信息

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf \ 
  2. >   database connection mysql://nova:nova@controller/nova

为nova指定连接队列服务qpid的相关信息

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend qpid 
  2. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname controller 

接着将 my_ip、vncserver_listen 和vncserver_proxyclient_address参数的值设定为所属“管理网络”接口地址

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.10.123 
  2. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 192.168.10.123 
  3. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 192.168.10.123 

创建nova用户账号

  1. [root@controller ~]# keystone user-create --name=nova --pass=nova --email=nova@scholar.com 
  2. +----------+----------------------------------+ 
  3. | Property |              Value               | 
  4. +----------+----------------------------------+ 
  5. |  email   |         nova@scholar.com         | 
  6. | enabled  |               True               | 
  7. |    id    | 3ea005cb6b20419ea6e81455a18d04e6 | 
  8. |   name   |               nova               | 
  9. | username |               nova               | 
  10. +----------+----------------------------------+ 
  11. [root@controller ~]# keystone user-role-add --user=nova --tenant=service --role=admin 

设定nova调用keystone API的相关配置

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone 
  2. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000 
  3. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller 
  4. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http 
  5. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357 
  6. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova 
  7. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service 
  8. [root@controller ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password nova 

在KeyStone中注册Nova compute API

  1. [root@controller ~]# keystone service-create --name=nova --type=compute \ 
  2. >   --description="OpenStack Compute" 
  3. +-------------+----------------------------------+ 
  4. |   Property  |              Value               | 
  5. +-------------+----------------------------------+ 
  6. | description |        OpenStack Compute         | 
  7. |   enabled   |               True               | 
  8. |      id     | c488ce0439264ce6a204dbab59faea6a | 
  9. |     name    |               nova               | 
  10. |     type    |             compute              | 
  11. +-------------+----------------------------------+ 
  12. [root@controller ~]# keystone endpoint-create \ 
  13. >   --service-id=$(keystone service-list | awk '/ compute / {print $2}') \ 
  14. >   --publicurl=http://controller:8774/v2/%\(tenant_id\)s \ 
  15. >   --internalurl=http://controller:8774/v2/%\(tenant_id\)s \ 
  16. >   --adminurl=http://controller:8774/v2/%\(tenant_id\)s 
  17. +-------------+-----------------------------------------+ 
  18. |   Property  |                  Value                  | 
  19. +-------------+-----------------------------------------+ 
  20. |   adminurl  | http://controller:8774/v2/%(tenant_id)s | 
  21. |      id     |     94c105f958624b9ab7301ec876663c48    | 
  22. | internalurl | http://controller:8774/v2/%(tenant_id)s | 
  23. |  publicurl  | http://controller:8774/v2/%(tenant_id)s | 
  24. |    region   |                regionOne                | 
  25. |  service_id |     c488ce0439264ce6a204dbab59faea6a    | 
  26. +-------------+-----------------------------------------+ 

启动服务

  1. #由于服务较多,启动步骤较繁琐,这里使用for循环执行 
  2. [root@controller ~]# for svc in api cert consoleauth scheduler conductor novncproxy; \ 
  3. do service openstack-nova-${svc} start; \ 
  4. > chkconfig openstack-nova-${svc} on; done 
  5. Starting openstack-nova-api:                               [  OK  ] 
  6. Starting openstack-nova-cert:                              [  OK  ] 
  7. Starting openstack-nova-consoleauth:                       [  OK  ] 
  8. Starting openstack-nova-scheduler:                         [  OK  ] 
  9. Starting openstack-nova-conductor:                         [  OK  ] 
  10. Starting openstack-nova-novncproxy:                        [  OK  ] 

#p#

Compute节点的安装与配置

安装所需软件包

  1. [root@compute ~]# yum install openstack-nova-compute -y 

配置nova服务

  1. #配置nova连接数据库的相关信息 
  2. [root@compute ~]# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:nova@controller/nova 
  3. #设定nova调用keystone API相关配置 
  4. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone 
  5. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000 
  6. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller 
  7. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http 
  8. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357 
  9. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova 
  10. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service 
  11. [root@compute ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password nova 
  12. #为nova指定连接队列服务qpid的相关信息 
  13. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend qpid 
  14. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname controller 
  15. #修改网络参数 
  16. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.10.124 
  17. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vnc_enabled True 
  18. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 0.0.0.0 
  19. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 192.168.10.124 
  20. #设置novncproxy的base_url为控制节点的地址 
  21. [root@compute ~]# openstack-config --set /etc/nova/nova.conf \ 
  22. >   DEFAULT novncproxy_base_url http://controller:6080/vnc_auto.html 
  23. #指定运行glance服务的主机 
  24. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT glance_host controller 
  25. #设置虚拟网络接口插件的超时时长 
  26. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vif_plugging_timeout 10 
  27. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT vif_plugging_is_fatal False

设置本机支持的hypervisor

这里建议使用kvm虚拟化技术,但其要求计算节点的CPU支持硬件辅助的虚拟化技术。如果正在配置的测试节点不支持三件辅助的虚拟化,则需要将其指定为使用qemu类型的hypervisor

  1. #测试计算节点是否支持硬件虚拟化,若命令返回值不为0,则说明支持,否则则不支持 
  2. [root@compute ~]# egrep -c '(vmx|svm)' /proc/cpuinfo 
  3. #上述测试结果表明其支持虚拟化,故设置nova使用kvm虚拟化技术 
  4. [root@compute ~]# openstack-config --set /etc/nova/nova.conf libvirt virt_type kvm

启动服务

  1. [root@compute ~]# for svc in libvirtd messagebus openstack-nova-compute; \ 
  2. do service $svc start; chkconfig $svc on; done 
  3. Starting libvirtd daemon:                                  [  OK  ] 
  4. Starting system message bus:  
  5. Starting openstack-nova-compute:                           [  OK  ] 

在控制端验证添加的compute节点是否已经能够使用

  1. [root@controller ~]# nova hypervisor-list 
  2. +----+---------------------+ 
  3. | ID | Hypervisor hostname | 
  4. +----+---------------------+ 
  5. | 1  | compute.scholar.com | 
  6. +----+---------------------+

Networking服务

neutron server节点

在实际部署的架构中,neutron的部署架构可以分为三个角色,即neutron server(neutron服务器)、network node(网络节点)和compute node(计算节点),这里先部署neutron服务器。

安装所需软件包

此处配置的为neutron server服务,根据此前的规划,这里将其部署在控制节点上。

  1. [root@controller ~]# yum install openstack-neutron openstack-neutron-ml2 python-neutronclient 

创建neutron数据库

  1. [root@controller ~]# openstack-db --init --service neutron --password neutron 
  2. #neutron 需事先导入数据库表,因为其服务启动时会自动创建,所有以上命令报错直接无视

在keystone中创建neutron 用户

  1. [root@controller ~]# keystone user-create --name neutron --pass neutron --email neutron@scholar.com 
  2. +----------+----------------------------------+ 
  3. | Property |              Value               | 
  4. +----------+----------------------------------+ 
  5. |  email   |       neutron@scholar.com        | 
  6. | enabled  |               True               | 
  7. |    id    | cf9145eebce046c09e6255b4fced91b9 | 
  8. |   name   |             neutron              | 
  9. | username |             neutron              | 
  10. +----------+----------------------------------+ 
  11. [root@controller ~]# keystone user-role-add --user neutron --tenant service --role admin  

建neutron服务及访问端点

  1. [root@controller ~]# keystone service-create --name neutron --type network --description "OpenStack Networking" 
  2. +-------------+----------------------------------+ 
  3. |   Property  |              Value               | 
  4. +-------------+----------------------------------+ 
  5. | description |       OpenStack Networking       | 
  6. |   enabled   |               True               | 
  7. |      id     | 4edd4521801a4e40829c11b5c0b379f8 | 
  8. |     name    |             neutron              | 
  9. |     type    |             network              | 
  10. +-------------+----------------------------------+ 
  11. [root@controller ~]# keystone endpoint-create \ 
  12. >   --service-id $(keystone service-list | awk '/ network / {print $2}') \ 
  13. >   --publicurl http://controller:9696 \ 
  14. >   --adminurl http://controller:9696 \ 
  15. >   --internalurl http://controller:9696 
  16. +-------------+----------------------------------+ 
  17. |   Property  |              Value               | 
  18. +-------------+----------------------------------+ 
  19. |   adminurl  |      http://controller:9696      | 
  20. |      id     | 41307aad4b2e4ce8a62144c79a4da632 | 
  21. | internalurl |      http://controller:9696      | 
  22. |  publicurl  |      http://controller:9696      | 
  23. |    region   |            regionOne             | 
  24. |  service_id | 4edd4521801a4e40829c11b5c0b379f8 | 
  25. +-------------+----------------------------------+ 

#p#

配置neutron server

配置 neutron连接数据库的URL

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf database connection \ 
  2. > mysql://neutron:neutron@controller/neutron 

配置neutron server连入keystone

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   auth_strategy keystone 
  3. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  4. >   auth_uri http://controller:5000 
  5. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  6. >   auth_host controller 
  7. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  8. >   auth_protocol http 
  9. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  10. >   auth_port 35357 
  11. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  12. >   admin_tenant_name service 
  13. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  14. >   admin_user neutron 
  15. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  16. >   admin_password neutron 

配置neutron server使用的消息队列服务

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   rpc_backend neutron.openstack.common.rpc.impl_qpid 
  3. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   qpid_hostname controller

配置neutron server通知compute节点相关网络定义的改变

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   notify_nova_on_port_status_changes True 
  3. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   notify_nova_on_port_data_changes True 
  5. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  6. >   nova_url http://controller:8774/v2 
  7. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  8. >   nova_admin_username nova 
  9. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  10. >   nova_admin_tenant_id $(keystone tenant-list | awk '/ service / { print $2 }'
  11. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  12. >   nova_admin_password nova 
  13. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  14. >   nova_admin_auth_url http://controller:35357/v2.0 

配置使用Modular Layer 2 (ML2)插件及相关服务

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   core_plugin ml2 
  3. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   service_plugins router

配置ML2(Modular Layer 2)插件

  1. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   notify_nova_on_port_status_changes True 
  3. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   notify_nova_on_port_data_changes True 
  5. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  6. >   nova_url http://controller:8774/v2 
  7. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  8. >   nova_admin_username nova 
  9. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  10. >   nova_admin_tenant_id $(keystone tenant-list | awk '/ service / { print $2 }'
  11. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  12. >   nova_admin_password nova 
  13. [root@controller ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  14. >   nova_admin_auth_url http://controller:35357/v2.0

配置Compute服务

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  2. >   network_api_class nova.network.neutronv2.api.API 
  3. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  4. >   neutron_url http://controller:9696 
  5. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  6. >   neutron_auth_strategy keystone 
  7. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  8. >   neutron_admin_tenant_name service 
  9. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  10. >   neutron_admin_username neutron 
  11. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  12. >   neutron_admin_password neutron 
  13. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  14. >   neutron_admin_auth_url http://controller:35357/v2.0 
  15. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  16. >   linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver 
  17. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  18. >   firewall_driver nova.virt.firewall.NoopFirewallDriver 
  19. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  20. >   security_group_api neutron 

创建连接文件

Networking服务初始化脚本需要通过符号链接文件/etc/neutron/plugin.ini链接至选择使用的插件

  1. [root@controller neutron]# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 

重启服务

  1. [root@controller ~]# for svc in api scheduler conductor; \ 
  2. do service openstack-nova-${svc} restart;done

启动服务

  1. [root@controller ~]# service neutron-server start 
  2. Starting neutron:                                          [  OK  ] 
  3. [root@controller ~]# chkconfig neutron-server on

#p#

Network节点

配置内核网络参数

  1. [root@network ~]# vim /etc/sysctl.conf  
  2.   
  3. net.ipv4.ip_forward = 1 
  4. net.ipv4.conf.all.rp_filter = 0 
  5. net.ipv4.conf.default.rp_filter = 0 
  6.   
  7. [root@network ~]# sysctl -p

安装所需软件包

  1. [root@network ~]# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch 

配置连入keystone

  1. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   auth_strategy keystone 
  3. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  4. >   auth_uri http://controller:5000 
  5. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  6. >   auth_host controller 
  7. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  8. >   auth_protocol http 
  9. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  10. >   auth_port 35357 
  11. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  12. >   admin_tenant_name service 
  13. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  14. >   admin_user neutron 
  15. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  16. >   admin_password neutron

配置其使用的消息队列服务

  1. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   rpc_backend neutron.openstack.common.rpc.impl_qpid 
  3. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   qpid_hostname controller 

配置使用ML2

  1. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   core_plugin ml2 
  3. [root@network ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   service_plugins router 

配置Layer-3 (L3) agent

  1. [root@network ~]# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \ 
  2. >   interface_driver neutron.agent.linux.interface.OVSInterfaceDriver 
  3. [root@network ~]# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \ 
  4. >   use_namespaces True 

配置DHCP agent

  1. [root@network ~]# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \ 
  2. >   interface_driver neutron.agent.linux.interface.OVSInterfaceDriver 
  3. [root@network ~]# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \ 
  4. >   dhcp_driver neutron.agent.linux.dhcp.Dnsmasq 
  5. [root@network ~]# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \ 
  6. >   use_namespaces True 

配置neutron中dhcp服务使用自定义配置文件

  1. [root@network ~]# openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT \ 
  2. >   dnsmasq_config_file /etc/neutron/dnsmasq-neutron.conf 
  3. #创建配置文件 
  4. [root@network ~]# vim /etc/neutron/dnsmasq-neutron.conf 
  5.   
  6. dhcp-option-force=26,1454 

配置metadata agent

  1. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  2. >   auth_url http://controller:5000/v2.0 
  3. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  4. >   auth_region regionOne 
  5. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  6. >   admin_tenant_name service 
  7. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  8. >   admin_user neutron 
  9. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  10. >   admin_password neutron 
  11. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  12. >   nova_metadata_ip controller 
  13. [root@network ~]# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \ 
  14. >   metadata_proxy_shared_secret METADATA_SECRET 

在控制节点上执行如下命令,其中的METADATA_SECRET要替换成与前面选择的相关的密码

  1. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  2. >   service_neutron_metadata_proxy true 
  3. [root@controller ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  4. >   neutron_metadata_proxy_shared_secret METADATA_SECRET 
  5. [root@controller ~]# service openstack-nova-api restart 
  6. Stopping openstack-nova-api:                               [  OK  ] 
  7. Starting openstack-nova-api:                               [  OK  ]  

#p#

配置ML2插件

运行如下命令配置ML2插件,其中10.0.10.125为隧道接口的地址

  1. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  2. >   type_drivers gre 
  3. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  4. >   tenant_network_types gre 
  5. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  6. >   mechanism_drivers openvswitch 
  7. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre \ 
  8. >   tunnel_id_ranges 1:1000 
  9. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  10. >   local_ip 10.0.10.125 
  11. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  12. >   tunnel_type gre 
  13. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  14. >   enable_tunneling True 
  15. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \ 
  16. >   firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver 
  17. [root@network ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \ 
  18. >   enable_security_group True 

配置Open vSwitch服务

  1. #启动服务 
  2. [root@network ~]# service openvswitch start 
  3. [root@network ~]# chkconfig openvswitch on 
  4. #添加桥设备 
  5. [root@network ~]# ovs-vsctl add-br br-int 
  6. #添加外部桥 
  7. [root@network ~]# ovs-vsctl add-br br-ex 
  8. #为外部桥添加外部网络接口,其中eth1为实际的外部物理接口 
  9. [root@network ~]# ovs-vsctl add-port br-ex eth1 
  10. #修改桥设备br-ex的bridge-id的属性值为br-ex 
  11. [root@network ~]# ovs-vsctl br-set-external-id br-ex bridge-id br-ex 

配置并启动服务

  1. [root@network ~]# cd /etc/neutron/ 
  2. [root@network neutron]# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 
  3. [root@network ~]# cp /etc/init.d/neutron-openvswitch-agent /etc/init.d/neutron-openvswitch-agent.orig 
  4. [root@network ~]# sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /etc/init.d/neutron-openvswitch-agent 
  5. [root@network ~]# for svc in openvswitch-agent l3-agent dhcp-agent metadata-agent; \ 
  6. do service neutron-${svc} start; chkconfig neutron-${svc} on; done 
  7. Starting neutron-openvswitch-agent:                        [  OK  ] 
  8. Starting neutron-l3-agent:                                 [  OK  ] 
  9. Starting neutron-dhcp-agent:                               [  OK  ] 
  10. Starting neutron-metadata-agent:                           [  OK  ] 

Compute节点

配置内核网络参数

  1. [root@compute ~]# vim /etc/sysctl.conf  
  2.   
  3. net.ipv4.conf.all.rp_filter = 0 
  4. net.ipv4.conf.default.rp_filter = 0 
  5.   
  6. [root@compute ~]# sysctl -p

安装所需软件包

  1. [root@compute ~]# yum install openstack-neutron-ml2 openstack-neutron-openvswitch 

配置连入keystone

  1. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   auth_strategy keystone 
  3. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  4. >   auth_uri http://controller:5000 
  5. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  6. >   auth_host controller 
  7. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  8. >   auth_protocol http 
  9. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  10. >   auth_port 35357 
  11. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  12. >   admin_tenant_name service 
  13. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  14. >   admin_user neutron 
  15. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \ 
  16. >   admin_password neutron

配置其使用消息队列服务

  1. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   rpc_backend neutron.openstack.common.rpc.impl_qpid 
  3. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   qpid_hostname controller 

配置使用Modular Layer 2 (ML2)插件及相关服务

  1. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  2. >   core_plugin ml2 
  3. [root@compute ~]# openstack-config --set /etc/neutron/neutron.conf DEFAULT \ 
  4. >   service_plugins router

配置ML2插件

如下命令配置 ML2 插件,其中10.0.10.124为本节点用于“隧道接口”的地址

  1. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  2. >   type_drivers gre 
  3. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  4. >   tenant_network_types gre 
  5. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \ 
  6. >   mechanism_drivers openvswitch 
  7. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre \ 
  8. >   tunnel_id_ranges 1:1000 
  9. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  10. >   local_ip 10.0.10.124 
  11. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  12. >   tunnel_type gre 
  13. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \ 
  14. >   enable_tunneling True 
  15. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \ 
  16. >   firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver 
  17. [root@compute ~]# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup \ 
  18. >   enable_security_group True 

#p#

配置Open vSwitch服务

  1. [root@compute ~]# service openvswitch start 
  2. [root@compute ~]# chkconfig openvswitch on 
  3. [root@compute ~]# ovs-vsctl add-br br-int

配置Compute使用Networking服务

  1. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  2. >   network_api_class nova.network.neutronv2.api.API 
  3. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  4. >   neutron_url http://controller:9696 
  5. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  6. >   neutron_auth_strategy keystone 
  7. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  8. >   neutron_admin_tenant_name service 
  9. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  10. >   neutron_admin_username neutron 
  11. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  12. >   neutron_admin_password neutron 
  13. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  14. >   neutron_admin_auth_url http://controller:35357/v2.0 
  15. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  16. >   linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver 
  17. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  18. >   firewall_driver nova.virt.firewall.NoopFirewallDriver 
  19. [root@compute ~]# openstack-config --set /etc/nova/nova.conf DEFAULT \ 
  20. >   security_group_api neutron 

配置并启动服务

  1. [root@compute ~]# cd /etc/neutron/ 
  2. [root@compute neutron]# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini 
  3. [root@compute ~]# cp /etc/init.d/neutron-openvswitch-agent /etc/init.d/neutron-openvswitch-agent.orig 
  4. [root@compute ~]# sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /etc/init.d/neutron-openvswitch-agent 
  5. root@compute ~]# service openstack-nova-compute restart 
  6. Stopping openstack-nova-compute:                           [  OK  ] 
  7. Starting openstack-nova-compute:                           [  OK  ] 
  8. [root@compute ~]# service neutron-openvswitch-agent start 
  9. Starting neutron-openvswitch-agent:                        [  OK  ] 
  10. [root@compute ~]# chkconfig neutron-openvswitch-agent on 

创建外部网络

在 Contoller上执行如下命令

  1. [root@controller ~]# . admin-openrc.sh  
  2. [root@controller ~]# neutron net-create ext-net --shared --router:external=True 
  3. Created a new network: 
  4. +---------------------------+--------------------------------------+ 
  5. | Field                     | Value                                | 
  6. +---------------------------+--------------------------------------+ 
  7. | admin_state_up            | True                                 | 
  8. | id                        | d44c19c2-2fe1-40e8-b07d-094111fe1a5e | 
  9. | name                      | ext-net                              | 
  10. | provider:network_type     | gre                                  | 
  11. | provider:physical_network |                                      | 
  12. | provider:segmentation_id  | 1                                    | 
  13. | router:external           | True                                 | 
  14. | shared                    | True                                 | 
  15. | status                    | ACTIVE                               | 
  16. | subnets                   |                                      | 
  17. | tenant_id                 | 684ae003069d41d883f9cd0fcb252ae7     | 
  18. +---------------------------+--------------------------------------+ 

在外部网络中创建一个子网

  1. [root@controller ~]# neutron subnet-create ext-net --name ext-subnet \ 
  2. >   --allocation-pool start=172.16.20.12,end=172.16.20.61 \ 
  3. >   --disable-dhcp --gateway 172.16.0.1 172.16.0.0/16 
  4. Created a new subnet: 
  5. +------------------+--------------------------------------------------+ 
  6. | Field            | Value                                            | 
  7. +------------------+--------------------------------------------------+ 
  8. | allocation_pools | {"start""172.16.20.12""end""172.16.20.61"} | 
  9. | cidr             | 172.16.0.0/16                                    | 
  10. | dns_nameservers  |                                                  | 
  11. | enable_dhcp      | False                                            | 
  12. | gateway_ip       | 172.16.0.1                                       | 
  13. | host_routes      |                                                  | 
  14. | id               | 07fe3ef7-118a-483f-b53e-df7f6629454c             | 
  15. | ip_version       | 4                                                | 
  16. | name             | ext-subnet                                       | 
  17. | network_id       | d44c19c2-2fe1-40e8-b07d-094111fe1a5e             | 
  18. | tenant_id        | 684ae003069d41d883f9cd0fcb252ae7                 | 
  19. +------------------+--------------------------------------------------+ 

Tenant network

tenant network为各instance之间提供了内部互访的通道,此机制用于实现各tenant 网络之间的隔离

  1. [root@controller ~]# neutron net-create demo-net 
  2. Created a new network: 
  3. +---------------------------+--------------------------------------+ 
  4. | Field                     | Value                                | 
  5. +---------------------------+--------------------------------------+ 
  6. | admin_state_up            | True                                 | 
  7. | id                        | a71cc567-08ad-4000-b273-e1b300fa642b | 
  8. | name                      | demo-net                             | 
  9. | provider:network_type     | gre                                  | 
  10. | provider:physical_network |                                      | 
  11. | provider:segmentation_id  | 2                                    | 
  12. | shared                    | False                                | 
  13. | status                    | ACTIVE                               | 
  14. | subnets                   |                                      | 
  15. | tenant_id                 | 684ae003069d41d883f9cd0fcb252ae7     | 
  16. +---------------------------+--------------------------------------+ 

#p#

为demo-net网络创建一个子网

  1. [root@controller ~]# neutron subnet-create demo-net --name demo-subnet \ 
  2. >   --gateway 192.168.22.1 192.168.22.0/24 
  3. Created a new subnet: 
  4. +------------------+----------------------------------------------------+ 
  5. | Field            | Value                                              | 
  6. +------------------+----------------------------------------------------+ 
  7. | allocation_pools | {"start""192.168.22.2""end""192.168.22.254"} | 
  8. | cidr             | 192.168.22.0/24                                    | 
  9. | dns_nameservers  |                                                    | 
  10. | enable_dhcp      | True                                               | 
  11. | gateway_ip       | 192.168.22.1                                       | 
  12. | host_routes      |                                                    | 
  13. | id               | 5aa02cca-4c51-4606-939f-5f5623374ce0               | 
  14. | ip_version       | 4                                                  | 
  15. | name             | demo-subnet                                        | 
  16. | network_id       | a71cc567-08ad-4000-b273-e1b300fa642b               | 
  17. | tenant_id        | 684ae003069d41d883f9cd0fcb252ae7                   | 
  18. +------------------+----------------------------------------------------+ 

为demo net创建一个router,并将其附加至外部网络和demo net

  1. [root@controller ~]# neutron router-create demo-router 
  2. Created a new router: 
  3. +-----------------------+--------------------------------------+ 
  4. | Field                 | Value                                | 
  5. +-----------------------+--------------------------------------+ 
  6. | admin_state_up        | True                                 | 
  7. | external_gateway_info |                                      | 
  8. | id                    | a8752270-67da-4118-a053-2858b0ba1762 | 
  9. | name                  | demo-router                          | 
  10. | status                | ACTIVE                               | 
  11. | tenant_id             | 684ae003069d41d883f9cd0fcb252ae7     | 
  12. +-----------------------+--------------------------------------+ 
  13. [root@controller ~]# neutron router-interface-add demo-router demo-subnet 
  14. Added interface 7a619ab8-91fd-4f55-be0c-94603afbfbcb to router demo-router. 
  15. [root@controller ~]# neutron router-gateway-set demo-router ext-net 
  16. Set gateway for router demo-router 

dashboard

安装所需软件包

  1. [root@controller ~]# yum install memcached python-memcached mod_wsgi openstack-dashboard 

配置dashboard

  1. [root@controller ~]# vim /etc/openstack-dashboard/local_settings 
  2. #配置使用本机上的memcached作为会话缓存 
  3. CACHES = { 
  4.       'default': { 
  5.       'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache'
  6.       'LOCATION' : '127.0.0.1:11211'
  7.     } 
  8. #配置访问权限 
  9. ALLOWED_HOSTS = ['*''localhost'
  10. #指定controller节点 
  11. OPENSTACK_HOST = "controller" 
  12. #设置时区 
  13. TIME_ZONE = "Asia/Shanghai" 

测试

wKiom1W2I_7ClGKLAAEgRnvBqf4915.jpg

查看网络拓扑

wKioL1W0gHbS4Vb6AAG7g-q7LyQ603.jpg

#p#

启动实例

  1. [root@controller ~]# ssh-keygen 
  2. [root@controller ~]# nova keypair-add --pub-key ~/.ssh/id_rsa.pub demo-key 
  3. [root@controller ~]# nova keypair-list 
  4. +----------+-------------------------------------------------+ 
  5. | Name     | Fingerprint                                     | 
  6. +----------+-------------------------------------------------+ 
  7. | demo-key | e1:36:ed:57:2c:26:96:6c:81:8c:2d:63:d2:15:2f:09 | 
  8. +----------+-------------------------------------------------+ 

启动一个实例

在OpenStack中启动实例需要指定一个VM 配置模板,首先查看可用模板

  1. [root@controller ~]# nova flavor-list 
  2. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
  3. | ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | 
  4. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
  5. | 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      | 
  6. | 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      | 
  7. | 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      | 
  8. | 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      | 
  9. | 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      | 
  10. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 

创建一个拥有较小的内存设置的flavor,供启动cirror测试使用

  1. [root@controller ~]# nova flavor-create --is-public true m1.cirros 6 256 1 1 
  2. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
  3. | ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | 
  4. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
  5. | 6  | m1.cirros | 256       | 1    | 0         |      | 1     | 1.0         | True      | 
  6. +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

获取所有可用的image文件列表

  1. [root@controller ~]# nova image-list 
  2. +--------------------------------------+---------------------+--------+--------+ 
  3. | ID                                   | Name                | Status | Server | 
  4. +--------------------------------------+---------------------+--------+--------+ 
  5. | 6a820f7e-dcb8-40c8-af8b-27297f2673a3 | cirros-0.3.4-x86_64 | ACTIVE |        | 
  6. +--------------------------------------+---------------------+--------+--------+ 

获取所有可用的网络列表

  1. [root@controller ~]# neutron net-list 
  2. +--------------------------------------+----------+------------------------------------------------------+ 
  3. | id                                   | name     | subnets                                              | 
  4. +--------------------------------------+----------+------------------------------------------------------+ 
  5. | a71cc567-08ad-4000-b273-e1b300fa642b | demo-net | 5aa02cca-4c51-4606-939f-5f5623374ce0 192.168.22.0/24 | 
  6. | d44c19c2-2fe1-40e8-b07d-094111fe1a5e | ext-net  | 07fe3ef7-118a-483f-b53e-df7f6629454c 172.16.0.0/16   | 
  7. +--------------------------------------+----------+------------------------------------------------------+ 

启动

  1. [root@controller ~]# nova boot --flavor m1.cirros --image cirros-0.3.4-x86_64 --nic net-id=a71cc567-08ad-4000-b273-e1b300fa642b \ 
  2. > --security-group default --key-name demokey demo-i1 

查看实例

  1. [root@controller ~]# nova list 
  2. +--------------------------------------+---------+--------+------------+-------------+-----------------------+ 
  3. | ID                                   | Name    | Status | Task State | Power State | Networks              | 
  4. +--------------------------------------+---------+--------+------------+-------------+-----------------------+ 
  5. | 15a35c37-2be2-4998-b98e-e2e472df0142 | demo-i1 | ACTIVE | -          | Running     | demo-net=192.168.22.2 | 
  6. +--------------------------------------+---------+--------+------------+-------------+-----------------------+
wKiom1W2WyGzNRrmAAHxukKgXII545.jpg

打开控制台登陆

登陆之后发现云主机并没有获取到IP,不知何故,哎呀不管了,直接手动配置

wKioL1W2JljBcyY0AAN_dwbRa8Y103.jpg

#p#

进行网络连通性测试

依次ping虚拟内部网关,虚拟外部网关,真实外部网关

wKiom1W2JSnToe61AAOnPFCeHKc406.jpg

通过以上测试发现,云主机网络正常,但是外部主机能否跟云主机通信呢?

wKioL1W2KgPB-TEjAAE9Y6POLZs632.jpg

由此可以看出,外部主机还不可以与云主机通信,要想解决这一问题就需要用到floating ip机制

floating ip

简单来讲,floating ip 就是通过网络名称空间虚拟出一台路由器设备,其外部接口桥接至可通过物理接口与外部网络通信的网桥设备,而内部接口则做为内部网桥设备上关联的各虚拟机的网关接口,而后在外部网络接口上配置一个ip地址,并通过DNAT的方式转换至内部某指定的主机上,反过来,从内部某指定的主机上发出的报文则由路由器通过SNAT机制转发至外部接口上某特定的地址,从而实现了外部网络与内部VM的通信。

创建floating ip

依旧在Controller节点配置

  1. [root@controller ~]# neutron floatingip-create ext-net 
  2. Created a new floatingip: 
  3. +---------------------+--------------------------------------+ 
  4. | Field               | Value                                | 
  5. +---------------------+--------------------------------------+ 
  6. | fixed_ip_address    |                                      | 
  7. | floating_ip_address | 172.16.20.13                         | 
  8. | floating_network_id | d44c19c2-2fe1-40e8-b07d-094111fe1a5e | 
  9. | id                  | de133088-d319-4094-9a2e-0b1762c85061 | 
  10. | port_id             |                                      | 
  11. | router_id           |                                      | 
  12. | status              | DOWN                                 | 
  13. | tenant_id           | 684ae003069d41d883f9cd0fcb252ae7     | 
  14. +---------------------+--------------------------------------+

将floating ip绑定至目标实例

  1. [root@controller ~]# nova floating-ip-associate demo-i1 172.16.20.13 
  2. [root@controller ~]# nova list 
  3. +--------------------------------------+---------+--------+------------+-------------+-------------------------------------+ 
  4. | ID                                   | Name    | Status | Task State | Power State | Networks                            | 
  5. +--------------------------------------+---------+--------+------------+-------------+-------------------------------------+ 
  6. | 15a35c37-2be2-4998-b98e-e2e472df0142 | demo-i1 | ACTIVE | -          | Running     | demo-net=192.168.22.2, 172.16.20.13 | 
  7. +--------------------------------------+---------+--------+------------+-------------+-------------------------------------+ 

修改默认安全策略

  1. [root@controller ~]# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 
  2. +-------------+-----------+---------+-----------+--------------+ 
  3. | IP Protocol | From Port | To Port | IP Range  | Source Group | 
  4. +-------------+-----------+---------+-----------+--------------+ 
  5. | icmp        | -1        | -1      | 0.0.0.0/0 |              | 
  6. +-------------+-----------+---------+-----------+--------------+ 

现在外部网络中的主机即可通过172.16.20.13进行访问

wKiom1W2MeLSTxWeAAHcvCY-n70256.jpg

其实是由192.168.22.2进行响应的,这里就不抓包分析了

如里还需要通过ssh方式远程连接172.16.20.13,还需要执行如下命令

  1. #nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 

至此,私有云基本搭建成功,接下来再说一下另一核心组件cinder,即存储服务

#p#

Block Storage服务

在没有共享存储的前提下终止实例就意味删除实例,映像文件也会被删除,要想实现用户在实例上创建的文件在实例重新创建后依然存在,只要在众compute节后背后使用共享存储即可。

Controller节点

安装所需软件包

  1. [root@controller ~]# yum install openstack-cinder 

初始化cinder数据库

  1. [root@controller ~]# openstack-db --init --service cinder --password cinder 

配置cinder服务

配置连入数据库的URL

  1. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. > database connection mysql://cinder:cinder@controller/cinder

在keystone中创建cinder用户

  1. [root@controller ~]# keystone user-create --name cinder --pass cinder --email cinder@scholar.com 
  2. +----------+----------------------------------+ 
  3. | Property |              Value               | 
  4. +----------+----------------------------------+ 
  5. |  email   |        cinder@scholar.com        | 
  6. | enabled  |               True               | 
  7. |    id    | 57ec93556e744300a1f0217c26fd912b | 
  8. |   name   |              cinder              | 
  9. | username |              cinder              | 
  10. +----------+----------------------------------+ 
  11. [root@controller ~]# keystone user-role-add --user=cinder --tenant=service --role=admin

连入keystone配置

  1. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT \ 
  2. >   auth_strategy keystone 
  3. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  4. >   auth_uri http://controller:5000 
  5. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  6. >   auth_host controller 
  7. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  8. >   auth_protocol http 
  9. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  10. >   auth_port 35357 
  11. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  12. >   admin_user cinder 
  13. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  14. >   admin_tenant_name service 
  15. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  16. >   admin_password cinder

配置其使用消息队列

  1. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. >   DEFAULT rpc_backend qpid 
  3. [root@controller ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  4. >   DEFAULT qpid_hostname controller

在keystone中注册cinder服务

  1. [root@controller ~]# keystone service-create --name=cinder --type=volume --description="OpenStack Block Storage" 
  2. +-------------+----------------------------------+ 
  3. |   Property  |              Value               | 
  4. +-------------+----------------------------------+ 
  5. | description |     OpenStack Block Storage      | 
  6. |   enabled   |               True               | 
  7. |      id     | 15cbd46094f541e49f5d7a717d65101a | 
  8. |     name    |              cinder              | 
  9. |     type    |              volume              | 
  10. +-------------+----------------------------------+ 
  11. [root@controller ~]# keystone endpoint-create \ 
  12. >   --service-id=$(keystone service-list | awk '/ volume / {print $2}') \ 
  13. >   --publicurl=http://controller:8776/v1/%\(tenant_id\)s \ 
  14. >   --internalurl=http://controller:8776/v1/%\(tenant_id\)s \ 
  15. >   --adminurl=http://controller:8776/v1/%\(tenant_id\)s 
  16. +-------------+-----------------------------------------+ 
  17. |   Property  |                  Value                  | 
  18. +-------------+-----------------------------------------+ 
  19. |   adminurl  | http://controller:8776/v1/%(tenant_id)s | 
  20. |      id     |     0e71b9f2dad24f699dce6be1ce8f40be    | 
  21. | internalurl | http://controller:8776/v1/%(tenant_id)s | 
  22. |  publicurl  | http://controller:8776/v1/%(tenant_id)s | 
  23. |    region   |                regionOne                | 
  24. |  service_id |     15cbd46094f541e49f5d7a717d65101a    | 
  25. +-------------+-----------------------------------------+ 
  26. [root@controller ~]# keystone service-create --name=cinderv2 --type=volumev2 --description="OpenStack Block Storage v2" 
  27. +-------------+----------------------------------+ 
  28. |   Property  |              Value               | 
  29. +-------------+----------------------------------+ 
  30. | description |    OpenStack Block Storage v2    | 
  31. |   enabled   |               True               | 
  32. |      id     | dbd3b5d766f546cfb54dfc8a75f56a8e | 
  33. |     name    |             cinderv2             | 
  34. |     type    |             volumev2             | 
  35. +-------------+----------------------------------+ 
  36. [root@controller ~]# keystone endpoint-create \ 
  37. >   --service-id=$(keystone service-list | awk '/ volumev2 / {print $2}') \ 
  38. >   --publicurl=http://controller:8776/v2/%\(tenant_id\)s \ 
  39. >   --internalurl=http://controller:8776/v2/%\(tenant_id\)s \ 
  40. >   --adminurl=http://controller:8776/v2/%\(tenant_id\)s 
  41. +-------------+-----------------------------------------+ 
  42. |   Property  |                  Value                  | 
  43. +-------------+-----------------------------------------+ 
  44. |   adminurl  | http://controller:8776/v2/%(tenant_id)s | 
  45. |      id     |     40edb783979842e99f95d75cfc5abbe8    | 
  46. | internalurl | http://controller:8776/v2/%(tenant_id)s | 
  47. |  publicurl  | http://controller:8776/v2/%(tenant_id)s | 
  48. |    region   |                regionOne                | 
  49. |  service_id |     dbd3b5d766f546cfb54dfc8a75f56a8e    | 
  50. +-------------+-----------------------------------------+ 

启动服务

  1. [root@controller ~]# service openstack-cinder-api start 
  2. Starting openstack-cinder-api:                             [  OK  ] 
  3. [root@controller ~]# service openstack-cinder-scheduler start 
  4. Starting openstack-cinder-scheduler:                       [  OK  ] 
  5. [root@controller ~]# chkconfig openstack-cinder-api on 
  6. [root@controller ~]# chkconfig openstack-cinder-scheduler on 

#p#

配置存储节点

准备逻辑卷

  1. [root@block ~]# pvcreate /dev/sdb 
  2.   Physical volume "/dev/sdb" successfully created 
  3. [root@block ~]# vgcreate cinder-volumes /dev/sdb 
  4.   Volume group "cinder-volumes" successfully created

安装并配置cinder存储服务

安装所需软件包

  1. [root@block ~]# yum install openstack-cinder scsi-target-utils 

keystone相关配置

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT \ 
  2. >   auth_strategy keystone 
  3. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  4. >   auth_uri http://controller:5000 
  5. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  6. >   auth_host controller 
  7. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  8. >   auth_protocol http 
  9. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  10. >   auth_port 35357 
  11. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  12. >   admin_user cinder 
  13. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  14. >   admin_tenant_name service 
  15. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf keystone_authtoken \ 
  16. >   admin_password cinder

消息队列配置

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. >   DEFAULT rpc_backend qpid 
  3. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  4. >   DEFAULT qpid_hostname controller 

连接数据库配置

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. > database connection mysql://cinder:cinder@controller/cinder

配置本节点提供cinder-volume服务使用的接口

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf DEFAULT my_ip 192.168.10.126 

指定Glance服务节点

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. >   DEFAULT glance_host controller 

指定卷信息文件存放位置

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. > DEFAULT volumes_dir /etc/cinder/volumes

配置scsi-target

  1. [root@block ~]# openstack-config --set /etc/cinder/cinder.conf \ 
  2. >   DEFAULT iscsi_helper tgtadm 
  3. [root@block ~]# vim /etc/tgt/targets.conf 
  4.   
  5. include /etc/cinder/volumes/*

启动服务

fedora 的epel源的中icehouse版本的openstack-cinder的服务openstack-cinder-volume默认为先读取/usr /share/cinder/cinder-dist.conf 这个配置文件,而其内容是有错误的。直接启动会导致创建后的卷无法关联至instace上,所以请禁止服务不再读取此文件。

  1. [root@block ~]# service openstack-cinder-volume start 
  2. Starting openstack-cinder-volume:                          [  OK  ] 
  3. [root@block ~]# service tgtd start 
  4. Starting SCSI target daemon:                               [  OK  ] 
  5. [root@block ~]# chkconfig openstack-cinder-volume on 
  6. [root@block ~]# chkconfig tgtd on 

卷创建测试

在cinder Controller节点执行如下命令,创建一个5G 大小名为demoVolume的逻辑卷

  1. [root@controller ~]# cinder create --display-name demoVolume 5 
  2. +---------------------+--------------------------------------+ 
  3. |       Property      |                Value                 | 
  4. +---------------------+--------------------------------------+ 
  5. |     attachments     |                  []                  | 
  6. |  availability_zone  |                 nova                 | 
  7. |       bootable      |                false                 | 
  8. |      created_at     |      2015-07-27T15:08:11.145570      | 
  9. | display_description |                 None                 | 
  10. |     display_name    |              demoVolume              | 
  11. |      encrypted      |                False                 | 
  12. |          id         | ab0d03a8-4e89-4a17-8dc3-3432426f07a2 | 
  13. |       metadata      |                  {}                  | 
  14. |         size        |                  5                   | 
  15. |     snapshot_id     |                 None                 | 
  16. |     source_volid    |                 None                 | 
  17. |        status       |               creating               | 
  18. |     volume_type     |                 None                 | 
  19. +---------------------+--------------------------------------+ 

列出所有卷

  1. [root@controller ~]# cinder list 
  2. +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+ 
  3. |                  ID                  |   Status  | Display Name | Size | Volume Type | Bootable | Attached to | 
  4. +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+ 
  5. | ab0d03a8-4e89-4a17-8dc3-3432426f07a2 | available |  demoVolume  |  5   |     None    |  false   |             | 
  6. +--------------------------------------+-----------+--------------+------+-------------+----------+-------------+ 

将此卷附加至指定的实例上

  1. [root@controller ~]# nova volume-attach demo-i1 ab0d03a8-4e89-4a17-8dc3-3432426f07a2 
  2. +----------+--------------------------------------+ 
  3. | Property | Value                                | 
  4. +----------+--------------------------------------+ 
  5. | device   | /dev/vdb                             | 
  6. | id       | ab0d03a8-4e89-4a17-8dc3-3432426f07a2 | 
  7. | serverId | 15a35c37-2be2-4998-b98e-e2e472df0142 | 
  8. | volumeId | ab0d03a8-4e89-4a17-8dc3-3432426f07a2 | 
  9. +----------+--------------------------------------+ 

查看关联结果

  1. [root@controller ~]# cinder list 
  2. +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+ 
  3. |                  ID                  | Status | Display Name | Size | Volume Type | Bootable |             Attached to              | 
  4. +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+ 
  5. | ab0d03a8-4e89-4a17-8dc3-3432426f07a2 | in-use |  demoVolume  |  5   |     None    |  false   | 15a35c37-2be2-4998-b98e-e2e472df0142 | 
  6. +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
wKioL1W2WZ2jTll9AALH_VugwUo493.jpg

挂载成功,接下来就可以打开对应实例控制台,查看磁盘的附加状态,并对磁盘进行相应的操作了,这里就不再演示了

The end

喜大普奔,终于结束了,非核心组件就不做介绍了,这篇幅我也是深深的醉了,做个实验真不容易,因内存有限,死卡死卡的,真怀疑会突然卡爆掉,辛亏不是2G的RAM。以上仅为个人学习整理,如有错漏,大神勿喷~~~

 

责任编辑:Ophira 来源: 51CTO博客
相关推荐

2015-02-06 09:39:16

OpenStack j云主机创建

2015-02-27 10:14:33

2015-06-10 14:37:09

网易私有云OpenStack

2015-06-17 09:43:45

云计算应用传统企业应用云平台

2015-05-13 11:37:58

openstack测试网络连通

2015-05-12 09:16:46

openstackneutron网络连通

2015-05-15 10:04:28

localhost

2015-03-03 10:23:22

ASPASP.NETBootStrap

2015-05-28 13:42:08

2015-04-08 14:44:40

2018-02-25 08:51:13

OpenStack私有云混合云

2014-12-24 11:13:06

可用性集availabilitset

2011-06-08 14:24:11

CitrixOpenStack私有云

2016-10-25 12:59:49

私有云OpenStack选项

2015-02-02 15:22:31

私有云OpenStackCloudStack

2017-05-03 09:49:14

OpenStack私有云搭建

2015-03-03 13:16:27

2013-09-29 16:09:26

OpenStack云计算

2015-07-01 10:25:07

Docker开源项目容器

2015-06-17 09:34:09

软件定义存储 云存储
点赞
收藏

51CTO技术栈公众号