openstack install
system version:centos6.5_64
openstack controller:192.168.1.123 openstack centos6.5_64(具体实施环境中要修改为openstackcontroller端的IP地址)
openstack controller:192.168.1.124 node centos6.5_64(具体实施环境中要修改为openstackcomputing node端的IP地址)
ntp server:210.72.145.44
Vmware Workstation 10.0.2 build-1744117 CPU引擎开启VT支持(虚拟化引擎首选模式:自动,虚拟化Intel VT-x/EPT或者AMD-V/RVI(V)打开)
双网卡选择桥接,VMnet0为桥接默认网络
CentOs6.5_64+Openstack+Kvm云平台部署 Havana(Nova-Network版)
controller install:
1.基础配置
(1).导入第三方安装源:
1.rpm -Uvhhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
3.yum installhttps://repos.fedorapeople.org/repos/openstack/openstack-havana/rdo-release-havana-7.noarch.rpm
(2).配置/etc/hosts主机名:
添加controller openstack和compute node节点主机名:
192.168.1.123 openstack
192.168.1.124 node
(3).配置网络eth0和eth1:
vi /etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE=eth0
HWADDR=00:0C:29:FD:0B:DE
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.123
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=202.106.46.151
DNS2=202.106.195.68
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
重启网络服务:service network restart
(4).关闭selinux:
vi /etc/sysconfig/selinux:
SELINUX=disabled
setenforce 0临时关闭selinux
使用getenforce查看:
Disabled
(5).修改/etc/sysctl.conf参数:
net.ipv4.ip_forward=1
sysctl -p使配置参数生效。
2.安装配置NTP服务:
(1).安装NTP服务:
yum install ntp
(2).配置NTP服务:
[[email protected] network-scripts]# more /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 210.72.145.44
keys /etc/ntp/keys
(3).启动NTP服务,设置开机自启动:
service ntpd start
chkconfig ntpd on
3.配置安装MYSQL:
(1).安装MySQL服务:yum -y install mysqlmysql-server MySQL-python
(2).修改MySQL配置文件:
vi /etc/my.cnf
bind-address=0.0.0.0
(3).启动MySQL服务,设置开机自启动:
service mysqld start
chkconfig mysqld on
(4).修改MySQL密码为passwd:
mysqladmin -uroot password ‘passwd‘
4.安装配置qpid服务:
(1).安装qpid服务:
yum install qpid-cpp-server memcached
(2).修改/etc/qpidd.conf配置文件,将auth设置为no:
auth=no
(3)启动qpid服务,设置开机启动:
service qpidd start
chkconfig qpidd on
(4).安装openstack工具包:
yum install openstack-utils
5.安装配置keystone
5.1.初始化keystone
(1).安装keystone服务:
yum -y install openstack-keystone
(2).创建keystone数据库,修改配置文件中的数据库链接:
openstack-db --init --service keystone
(3).修改配置文件中的数据库链接:
openstack-config --set /etc/keystone/keystone.conf sql connectionmysql://keystone:[email protected]/keystone
(4).使用OpenSSL随机生成一个令牌,将其存储在配置文件中:
export SERVICE_TOKEN=$(openssl rand -hex 10) //随机生成SERVICE_TOKEN值,请牢记
export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0
mkdir /root/config
echo $SERVICE_TOKEN > /root/config/admin.txt
cat /root/config/admin.txt
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $SERVICE_TOKEN
*注:将生成的SERVICE_TOKEN值写入文件中保存,以备后续使用,后面涉及到的SERVICE_TOKEN值都是在admin.txt文件中获取的。所以一旦写入文件,不要再次运行命令生成SERVICE_TOKEN,否则前后不一致会为调试带来麻烦。
(5).keystone-manage pki_setup --keystone-user keystone--keystone-group keystone
chown -R keystone:keystone /etc/keystone/*
(6).启动keystone服务,设置开机自启动:
service openstack-keystone start
chkconfig openstack-keystone on
5.2.定义Users、Tenants and Roles
(1).修改.bash_profile文件,添加以下参数:
vi .bash_profile:
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=password
export OS_AUTH_URL=http://127.0.0.1:5000/v2.0
export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0
export SERVICE_TOKEN=e447701f67f53ead9bbe
source .bash_profile
(2).为管理员用户创建一个tenant,为openstack其他服务的用户创建一个tenant:
keystone tenant-create --name=admin --description=‘AdminTenant‘
keystone tenant-create --name=service --description=‘ServiceTenant‘
(3).创建一个管理员用户admin:
keystone user-create --name=admin --pass=password [email protected]
(4).创建一个管理员角色admin:
keystone role-create --name=admin
(5).将角色添加到用户:
keystone user-role-add --user=admin --tenant=admin --role=admin
5.3.定义Services 和API Endpoints
(1).为Keystone创建一个服务:
keystone service-create --name=keystone --type=identity--description="KeystoneIdentity Service"
(2).使用服务ID创建一个endpoint:
vim /root/config/keystone.sh
#! /bin/bash
my_ip=192.168.1.123
service=$(keystone service-list |awk ‘/keystone/ {print $2}‘)
keystone endpoint-create --service-id=$service--publicurl=http://$my_ip:5000/v2
.0 --internalurl=http://$my_ip:5000/v2.0 --adminurl=http://$my_ip:35357/v2.0
sh /root/config/keystone.sh
6.安装配置Glance
6.1初始化Glance
(1).安装Glance服务:
yum install openstack-glance
(2).创建Glance数据库:
openstack-db --init --service glance
(3).修改配置文件中的数据库链接:
openstack-config --set /etc/glance/glance-api.conf DEFAULTsql_connection mysql://glance:[email protected]/glance
openstack-config --set /etc/glance/glance-registry.conf DEFAULTsql_connection mysql://glance:[email protected]/glance
6.2创建User,定义Service和API Endpoints
(1).为Glance服务创建一个glance用户:
keystone user-create --name=glance [email protected]
keystone user-role-add --user=glance --tenant=service--role=admin
(2).为Glance创建一个服务:
keystone service-create --name=glance --type=image--description="Glance ImageService"
(3).使用服务ID创建一个endpoint:
vi /root/config/glance.sh
#! /bin/bash
my_ip=192.168.1.123
service=$(keystone service-list |awk ‘/glance/ {print $2}‘)
keystone endpoint-create --service-id=$service--publicurl=http://$my_ip:9292 --internalurl=http://$my_ip:9292--adminurl=http://$my_ip:9292
sh /root/config/glance.sh
6.3配置Glance服务
(1).将keystone认证信息添加到glance配置文件中:
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken auth_host 127.0.0.1
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken auth_port 35357
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken auth_protocol http
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken admin_tenant_name service
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken admin_user glance
openstack-config --set /etc/glance/glance-api.confkeystone_authtoken admin_password service
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken auth_host 127.0.0.1
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken auth_port 35357
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken auth_protocol http
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken admin_tenant_name service
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken admin_user glance
openstack-config --set /etc/glance/glance-registry.confkeystone_authtoken admin_password service
(2).修改ini文件路径,将keystone认证信息添加到ini文件中:
openstack-config --set /etc/glance/glance-api.conf paste_deployconfi_file /etc/glance/glance-api-paste.ini
openstack-config --set /etc/glance/glance-api.conf paste_deployflavor keystone
openstack-config --set /etc/glance/glance-registry.confpaste_deploy config_file /etc/glance/glance-registry-paste.ini
openstack-config --set /etc/glance/glance-registry.confpaste_deploy flavor keystone
cp /usr/share/glance/glance-api-dist-paste.ini/etc/glance/glance-api-paste.ini
cp /usr/share/glance/glance-registry-dist-paste.ini/etc/glance/glance-registry-paste.ini
chown -R root:glance /etc/glance/glance-api-paste.ini
chown -R root:glance /etc/glance/glance-registry-paste.ini
openstack-config --set /etc/glance/glance-api-paste.inifilter:authtoken auth_host 127.0.0.1
openstack-config --set /etc/glance/glance-api-paste.inifilter:authtoken admin_tenant_name service
openstack-config --set /etc/glance/glance-api-paste.inifilter:authtoken admin_user glance
openstack-config --set /etc/glance/glance-api-paste.inifilter:authtoken admin_password service
openstack-config --set /etc/glance/glance-registry-paste.inifilter:authtoken auth_host 127.0.0.1
openstack-config --set /etc/glance/glance-registry-paste.inifilter:authtoken admin_tenant_name service
openstack-config --set /etc/glance/glance-registry-paste.inifilter:authtoken admin_user glance
openstack-config --set /etc/glance/glance-registry-paste.inifilter:authtoken admin_password service
(3).修改镜像文件的存放路径(默认存放在/var/lib/glance目录下,如果不需要修改,此步骤可省略)
openstack-config --set /etc/glance/glance-api.conf DEFAULTfilesystem_store_datadir /openstack/lib/glance/images/
openstack-config --set /etc/glance/glance-api.conf DEFAULTscrubber_datadir
/openstack/lib/glance/scrubber
openstack-config --set /etc/glance/glance-api.conf DEFAULTimage_cache_dir /openstack/lib/glance/image-cache/
mkdir -p /openstack/lib
cp -r /var/lib/glance/ /openstack/lib/
chown -R glance:glance /openstack/lib/glance/
(4).启动glance服务,设置开机自启动
service openstack-glance-api start
service openstack-glance-registry start
chkconfig openstack-glance-api on
chkconfig openstack-glance-registry on
6.4Glance测试
(1).为了测试镜像服务的安装,至少下载一个虚拟机镜像,这个镜像一定要能够与OpenStack一起工作。例如,CirrOS是一个很小的测试镜像,它经常用于测试OpenStack部署。这个过程,使用了64-bit的CirrOS QCOW2镜像。
cd /openstack/lib/glance/images/
wget http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img
上传该镜像到该镜像服务中
glance image-create --name=imageLabel --disk-format=fileFormat \
--container-format=containerFormat --is-public=accessValue < imageFile
参数说明:
imageLabel 任意的标志,该名称由用户指向镜像。
fileFormat 说明镜像文件格式,有效的文件格式包括:
qcow2,raw,vhd,vmdk,vdi,iso,aki,ari,and ami等等。
containerFormat 指定的容器格式,有效的格式包括:bare,ovf,aki,ari and ami。
指定bare格式表明镜像文件不在文件格式里,也就是说包含有关虚拟机的元数据。虽然目前这个字段是必须的,但实际上任何其它的OpenStack服务不使用它,而且在系统运行时也没有效果。因为该值在任何地方都没有用到,为了安全,一直指定bare作为容器的格式。
accessValue 指定镜像是否能访问。
true --所有的用户都能够查看和使用该镜像。
false --只有管理员才能够查看和使用该镜像
imageFile 指定你下载的镜像文件名称
glance image-create --name="CirrOS 0.3.1"--disk-format=qcow2 --container-format=bare --is-public=true <cirros-0.3.1-x86_64-disk.img
glance image-create --name="cirros"--disk-format=qcow2 --container-format=ovf --is-public=true <cirros-0.3.1-x86_64-disk.img
查看glance数据库中的表images,就可以看到添加的镜像文件。
再查看/openstack/lib/glance/目录下,就有一个与images表中ID号相同的文件。
(2).查看镜像:
glance image-list
7.安装配置Nova
7.1初始化Nova
(1).安装nova:
yum install openstack-nova
(2).创建nova数据库:
Openstack-db –init –service nova
7.2创建User,定义Services和API Endpoints
(1).编写脚本:
vi /root/config/nova-user.sh:
#! /bin/bash
my_ip=192.168.1.123
keystone user-create --name=nova [email protected]
keystone user-role-add --user=nova --tenant=service--role=admin
keystone service-create --name=nova --type=compute--description="Nova Compute S
ervice"
service=$(keystone service-list |awk ‘/nova/ {print $2}‘)
keystone endpoint-create --service-id=$service--publicurl=http://$my_ip:8774/v2
/%\(tenant_id\)s--internalurl=http://$my_ip:8774/v2/%\(tenant_id\)s --adminurl=
http://$my_ip:8774/v2/%\(tenant_id\)s
(2).运行脚本,创建用户、服务及api endpoint:
sh /root/config/nova-user.sh
7.3配置nova服务:
(1).修改/etc/nova.conf配置文件:
vi /etc/nova/nova.conf:
more /etc/nova/nova.conf |grep -v "#"|grep -v"^$"
[DEFAULT]
my_ip=192.168.1.123
notify_on_state_change=vm_and_task_state
state_path=/openstack/lib/nova
network_manager=nova.network.manager.FlatDHCPManager
instance_usage_audit_period=hour
auth_strategy=keystone
allow_resize_to_same_host=true
instance_usage_audit=True
glance_api_servers=192.168.1.123:9292
public_interface=eth0
flat_network_bridge=br1
flat_interface=eth1
multi_host=True
verbose=True
notification_driver=nova.openstack.common.notifier.rpc_notifier
rpc_backend=nova.openstack.common.rpc.impl_qpid
qpid_hostname=192.168.1.123
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
libvirt_type=kvm
novncproxy_base_url=http://192.168.1.123:6080/vnc_auto.html
vncserver_listen= $my_ip
vncserver_proxyclient_address= $my_ip
vnc_enabled=true
vnc_keymap=en-us
[hyperv]
[zookeeper]
[osapi_v3]
[conductor]
[keymgr]
[cells]
[database]
[image_file_url]
[baremetal]
[rpc_notifier2]
[matchmaker_redis]
[ssl]
[trusted_computing]
[upgrade_levels]
[matchmaker_ring]
[vmware]
[spice]
[keystone_authtoken]
admin_tenant_name=service
admin_user=nova
admin_password=service
auth_host=127.0.0.1
auth_port=35357
auth_protocol=http
因上述配置文件中修改了instances实例存放的位置,还需要作一下操作:
修改instances路径,设置目录权限:
cp -r /var/lib/nova/ /openstack/lib/
chown -R nova:nova /openstack/lib/nova/
(2).配置libvirtd服务,删除virbr0
启动libvirtd服务:
service libvirtd start
查看net-list,发现default:
virsh net-list
删除default,即virbr0:
virsh net-destroy default
virsh net-undefine default
重启libvirtd服务,设置开机自启动:
service libvirtd restart
chkconfig libvirtd on
(3).启动nova相关服务,设置开机自启动:
service messagebus start
chkconfig messagebus on
启动nova服务,采用network网络服务:
service openstack-nova-api start
service openstack-nova-cert start
service openstack-nova-consoleauth start
service openstack-nova-scheduler start
service openstack-nova-conductor start
service openstack-nova-novncproxy start
service openstack-nova-compute start
service openstack-nova-network start
chkconfig openstack-nova-api on
chkconfig openstack-nova-cert on
chkconfig openstack-nova-consoleauth on
chkconfig openstack-nova-scheduler on
chkconfig openstack-nova-conductor on
chkconfig openstack-nova-novncproxy on
chkconfig openstack-nova-compute on
chkconfig openstack-nova-network on
7.4Nova测试:
(1).创建网络:
nova network-create VMnet0 --fixed-range-v4=192.168.1.0/24--bridge-interface=br1 --multi-host=T --dns1=202.106.46.151 --dns2=202.106.195.68
nova-manage floating create --ip_range=192.168.1.0/24
VMnet0为本地网卡桥接的网络,fixed-range为fixed_IP地址的范围,用在VM间通信,floating_IP用在对外业务上,进行NAT转换后进行业务使用。桥接接口为br1.
查看网络:
nova network-list
查看nova管理网络的信息:
nova-manage network list
(2).设置安全组:
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
openstack里的浮动ip知识点:
缺省情况下实例会被赋予固定ip,这时并不能保证实例会马上可以从外面访问到,一般来说需要配置防火墙来允许公共ip,然后建立一条NAT规则从公共ip到私有ip的映射。
Ag引入了一个叫浮动ip的概念,浮动ip是一些可以从外部访问的ip列表,通常从isp哪里买来的。
浮动ip缺省不会自动赋给实例,用户需要手动从地址池里抓取然后赋给实例。一旦用户抓去后,他就变成这个ip的所有者,可以随意赋给自己拥有的其他实例。如果实例死掉了的话,用户也不会失去这个浮动ip,可以随时赋给其他实例。暂时不支持为了负载均衡多实例共享一个浮动ip。
而对于固定ip来说,实例启动后获得的ip也是自动的,不能指定某一个。所以当一个VM歇菜了,再启动也许固定ip就换了一个。
系统管理员可以配置多个浮动ip池,这个ip池不能指定租户,每个用户都可以去抓取。多浮动ip池是为了考虑不同的isp服务提供商,免得某一个isp出故障带来麻烦。
如果运行的是企业云,浮动ip池就是那些ag外的数据中心都能访问到的ip。
浮动ip机制给云用户提供了很多灵活性,也给系统管理员减少了安全风险,尽量只让Ag软件去改防火墙会安全些。
浮动 IP :
要了解浮动 IP 是如何实现的,首先将一个浮动 IP 关联到此实例的固定 IP。之前所创建的这个实例的固定 IP 是 10.10.10.2。 在默认池内创建一个浮动 IP
要在默认池内创建一个浮动 IP,请运行一下代码:
# nova-manage floating create --ip_range=192.168.1.232/30
要从这个池分派一个浮动 IP,请运行一下代码:
# nova floating-ip-create
这样,就拥有一个 IP 192.168.1.233。
现在将它分配给 ID 为 8f773639-c04f-4885-9349-ac7d6a799843 的实例:
# nova add-floating-ip 8f773639-c04f-4885-9349-ac7d6a799843 192.168.1.233 将浮动 IP 绑定到公共接口
FLAGS.public_interface 被用来绑定浮动 IP。
在运行了 nova add-floating-ip 命令后,可以看到 public_interface 下就具有了如下的浮动 IP: # ip addr list dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 08:11:96:75:91:54 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.90/16 brd 192.168.255.255 scope global wlan0 inet 192.168.1.233/32 scope global wlan0
inet6 fe80::a11:96ff:fe75:9154/64 scope link valid_lft forever preferred_lft forever NAT 表内针对浮动 IP 的规则
在此实例获得了 nova-network 主机上的一个浮动 IP 后,这些规则适用:
-A nova-network-OUTPUT -d 192.168.1.233/32 -j DNAT --to-destination 10.10.10.2
-A nova-network-PREROUTING -d 192.168.1.233/32 -j DNAT --to-destination 10.10.10.2
-A nova-network-float-snat -s 10.10.10.2/32 -j SNAT --to-source 192.168.1.233
您会看到该 dNAT 规则被用来将此浮动 IP 转换成此实例的固定 IP。如果一个包到达 nova-network 主机并以浮动 IP 为目标 IP,则此目标 IP 就会被转换。然后,就会有另一项 sNAT 规则会将来自此实例的固定 IP 的流量转换到此浮动 IP。由于所有从 VM 到固定网络之外的流量均被指向网关(是由 nova-network 的 dnsmasq 进行设置),有了 sNAT 规则,出 VM 的流量就可以成功标志成来自此浮动 IP。此外,已包装的 OUTPUT 链内还有一个 dNAT 规则,允许 nova-network 上的本地过程访问具有浮动 IP 的 VM。
使用浮动 IP 的 Ping VM:
要将 VM 与浮动 IP Ping 在一起,也需要一些规则。请记住,在此 nova-compute 主机上,针对每个实例必须有一个特定链;其内的规则只允许来自固定子集内的 IP 的流量。如果想要 ping 一个浮动 IP,流量就会被这些规则丢弃,因为 ping 包的源 IP 并不在此固定子集内。显然,需要一个规则以允许 icmp 流量。 为了添加一个允许 ping 的规则,可以使用Ag的安全组规则的概念:
# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 之后,就可以看到在此实例的特定链下多创建了一个规则:
-A nova-compute-inst-1 -p icmp -j ACCEPT
同样的方式,可以对具有浮动 IP 的 VM 启用 SSH。
(3).创建虚拟机实例:
查看可用实例:
nova image-list
创建虚拟机实例:
nova flavor-list可以看到镜像的模板
nova boot --flavor 1 --image "CirrOS 0.3.1" vm01
查看虚拟机实例运行状态:
nova list
nova flavor-list可以看到镜像的模板
nova-manager service list查看所有的服务状况
8.安装配置Horizon
(1).安装Horizon
yum install openstack-dashboard
(2).修改local_settings文件,将DEBUG=Flase修改为DEBUG=True:
vi /etc/openstack-dashboard/local_settings:
DEBUG=True
(3).修改httpd.conf文件,将#ServerName www.example.com:80修改为ServerName 192.168.1.123:80
vi /etc/httpd/conf/httpd.conf:
#ServerName www.example.com:80
ServerName 192.168.1.123:80
(4).修改local_settings.py文件,将Member修改为”admin”:
vi/usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py:
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "admin"
(5).启动http服务,设置开机自启动:
service httpd start
chkconfig httpd on
(6).重启nova-api服务:
service openstack-nova-api restart
(7).添加防火墙策略:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dports 5900:6000 -jACCEPT
iptables -I INPUT -p tcp --dport 6080 -j ACCEPT
service iptables save
(8).Horizon安装完成,使用http://192.168.1.123/dashboard访问openstack web界面。
用户名:admin
密码:password
9.添加新项目
(1).为操作员用户创建一个tenant:
keystone tenant-create --name=manager --description=‘ManagerTenant‘
(2).创建操作员:
keystone user-create --name=manager [email protected]
(3).创建一个管理员角色manager:
keystone role-create --name=manager
(4).将manager角色添加到用户:
keystone user-role-add --user=manager --tenant=manager--role=manager
(5).将nova角色添加到用户:
keystone user-role-add --user=nova --tenant=service--role=manager