这是博主 @Ethan_熠森张将近一个月的劳动成果吧?有需要的人赶紧mark, 同时不要忘记感谢博主
OpenStack多节点部署(一)——服务器选型
服务器的选型在类似于我们这样的非互联网类的传统公司也会成为一个很大的问题。以为之前并没有相关大规模服务器部署的经验,而且在采购等等环节受制于国企的一些制度和利益的影响,并不是能如意的选择到自己真正适合需要的机器。
还有就是买KVM的时候千万别忘了RemoteKey,不然总跑机房也挺麻烦的。
OpenStack多节点部署(二)——操作系统安装
在前面一章中,为大家介绍了搭建云计算运营系统的服务器选型,相信经过这段时间,大家都已经成功采购到了符合业务量需求的服务器配置。下面将分享操作系统的安装过程中的思路:
如果您已经从WIKI得到了OpenStack的部署文档,比如os-compute-starterguide-trunk,您会发现文档中的安装演示步骤都是以Ubuntu为模板的。这也不足为怪,因为OpenStack基金会与Ubuntu的东家Canonical合作甚密;并且文档是以搭建实验开发平台为读者目标进行编攒的,以Ubuntu的apt-get管理方式进行OpenStack的安装确实也会给初学者带来许多方便。但是,如果您需要搭建一个多节点平台,一个真正需要运营的生产环境,还是建议使用CentOs,或者是商业系统RedHat等。因为毕竟Ubuntu开发中面向的群体主要还是桌面用户,对于服务器的支持并不是十分友好。刚开始接触OpenStack的时候,我也是按照教程使用的Ubuntu12.04作为操作系统,碰到了许多问题,拖延了部署的时间。
1、安装后开机不进入系统,显示并定在了initramfs,这是因为服务器启动时间过长让Ubuntu系统错认为是某些硬件系统初始化失败,系统默认的超时时间过短,我们需要在
- sudo vi /etc/default/grub
中修改
- GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=600"
调大超时的时间,并且更新grub
- sudo grub-update
2、在/etc/network/interfaces中修改网络配置后重启网络服务,发现IP并没有改为我们在配置文件中设置的IP,发现是因为启动了Gnome的桌面,桌面系统中的网络管理软件接管了网络服务,需要在桌面右上角手动将其禁用。
3、Ubuntu没完没了的更新,让你需要经常重启服务器,造成服务的中断。
种种问题因篇幅不一一赘述,虽然说Ubuntu在桌面电脑的表现上还是上佳的,但是服务器上我们还是选用较为稳定的CentOs6.3吧。
安装CentOS6.3最好为光盘安装,在mirrors下载CentOS-6.3-x86_64-bin-DVD1.iso,刻录一张DVD光盘。如果没有光驱,可以用ultraISO制作U盘安装盘,需要注意的是制作完U盘安装盘后还要将CentOS-6.3-x86_64-bin-DVD1.iso这个文件也拷贝到U盘的根目录下,并且要将bios的启动方式从bios方式改为EFI方式。
计算节点的分区可以选择默认模式,如果是控制节点推荐手动分区,因为要安装nova-volume服务,需要一个独立的LVM卷。
CentOS6.3网络设备的标识方法从Eth0改为了Em1,在做配置的时候需要注意。最近已经成功测试了在R510/710系列上利用自动化部署cobbler自动安装CentOS6.3系统,稍后有时间会给大家分享。
先写到这里,后面章节会给大家陆续介绍OpenStack各个组件在CentOS上的安装。
OpenStack多节点部署(三)——网络配置
在上一章中,和大家讨论了操作系统安装的方方面面,这章将带来OpenStack的网络配置。
初接触OpenStack的人,在看了部署文档之后,可能会被Nova-Network,Fix-ip,Floating-ip等概念弄的一头雾水,下面会一一详细道来。
Flat DHCP Network
上图大家可能看的不是很明白,其实OpenStack的nova-network部署可以分成3个网段。公网网段,内网网段和虚拟机网段。公网网段指的是可以直接访问到互联网的网段(但是此IP不一定非要从公司外部也能访问,这里的内外是从OpenStack网络系统出发而不是从公司网络的视角出发,请注意),也就是Floating IP配置的网段,我把它绑定在了Eth0。内网网段指的是OpenStack系统内各服务器之间互联的顶层交换机所划的网段,这里将其设置为192.168.3.X,此网段无需出口,我把它绑定在了Eth1,在公司的网络也就是公网网络是访问不到的。虚拟机网段指的是虚拟机运行时其IP所在的网段,也就是Nova-Network中提到的Fix-IP,由于NOVA底层是采用libvirt,所以OpenStack内部默认将其设置为桥接网络br100,这里将其桥接在内网网络上,也就是Eth1。
在服务器选型的时候,我们已经选择了千兆双网卡的机型。这样公网网段和内网网段就可以绑定到两个不同的网口。有的实验环境中,比如沙克老师的文章将两个公网和内网两个网段都配置在了一个网卡上,在实验环境是可以的,但是生产环境不推荐,因服务器如果和外部网络数据交换量大的时候,会使内部服务如nova-scheduler,nova-volume等服务带来延迟。
我的服务器网络配置
- auto lo
- iface lo inet loopback
- auto eth0
- iface eth0 inet static
- address 10.2.15.3
- netmask 255.255.255.0
- broadcast 10.2.15.255
- gateway 10.2.15.1
- dns-nameservers 8.8.8.8
- auto eth1
- iface eth1 inet static
- address 192.168.3.1
- netmask 255.255.255.0
- network 192.168.3.0
- broadcast 192.168.3.255
上面提到的Flat DHCP Network是Nova-Network服务的一种模式。另外还有Flat,VLan等,这里就不一一介绍了。Flat DHCP指的是所有虚拟机处在同一个平坦的网段上,且DHCP服务自动为其分配IP。
配置Fixed-IP命令
- sudo nova-manage network create private --fixed_range_v4=192.168.3.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
使用此命令,我们可以详细配置虚拟机网段Fixed-IP所在的网段,掩码,桥接网络名称,桥接网络端口等参数,后面在NOVA章将详细介绍。
OpenStack多节点部署(四)——KeyStone
前面啰嗦了这么多,终于要正式进入OpenStack各组件安装部署的章节了。首先为大家带来的是OpenStack的用户登陆鉴权组件,KeyStone的安装。
首先,安装mysql服务,并分别创建Nova, glance, swift等组件独立的用户和口令
- sudo apt-get install mysql-server python-mysqldb
安装过程中提示设置密码,这里设置为mygreatsecret
- sed -i '/bind-address/ s/127.0.0.1/0.0.0.0/' /etc/mysql/my.cnf
- sudo restart mysql
- sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'
- sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'
- sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"
- sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"
- sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'
- sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'
- sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"
- sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"
- sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'
- sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'
- sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"
- sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret');"
安装KeyStone组件
- sudo apt-get install keystone python-keystone python-keystoneclient
- sed -i '/admin_token/ s/ADMIN/admin/' /etc/keystone/keystone.conf
- sed -i '/connection/ s/sqlite\:\/\/\/\/var\/lib\/keystone\/keystone.db/mysql\:\/\/keystonedbadmin\:keystonesecret@192.168.3.1\/keystone/' /etc/keystone/keystone.conf
- #注意修改mysql服务器地址
- sudo service keystone restart
- sudo keystone-manage db_sync
- export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
- export SERVICE_TOKEN=admin
后面就是按照文档,创建租户Tenants,创建用户Users,创建角色Roles,最后进行租户、用户、角色之间的关联。不管创建什么类型,都会返回一个UID值,后面的步骤会用到前面的id,比如用户角色关联命令
- keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID
比如先创建用户
- keystone user-create --name admin --pass admin --email admin@foobar.com
- keystone user-list
- +----------------------------------+---------+-------------------+--------+
- | id | enabled | email | name |
- +----------------------------------+---------+-------------------+--------+
- | b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |
- | ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |
- +----------------------------------+---------+-------------------+--------+
如上,我们创建的名字为admin的用户就会显示出来,后面的步骤就要用这个ID。
大家会发现这样最非常麻烦,而且id这样拷贝很容易出错,所以我们要用脚本来自动完成上面的这些操作,以及service endpoint的操作。
- #!/bin/bash
- #
- # Initial data for Keystone using python-keystoneclient
- #
- # Tenant User Roles
- # ------------------------------------------------------------------
- # admin admin admin
- # service glance admin
- # service nova admin, [ResellerAdmin (swift only)]
- # service quantum admin # if enabled
- # service swift admin # if enabled
- # service cinder admin # if enabled
- # service heat admin # if enabled
- # demo admin admin
- # demo demo Member, anotherrole
- # invisible_to_admin demo Member
- # Tempest Only:
- # alt_demo alt_demo Member
- #
- # Variables set before calling this script:
- # SERVICE_TOKEN - aka admin_token in keystone.conf
- # SERVICE_ENDPOINT - local Keystone admin endpoint
- # SERVICE_TENANT_NAME - name of tenant containing service accounts
- # SERVICE_HOST - host used for endpoint creation
- # ENABLED_SERVICES - stack.sh's list of services to start
- # DEVSTACK_DIR - Top-level DevStack directory
- # KEYSTONE_CATALOG_BACKEND - used to determine service catalog creation
- SERVICE_HOST=${SERVICE_HOST:-192.168.3.1}
- #将这个IP修改为Keystone服务器的内网IP
- SERVICE_TOKEN=${SERVICE_TOKEN:-admin}
- SERVICE_ENDPOINT=${SERVICE_ENDPOINT:-http://localhost:35357/v2.0}
- # Defaults
- export SERVICE_TOKEN=$SERVICE_TOKEN
- export SERVICE_ENDPOINT=$SERVICE_ENDPOINT
- SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}
- function get_id () {
- echo `"$@" | awk '/ id / { print $4 }'` # '$@'代表函数的参数,参数就是get_id后面接的KeyStone命令
- }
- # Tenants
- # -------
- ADMIN_TENANT=$(get_id keystone tenant-create --name=admin)
- SERVICE_TENANT=$(get_id keystone tenant-create --name=$SERVICE_TENANT_NAME)
- # Users
- # -----
- ADMIN_USER=$(get_id keystone user-create --name=admin \
- --pass=admin \
- --email=admin@example.com)
- NOVA_USER=$(get_id keystone user-create --name=nova \
- --pass=nova \
- --email=demo@example.com)
- GLANCE_USER=$(get_id keystone user-create --name=glance \
- --pass=glance \
- --email=demo@example.com)
- SWIFT_USER=$(get_id keystone user-create --name=swift \
- --pass=swift \
- --email=demo@example.com)
- # Roles
- # -----
- ADMIN_ROLE=$(get_id keystone role-create --name=admin)
- # ANOTHER_ROLE demonstrates that an arbitrary role may be created and used
- # TODO(sleepsonthefloor): show how this can be used for rbac in the future!
- MEMBER_ROLE=$(get_id keystone role-create --name=Member)
- # Add Roles to Users in Tenants
- keystone user-role-add --user_id $ADMIN_USER --role_id $ADMIN_ROLE --tenant_id $ADMIN_TENANT
- keystone user-role-add --user_id $NOVA_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT
- keystone user-role-add --user_id $GLANCE_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT
- keystone user-role-add --user_id $SWIFT_USER --role_id $ADMIN_ROLE --tenant_id $SERVICE_TENANT
- # The Member role is used by Horizon and Swift so we need to keep it:
- keystone user-role-add --user_id $ADMIN_USER --role_id $MEMBER_ROLE --tenant_id $ADMIN_TENANT
- # Services
- # --------
- # Keystone
- KEYSTONE_SERVICE=$(get_id keystone service-create \
- --name=keystone \
- --type=identity \
- --description="Keystone Identity Service")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $KEYSTONE_SERVICE \
- --publicurl "http://$SERVICE_HOST:5000/v2.0" \
- --adminurl "http://$SERVICE_HOST:35357/v2.0" \
- --internalurl "http://$SERVICE_HOST:5000/v2.0"
- # Nova
- NOVA_SERVICE=$(get_id keystone service-create \
- --name=nova \
- --type=compute \
- --description="Nova Compute Service")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $NOVA_SERVICE \
- --publicurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s" \
- --adminurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s" \
- --internalurl "http://$SERVICE_HOST:8774/v2/\$(tenant_id)s"
- # Nova needs ResellerAdmin role to download images when accessing
- # swift through the s3 api. The admin role in swift allows a user
- # to act as an admin for their tenant, but ResellerAdmin is needed
- # for a user to act as any tenant. The name of this role is also
- # configurable in swift-proxy.conf
- #RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin)
- #keystone user-role-add \
- # --tenant_id $SERVICE_TENANT \
- # --user_id $NOVA_USER \
- # --role_id $RESELLER_ROLE
- # Volume
- VOLUME_SERVICE=$(get_id keystone service-create \
- --name=volume \
- --type=volume \
- --description="Volume Service")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $VOLUME_SERVICE \
- --publicurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
- --adminurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" \
- --internalurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s"
- # Glance
- GLANCE_SERVICE=$(get_id keystone service-create \
- --name=glance \
- --type=image \
- --description="Glance Image Service")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $GLANCE_SERVICE \
- --publicurl "http://$SERVICE_HOST:9292/v1" \
- --adminurl "http://$SERVICE_HOST:9292/v1" \
- --internalurl "http://$SERVICE_HOST:9292/v1"
- # Swift
- SWIFT_SERVICE=$(get_id keystone service-create \
- --name=swift \
- --type="object-store" \
- --description="Swift Service")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $SWIFT_SERVICE \
- --publicurl "http://$SERVICE_HOST:8080/v1/AUTH_\$(tenant_id)s" \
- --adminurl "http://$SERVICE_HOST:8080/v1" \
- --internalurl "http://$SERVICE_HOST:8080/v1/AUTH_\$(tenant_id)s"
- # EC2
- EC2_SERVICE=$(get_id keystone service-create \
- --name=ec2 \
- --type=ec2 \
- --description="EC2 Compatibility Layer")
- keystone endpoint-create \
- --region RegionOne \
- --service_id $EC2_SERVICE \
- --publicurl "http://$SERVICE_HOST:8773/services/Cloud" \
- --adminurl "http://$SERVICE_HOST:8773/services/Admin" \
- --internalurl "http://$SERVICE_HOST:8773/services/Cloud"
最后,用命令验证查看KeyStone是否安装正确
- keystone tenant-list
- keystone user-list
- keystone role-list
- keystone service-list
好了,有关KeyStone的相关部署方法就介绍到这里。
OpenStack多节点部署(五)——Nova
这章将为大家介绍OpenStack最重要的核心组件,虚拟机管理组件Nova的安装部署。虽然是最重要的组件,但是因为包装的非常完整,所以如果前面的网络配置和KeyStone部署都正确完成的话,Nova组件的安装是非常简单的。
首先安装Nova组件
- sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth
2013-02-21 修改
OpenStack服务器节点迁移(修改IP)后引发的nova-compute不启动 由于这篇文章提到的遇到服务器搬迁外网地址需要修改等问题,导致nova不能启动,这里在nova.conf中增加--iscsi_ip_address=192.168.3.1,这样系统创建的volume都会指向内网IP,避免类似的错误。
修改节点的/etc/nova/nova.conf配置文件
- --dhcpbridge_flagfile=/etc/nova/nova.conf
- --dhcpbridge=/usr/bin/nova-dhcpbridge
- --logdir=/var/log/nova
- --state_path=/var/lib/nova
- --lock_path=/var/lock/nova
- --allow_admin_api=true
- --use_deprecated_auth=false
- --auth_strategy=keystone
- --scheduler_driver=nova.scheduler.simple.SimpleScheduler
- --s3_host=192.168.3.1
- --ec2_host=192.168.3.1
- --rabbit_host=192.168.3.1
- --cc_host=192.168.3.1
- --nova_url=http://192.168.3.1:8774/v1.1/
- --routing_source_ip=192.168.3.1
- --glance_api_servers=192.168.3.1:9292
- --image_service=nova.image.glance.GlanceImageService
- --iscsi_ip_prefix=192.168.4
- --iscsi_ip_address=192.168.3.1
- --sql_connection=mysql://novadbadmin:novasecret@192.168.3.1/nova
- --ec2_url=http://192.168.3.1:8773/services/Cloud
- --keystone_ec2_url=http://192.168.3.1:5000/v2.0/ec2tokens
- --api_paste_config=/etc/nova/api-paste.ini
- --libvirt_type=kvm
- --libvirt_use_virtio_for_bridges=true
- --start_guests_on_host_boot=true
- --resume_guests_state_on_host_boot=true
- # VNC specific configuration
- --novnc_enabled=true
- --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html
- --vncserver_proxyclient_address=10.2.15.3
- --vncserver_listen=10.2.15.3
- # network specific settings
- --network_manager=nova.network.manager.FlatDHCPManager
- --public_interface=eth0
- --flat_interface=eth1
- --flat_network_bridge=br100
- --fixed_range=192.168.4.1/27
- --floating_range=10.2.15.254/25
- --network_size=32
- --flat_network_dhcp_start=192.168.4.33
- --flat_injected=False
- --force_dhcp_release
- --iscsi_helper=tgtadm
- --connection_type=libvirt
- --root_helper=sudo nova-rootwrap
- --verbose
配置文件中需要注意的是各服务访问的IP地址,OpenStack多节点部署(三)——网络配置中介绍过,我的控制节点有两个IP,一个是OpenStack系统内网IP 192.168.3.1,另一个是公司内部可访问Internet的IP 10.2.15.3。这里推荐将服务IP写成内网IP 192.168.3.1,这样如果控制节点搬迁,或者公司10网段IP变更,那么我们的配置文件可以不动。
但是要注意的是
- --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html
- --vncserver_proxyclient_address=10.2.15.3
这两个VNC参数的IP要为公司内部网络10网段的IP,因为这个必须是从服务器系统外围能访问的IP。
配置文件参数详解可参见bk-compute-adminguide-essex.pdf
之后为Nova-volume服务创建独立的逻辑卷
- sudo pvcreate /dev/sda6
这里将/dev/sda6为你之前格式化为LVM的分区
创建名为nova-volumes的卷组- sudo vgcreate nova-volumes /dev/sda6
- sudo chown -R nova:nova /etc/nova
- sudo chmod 644 /etc/nova/nova.conf
- sed -i '/admin_tenant_name/ s/%SERVICE_TENANT_NAME%/service/' /etc/nova/api-paste.ini
- sed -i '/admin_user/ s/%SERVICE_USER%/nova/' /etc/nova/api-paste.ini
- sed -i '/admin_password/ s/%SERVICE_PASSWORD%/nova/' /etc/nova/api-paste.ini
- sudo nova-manage db sync
- sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
写入环境变量
- export OS_TENANT_NAME=admin
- export OS_USERNAME=admin
- export OS_PASSWORD=admin
- export OS_AUTH_URL="http://192.168.3.1:5000/v2.0/"
- sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;
再增加计算节点只需要安装nova-compute
- sudo apt-get install nova-compute
- --dhcpbridge_flagfile=/etc/nova/nova.conf
- --dhcpbridge=/usr/bin/nova-dhcpbridge
- --logdir=/var/log/nova
- --state_path=/var/lib/nova
- --lock_path=/run/lock/nova
- --allow_admin_api=true
- --use_deprecated_auth=false
- --auth_strategy=keystone
- --scheduler_driver=nova.scheduler.simple.SimpleScheduler
- --s3_host=192.168.3.1
- --ec2_host=192.168.3.1
- --rabbit_host=192.168.3.1
- --cc_host=192.168.3.1
- --nova_url=http://192.168.3.1:8774/v1.1/
- --routing_source_ip=192.168.3.1
- --glance_api_servers=192.168.3.1:9292
- --image_service=nova.image.glance.GlanceImageService
- --iscsi_ip_prefix=192.168.4
- --sql_connection=mysql://novadbadmin:novasecret@192.168.3.1/nova
- --ec2_url=http://192.168.3.1:8773/services/Cloud
- --keystone_ec2_url=http://192.168.3.1:5000/v2.0/ec2tokens
- --api_paste_config=/etc/nova/api-paste.ini
- --libvirt_type=kvm
- --libvirt_use_virtio_for_bridges=true
- --start_guests_on_host_boot=true
- --resume_guests_state_on_host_boot=true
- # vnc specific configuration
- --novnc_enabled=true
- --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html
- --vncserver_proxyclient_address=10.2.15.4
- --vncserver_listen=10.2.15.4
- # network specific settings
- --network_manager=nova.network.manager.FlatDHCPManager
- --public_interface=eth0
- --flat_interface=eth1
- --flat_network_bridge=br100
- --fixed_range=192.168.4.1/27
- --floating_range=10.2.15.4/27
- --network_size=32
- --flat_network_dhcp_start=192.168.4.33
- --flat_injected=False
- --force_dhcp_release
- --iscsi_helper=tgtadm
- --connection_type=libvirt
- --root_helper=sudo nova-rootwrap
- --verbose
- --novncproxy_base_url=http://10.2.15.3:6080/vnc_auto.html
- --vncserver_proxyclient_address=10.2.15.4
其IP为计算节点的IP
最后,查看是否各服务安装成功,各计算节点是否正常
- sudo nova-manage service list
OpenStack多节点部署(六)——glance
本章将为大家介绍OpenStack的镜像管理系统glance,负责存储和管理OpenStack的镜像和虚拟机的快照等。本章将是OpenStack多节点部署系列的最后一章了,在此也感谢大家一直以来对我的支持。还是那句话,stacker们大家可以在留言区多交流,我看到会及时回复的。
glance的安装部署比较简单,前半部分花一些时间讲解glance部署步骤,后面的篇幅主要介绍各类操作系统镜像制作的方方面面。
首先安装glance的软件包
- sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance
修改glance api的配置文件,主要是填写在keystone中设置的用户名密码等
- sed -i '/admin_tenant_name/ s/%SERVICE_TENANT_NAME%/service/' /etc/glance/glance-api-paste.ini
- sed -i '/admin_user/ s/%SERVICE_USER%/glance/' /etc/glance/glance-api-paste.ini
- sed -i '/admin_password/ s/%SERVICE_PASSWORD%/' /etc/glance/glance-api-paste.ini
修改glance api的配置文件,增加keystone的支持
- sed -i '$a [paste_deploy]' /etc/glance/glance-api.conf
- sed -i '$a flavor = keystone' /etc/glance/glance-api.conf
- sed -i '/sql_connection/s/=.*$/= mysql:\/\/glancedbadmin:glancesecret@192.168.3.1\/glance' /etc/glance/glance-registry.conf
修改glance组件注册配置文件,增加对keystone的支持
- sed -i '$a [paste_deploy]' /etc/glance/glance-registry.conf
- sed -i '$a flavor = keystone' /etc/glance/glance-registry.conf
- sudo restart glance-api
- sudo restart glance-registry
- glance index
下面给大家分享镜像制作方面的一些经验。镜像制作一定要单开一台服务器或者在客户机client上制作,如果其放在控制节点或计算节点上,制作过程中由于会占用服务器大量资源导致其他服务拖慢卡顿。制作完成后拷贝镜像文件到glance image服务器,或在客户机上安装glance-client服务即可。
首先创建镜像盘,这个所有镜像的制作步骤都一样
- kvm-img create -f qcow2 server.img 5G
制作Ubuntu镜像
- sudo kvm -m 256 -cdrom ubuntu-12.04-server-amd64.iso -drive file=server.img,
- if=virtio,index=0 -boot d -net nic -net user
按照正常安装系统的步骤安装,可一路点默认设置下来,重启后安装ssh和cloud-init模块
网上的安装教程里面多半是这样的
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install openssh-server cloud-init
- #Remove the network persistence rules from /etc/udev/rules.das their presence will result in
- #the network interface in the instance coming up as an interfaceother than eth0.
- sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
正确的安装方法为
- sudo apt-get update
- sudo apt-get upgrade
- echo "cloud-init cloud-init/datasources string NoCloud, OVF,Ec2" > /tmp/debconf-selections
- /usr/bin/debconf-set-selections /tmp/debconf-selections
- rm -f /tmp/debconf-selections
- apt-get -y install cloud-init
- sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
可直接wget http://cloud-images.ubuntu.com/releases/12.04.2/release-20130222/ubuntu-12.04-server-cloudimg-amd64-disk1.img下载12.04 64位的镜像
制作CentOS或Fedora镜像
因为CentOS、Fedora没有cloud-init模块,所以要用curl从metadata元数据服务器获得主机名等信息
- echo >> /root/.ssh/authorized_keys
- curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-
- key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
- echo "AUTHORIZED_KEYS:"
- echo "************************"
- cat /root/.ssh/authorized_keys
- echo "************************"
- DEVICE="eth0"
- BOOTPROTO=dhcp
- NM_CONTROLLED="yes"
- ONBOOT="yes"
- rm -rf /etc/udev/rules.d/70-persistent-net.rules
最后上传镜像
- glance add name="xxxx-linux" is_public=true container_format=ovf disk_format=qcow2 < server.img
制作windows镜像
- kvm-img create -f qcow2 windowsserver.img 20G
- sudo kvm -m 1024 -cdrom 7601.17514.101119-1850_x64fre_server_eval_zh-cn-GRMSXEVAL_CN_DVD.iso -drive file=windowsserver2008-enterprise.img,if=virtio -boot d -drive file=virtio-win-0.1-30.iso,index=3,media=cdrom -device virtio-net-pci -net nic -net user
进入系统后,要将virtio驱动的网卡和磁盘驱动都装好,切记别忘了安装网卡驱动,安装完成后会显示两个网卡,镜像在nova再次启动后就只会剩下virtio驱动的虚拟网卡
最后上传镜像
- glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 < windowsserver.img