Kolla安装OpenStack多节点

文章目录
  1. 1. 前言
  2. 2. 环境
  3. 3. 准备
  4. 4. 网络设置
    1. 4.1. python
    2. 4.2. 安装docker
    3. 4.3. 加速镜像拉取
    4. 4.4. 密钥登录
  5. 5. 控制节点
    1. 5.1. 安装依赖
    2. 5.2. 安装Kolla-ansible
    3. 5.3. 配置globals.yml
    4. 5.4. 部署
  6. 6. 测试使用openstack
  7. 7. 初始化配置
  8. 8. 网络配置
    1. 8.1. 网络节点
    2. 8.2. 控制节点
  9. 9. 书签

前言

《Ubuntu16使用Kolla安装OpenStack》一文中,使用kolla安装了单节点的openstack。

在实际的部署中,当然要安装多节点的openstack,本文就来研究一下在多个节点上使用kolla安装部署openstack的方法。

环境

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服务网络。

准备

网络设置

在控制节点上,执行以下操作:

1、切换到root用户
sudo -i

2、vim /etc/network/interfaces,设置网卡为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.56.110
netmask 255.255.255.0

auto eth1
iface eth1 inet dhcp

auto eth2
iface eth2 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ifconfig $IFACE promisc

3、启用网卡
ifup eth2

4、修改/etc/hosts,添加:

1
2
3
192.168.56.110  controller
192.168.56.111 network
192.168.56.112 compute

网络节点和计算节点参考控制节点配置即可。

python

在三台机器上安装python
sudo apt -y install python-simplejson
不安装的话,在使用ansible的时候会报错/bin/sh: 1: /usr/bin/python: not found。

安装docker

1、在三台机器上安装docker
curl -SSL https://get.docker.io | bash

或者:
apt install docker.io

2、为docker和kolla创建配置文件

1
2
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/kolla.conf

修改为:

1
2
[Service]
MountFlags=shared

3、重启docker

1
2
systemctl daemon-reload
systemctl restart docker

4、查看docker信息
docker info

如果报错的话,参考《Ubuntu16使用Kolla安装OpenStack》解决。

加速镜像拉取

使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此DaoCloud推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。

1、访问DaoCloud官网,注册一个账号。

2、访问配置 Docker 加速器,可以获得一个专属加速地址(每次访问都会获得不同的地址)。

3、参考Docker 加速器,创建或修改 /etc/docker/daemon.json,内容为:

1
2
3
4
5
6
{
"registry-mirrors": [
"http://2fd0f33c.m.daocloud.io"
],
"insecure-registries": []
}

4、重启docker

1
2
systemctl daemon-reload
systemctl restart docker

PS:也可以使用阿里云的镜像加速器

密钥登录

1、在控制节点生成密钥
ssh-keygen,连续回车即可。

2、将公钥写入三台机器

1
2
3
ssh-copy-id -i .ssh/id_rsa.pub -p 22 voidking@192.168.56.110
ssh-copy-id -i .ssh/id_rsa.pub -p 22 voidking@192.168.56.111
ssh-copy-id -i .ssh/id_rsa.pub -p 22 voidking@192.168.56.112

3、在三台机器把voidking用户添加进sudo免密,方便以后的操作
sudo vim /etc/sudoers,添加

1
voidking ALL = NOPASSWD: ALL

控制节点

主要参考OpenStack, Ansible, and Kolla on Ubuntu 16.04kolla queens on centos7.4Kolla-Ansible’s documentation!

安装依赖

1、安装并升级pip

1
2
3
apt-get update
apt-get install python-pip
pip install --upgrade pip

2、安装依赖
apt-get -y install python-dev libffi-dev gcc libssl-dev python-selinux

3、安装ansible

1
2
3
4
apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible

4、vim /etc/ansible/ansible.cfg,添加如下:

1
2
3
4
5
line 10, add
[defaults]
host_key_checking=False
pipelining=True
forks=100

安装Kolla-ansible

1、安装kolla-ansible
pip install kolla-ansible

报错:ImportError: cannot import name main,参考升级pip后出现ImportError: cannot import name main,编辑/usr/bin/pip文件,如下修改:

1
2
3
4
# line 9, change
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())

报红: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# line 3, change
[control]
192.168.56.110 ansible_ssh_user=voidking ansible_ssh_pass=voidking ansible_sudo=voidking ansible_sudo_pass=voidking ansible_become_user=root ansible_become_pass=voidking ansible_become=true
# line 12, change
[network]
192.168.56.111 ansible_ssh_user=voidking ansible_ssh_pass=voidking ansible_sudo=voidking ansible_sudo_pass=voidking ansible_become_user=root ansible_become_pass=voidking ansible_become=true
# line 17, change
[inner-compute]
192.168.56.112 ansible_ssh_user=voidking ansible_ssh_pass=voidking ansible_sudo=voidking ansible_sudo_pass=voidking ansible_become_user=root ansible_become_pass=voidking ansible_become=true
# line 21, change
[external-compute]
192.168.56.112 ansible_ssh_user=voidking ansible_ssh_pass=voidking ansible_sudo=voidking ansible_sudo_pass=voidking ansible_become_user=root ansible_become_pass=voidking ansible_become=true
# line 28, comment
[monitoring]
#monitoring01
# line 36, comment
[storage]
#storage01

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
然后重新测试连通。

配置globals.yml

1、查看globals.yml配置
grep -vE '^$|^#' /etc/kolla/globals.yml

2、vim /etc/kolla/globals.yml,如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# line 15,uncomment
kolla_base_distro: "centos"
# line 18,uncomment
kolla_install_type: "binary"
# line 21,uncomment and change
openstack_release: "queens"
# line 31,change
kolla_internal_vip_address: "192.168.56.120"
# line 85,uncomment and change
network_interface: "eth0"
# line 100,uncomment and change
neutron_external_interface: "eth2"
# line 331,uncomment
designate_backend: "bind9"
designate_ns_record: "sample.openstack.org"
# line 340,uncomment and change
nova_compute_virt_type: "qemu"
# other
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

因为是在虚拟机中安装openstack,所以nova_compute_virt_type设置为qemu。

部署

1、初始化
kolla-ansible -i ./multinode bootstrap-servers
时间很久,请耐心等待。

2、预检查
kolla-ansible -i ./multinode prechecks

3、拉取镜像
kolla-ansible -i ./multinode pull
这一步的时间特别久,挺耐心等待。如果拉取失败,就多尝试几次。
这里小编取巧一下,直接把《Ubuntu16使用Kolla安装OpenStack》一文中的images拷贝到控制节点、网络节点和计算节点。

(1)打包所有images
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o kolla.tar

(2)导入所有images
docker load -i kolla.tar

4、查看镜像
docker images

5、部署
kolla-ansible -i ./multinode deploy

测试使用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

初始化配置

1、执行init-runonce脚本
. /usr/local/share/kolla-ansible/init-runonce

2、根据提示,创建实例

1
2
3
4
5
6
openstack server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--nic net-id=25e6c0ef-6a0a-481c-a08a-46f7ef67ad3e \
demo1

3、给demo1实例分配浮动IP

1
2
3
4
source /etc/kolla/admin-openrc.sh
openstack network list
openstack floating ip create public1
openstack server add floating ip demo1 10.0.2.157

4、查看demo1
openstack 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成功。

网络配置

网络节点

关于网络的配置,主要参考Kolla配置实例网络

1、在网络节点编辑/etc/network/interfaces,添加:

1
2
3
4
auto br-ex
iface br-ex inet static
address 10.0.2.1
netmask 255.255.255.0

2、启用br-ex
ifup br-ex

3、添加路由

1
2
3
ip netns
ip netns exec qrouter-9dbabbdd-cc45-42c3-b9e0-9dbbc03e66f1 ip add
route add -net 10.0.0.0/24 gw 10.0.2.153 dev br-ex

4、在网络节点连通demo1

1
2
ping 10.0.2.157 -c3
ping 10.0.0.3 -c3

5、设置demo1上网

1
2
3
4
iptables -I INPUT -i eth2 -j ACCEPT
iptables -I INPUT -i br-ex -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE

控制节点

1、添加路由
route add -net 10.0.2.0/24 gw 192.168.56.110 dev eth0

2、在控制节点连通demo1
ping 10.0.2.157 -c3

3、连接demo1
ssh cirros@10.0.2.157

4、测试外网连通
ping 8.8.8.8 -c3

书签

Kolla’s documentation!

Kolla让OpenStack部署更贴心

Kolla安装Ocata单节点

kolla部署openstack ocata版

Install and configure OpenStack Ocata with Kolla as a standalone

Kolla OpenStack系统视频课程