1. 前言
《Ubuntu16使用Kolla安装OpenStack》一文中,使用kolla安装了单节点的openstack。
在实际的部署中,当然要安装多节点的openstack,本文就来研究一下在多个节点上使用kolla安装部署openstack的方法。
2. 环境
VirtualBox虚拟机三台,系统为ubuntu-16.04.4-server-amd64,分别作为控制节点、网络节点和计算节点,用户名为voidking/root,密码为voidking。
控制节点4核8G内存40G存储,主机名为controller,eth0的IP为192.168.56.110,eth1为nat上网网卡,eth2为neutron服务网络。
网络节点2核4G内存40G存储,主机名为network,eth0的IP为192.168.56.111,eth1为nat上网网卡,eth2为neutron服务网络。
计算节点2核4G内存40G存储,主机名为compute,eth0的IP为192.168.56.112,eth1为nat上网网卡,eth2为neutron服务网络。
3. 准备
3.1. 网络设置
在控制节点上,执行以下操作:
1、切换到root用户sudo -i
2、vim /etc/network/interfaces
,设置网卡为:
1 | # This file describes the network interfaces available on your system |
3、启用网卡ifup eth2
4、修改/etc/hosts,添加:
1 | 192.168.56.110 controller |
网络节点和计算节点参考控制节点配置即可。
需要注意的是,hosts文件在OpenStack安装完成后会被ansible修改,建议保留ansible创建的那一份,原因参考《OpenStack计算节点的奇葩问题》。
3.2. python
在三台机器上安装pythonsudo apt -y install python-simplejson
不安装的话,在使用ansible的时候会报错/bin/sh: 1: /usr/bin/python: not found。
3.3. 安装docker
1、在三台机器上安装dockercurl -SSL https://get.docker.io | bash
或者:apt install docker.io
2、为docker和kolla创建配置文件
1 | mkdir -p /etc/systemd/system/docker.service.d |
修改为:
1 | [Service] |
3、重启docker
1 | systemctl daemon-reload |
4、查看docker信息docker info
如果报错的话,参考《Ubuntu16使用Kolla安装OpenStack》解决。
3.4. 加速镜像拉取
使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此DaoCloud推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。
1、访问DaoCloud官网,注册一个账号。
2、访问配置 Docker 加速器,可以获得一个专属加速地址(每次访问都会获得不同的地址)。
3、参考Docker 加速器,创建或修改 /etc/docker/daemon.json,内容为:
1 | { |
4、重启docker
1 | systemctl daemon-reload |
PS:也可以使用阿里云的镜像加速器。
3.5. 密钥登录
1、在控制节点生成密钥ssh-keygen
,连续回车即可。
2、将公钥写入三台机器
1 | ssh-copy-id -i .ssh/id_rsa.pub -p 22 voidking@192.168.56.110 |
3、在三台机器把voidking用户添加进sudo免密,方便以后的操作sudo vim /etc/sudoers
,添加
1 | voidking ALL = NOPASSWD: ALL |
4. 控制节点
主要参考OpenStack, Ansible, and Kolla on Ubuntu 16.04、kolla queens on centos7.4和Kolla-Ansible’s documentation!。
4.1. 安装依赖
1、安装并升级pip
1 | apt-get update |
2、安装依赖apt-get -y install python-dev libffi-dev gcc libssl-dev python-selinux
3、安装ansible
1 | apt-get install software-properties-common |
4、vim /etc/ansible/ansible.cfg
,添加如下:
1 | line 10, add |
4.2. 安装Kolla-ansible
1、安装kolla-ansiblepip install kolla-ansible
报错:ImportError: cannot import name main,参考升级pip后出现ImportError: cannot import name main,编辑/usr/bin/pip文件,如下修改:
1 | # line 9, change |
报红:oslo-config 6.4.0 has requirement PyYAML>=3.12, but you’ll have pyyaml 3.11 which is incompatible.忽略。
2、拷贝globals.yml和passwords.yml到/etc/kolla目录cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/
3、拷贝all-in-one和multinode清单文件到当前目录cp /usr/local/share/kolla-ansible/ansible/inventory/* .
4、生成kolla密码kolla-genpwd
我们部署中使用的密码存储在/etc/kolla/passwords.yml文件中。此文件中的所有密码都是空白的,必须手动填写或运行随机密码生成器。
5、配置multinode文件vim multinode
,如下修改:
1 | # line 3, change |
6、测试连通ansible -i multinode -m ping all
报错:ERROR! to use the ‘ssh’ connection type with passwords, you must install the sshpass program
安装sshpass:apt install sshpass
然后重新测试连通。
4.3. 配置globals.yml
1、查看globals.yml配置grep -vE '^$|^#' /etc/kolla/globals.yml
2、vim /etc/kolla/globals.yml
,如下修改:
1 |
|
kolla_internal_vip_address为192.168.56.120,它是一个和OpenStack宿主机内网连接网络(eth0 192.168.56.110)同一个网段的未使用IP。network_interface为eth0,意思是openstack内部网络使用eth0网卡。neutron_external_interface为eth2,意思是openstack的虚拟机外部网络使用eth2网卡。因为是在虚拟机中安装openstack,所以nova_compute_virt_type设置为qemu。
PS:实际上,kolla_internal_vip_address最好设置为192.168.56.110,原因参考《OpenStack计算节点的奇葩问题》。
4.4. 部署
1、初始化kolla-ansible -i ./multinode bootstrap-servers
时间很久,请耐心等待。
2、预检查kolla-ansible -i ./multinode prechecks
3、拉取镜像kolla-ansible -i ./multinode pull
这一步的时间特别久,挺耐心等待。如果拉取失败,就多尝试几次。
这里郝同学取巧一下,直接把《Ubuntu16使用Kolla安装OpenStack》一文中的images拷贝到控制节点、网络节点和计算节点。
(1)打包所有imagesdocker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o kolla.tar
(2)导入所有imagesdocker load -i kolla.tar
4、查看镜像docker images
5、部署kolla-ansible -i ./multinode deploy
5. 测试使用openstack
1、在控制节点安装openstack客户端pip install python-openstackclient python-glanceclient python-neutronclient --ignore-installed
2、生成admin-openrc.sh等kolla-ansible post-deploy
3、使admin环境生效source /etc/kolla/admin-openrc.sh
4、查看计算服务openstack compute service list
5、查看网络服务openstack network agent list
6. 初始化配置
1、执行init-runonce脚本. /usr/local/share/kolla-ansible/init-runonce
执行初始化之前,可以参考openstack 之 Kolla部署指南,设置一下外部网络。这样,就可以从路由器给虚拟机分配IP,安装完虚拟机就可以宿主机互相ping通。比如:
1 | EXT_NET_CIDR='192.168.56.0/24' |
这里配置的网络范围,对应globals.yml中配置的neutron_external_interface,也就是eth2网卡。
2、根据提示,创建实例
1 | openstack server create \ |
3、给demo1实例分配浮动IP
1 | source /etc/kolla/admin-openrc.sh |
4、查看demo1openstack server list
5、访问horizon服务curl 192.168.56.120 -L
在浏览器访问 http://192.168.56.120 ,使用admin账号登录,密码在passwords.yml文件中查看。less /etc/kolla/passwords.yml | grep keystone_admin_password
至此,使用kolla安装部署多节点openstack成功。
7. 网络配置
7.1. 网络节点
关于网络的配置,主要参考Kolla配置实例网络。
1、在网络节点编辑/etc/network/interfaces,添加:
1 | auto br-ex |
2、启用br-exifup br-ex
3、添加路由
1 | ip netns |
重启后路由失效,如果想要永久生效,那就在/etc/network/interfaces文件的尾部添加:
1 | up route add -net 10.0.0.0/24 gw 10.0.2.153 dev br-ex |
4、在网络节点连通demo1
1 | ping 10.0.2.157 -c3 |
5、设置demo1上网
1 | iptables -I INPUT -i eth2 -j ACCEPT |
设置永久生效参考《Linux配置SNAT上网》。
7.2. 控制节点
1、添加路由route add -net 10.0.2.0/24 gw 192.168.56.110 dev eth0
同样的,想要路由永久生效,也要添加到interfaces文件的尾部。
2、在控制节点连通demo1ping 10.0.2.157 -c3
3、连接demo1ssh cirros@10.0.2.157
4、测试外网连通ping 8.8.8.8 -c3
8. 清除OpenStack
安装OpenStack,会对宿主机的网络有很大的影响。安装完成后,如果网络瘫痪,不要怕,还有补救措施:清除已经安装部署的OpenStack环境,然后重新配置,重新部署。
清除OpenStack的命令如下:kolla-ansible destroy -i ./multinode --yes-i-really-really-mean-it
9. 后记
本文的网络设置不合理,但是也能正常使用。因为已经安装部署完成,所以就不再更改了,在此做一下补充说明。
本文中eth0作为管理网卡,eth1作为上网网卡,eth0作为OpenStack宿主机间的内网网卡,eth2作为OpenStack的虚拟机外网网卡。这里eth0复用了,既作为管理网卡,又作为OpenStack内网网卡。更好的做法是,再添加一块网卡作为OpenStack的内网网卡,使每个网卡只有一个职责。
在物理机中安装OpenStack的话,可以参考《Ubuntu16手动安装OpenStack——neutron篇》。控制节点一个网卡,用来上网和管理;网络节点三个网卡,一张用来上网和管理,一张用来OpenStack宿主机内网连接,一张用来OpenStack虚拟机外网连接;计算节点两个网卡,一张用来上网和管理,一张用来OpenStack宿主机内网连接。
还有,在物理机安装OpenStack时,要关闭其他虚拟化工具,比如VirtualBox或者VMware,否则会无法创建实例,查看日志tail -n 20 /var/lib/docker/volumes/kolla_logs/_data/nova/nova-compute.log
,出现KVM Error – ioctl(KVM_CREATE_VM) failed: 16 Device or Resource busy问题。
10. 书签
Install and configure OpenStack Ocata with Kolla as a standalone