准备工作
系统:Centos7
服务器:两台 物理机
配置:内存:188GB | 硬盘: 19T | CPU: 39 core
部署步骤:
- 环境准备:
更改主机名,此处有个坑,之前装时设置的域名是:openstack-master1-iuap-idc-yycloud.yonyouiuap.com, 结果导致rabbitmq服务启不来,网上查的是有两个原因, 一个可能是端口被占用, 另一个是主机名设置的问题, 此处设置为短名, openstack1和openstack2:
hostnamectl set-hostname openstack1.yonyouiuap.com
网络配置:
网卡一, 用于openstack自身容器服务及VIP对外服务:
网卡二, 用于在openstack上跑的云主机对外访问和远程访问云主机, 不用配置IP地址:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
HWADDR
=
6C
:
92
:
BF
:
4A
:
36
:
4D
TYPE
=
Ethernet
BOOTPROTO
=
static
DEFROUTE
=
no
PEERDNS
=
yes
PEERROUTES
=
no
IPV4_FAILURE_FATAL
=
no
IPV6INIT
=
yes
IPV6_AUTOCONF
=
yes
IPV6_DEFROUTE
=
yes
IPV6_PEERDNS
=
yes
IPV6_PEERROUTES
=
yes
IPV6_FAILURE_FATAL
=
no
NAME
=
eno2
UUID
=
1890c055
-
f6bd
-
47d0
-
83ee
-
dddffdcf544f
ONBOOT
=
yes
|
安装NTP服务
CentOS系统
2
3
4
5
6
7
8
9
10
11
|
$
yum
install
-
y
chrony
配置
NTP服务:
$
\
cp
-
f
/
usr
/
share
/
zoneinfo
/
Asia
/
Shanghai
/
etc
/
localtime
$
vim
/
etc
/
chrony
.
conf
server
0.cn.pool.ntp.org
iburst
server
1.cn.pool.ntp.org
iburst
server
2.cn.pool.ntp.org
iburst
server
3.cn.pool.ntp.org
iburst
#重启NTP服务:
$
systemctl
enable
chronyd
.
service
$
systemctl
restart
chronyd
.
service
|
在所有节点配置hosts文件:
在所有节点配置ssh密钥互通:
安装docker基础配置:
拷贝配置文件
生成密码
下载build好的镜像,建立私有仓库,这里,下载使用Kolla社区的pike版本镜像(免去在本地环境docker build的过程,
大大加快安装时间)。Ocata版本是4.0.3, pike版本是5.0.1, 事实证明Ocata版本有Bug,
装完后会导致centos-source-cinder-api和centos-source-fluentd两个容器启动失败。
如果是在虚拟机里装kolla,希望可以虚拟机中再启动云主机,那么你需要把virt_type=qemu
配置Kolla
下面是我的配置,此处要注意,kolla_internal_vip_address是配置的没有使用的IP,如果配置的IP已经被使用的话会报错 :
定义节点cat multinode:
准备ceph磁盘
在2台虚拟机的节点上,除去系统盘还有有其它2块硬盘,sdb、sdc
这里我们将sdb做为osd节点,sdc为日志节点。Kolla对ceph的osd及日志盘的识别是通过卷标来实现的,
如osd的卷标为KOLLA_CEPH_OSD_BOOTSTRAP,
journal的卷标为KOLLA_CEPH_OSD_BOOTSTRAP_J
因为有三块盘,分别是sda, sdb, sdc,sda是系统盘, sdb做osd盘, sdc做journal盘
格式化所有osd的磁盘,这里我们用ansible统一执行
# ansible -i multinode all -m shell -a 'parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1'
格式所有journal的盘
# ansible -i multinode all -m shell -a 'parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP_J 1 -1'
下面是我用的初始化ceph磁盘的脚本,(openstack1和openstack2有两块磁盘, 分别是sdb和sdc(SSD),
其它3台openstack[3-5]分别有6块sata盘, 一块SSD盘):
新建/etc/kolla/config/ceph.conf,指定ceph的一些参数,如副本数:
[root@openstack1 lokolla]# cat /etc/kolla/config/ceph.conf
[global]
osd pool default size = 3
osd pool default min size = 2
开始安装
kolla自动检查配置基础环境:
kolla-ansible -i /opt/ansible/multinode bootstrap-servers
验证目标节点是否满足部署要求:
$ kolla-ansible prechecks -i /openstack/kolla-deploy/multinode
没有报错直接进行安装:
kolla-ansible deploy -i /openstack/kolla-deploy/multinode -vvvv
生成环境变量文件
- 生成的脚本的路径:
/etc/kolla/admin-openrc.sh
;
文件路径为
/etc/kolla/admin-openrc.sh
cp /etc/kolla/admin-openrc.sh /root/
source /root/admin-openrc.sh
安装OpenStackClient
生成网络, 利用自动生成脚本(一个测试脚本,自动下载镜像,上传,创建网络,创建路由器……):
Error处理:
1. Docker Py
- 问题:
Error: 'module' object has no attribute 'Client'
; - 解决方法:
Docker-Py
版本的问题, 从2.0
版本开始由Client
更新为APIClient
;
部署技巧:
1)如果,在部署过程中失败了,亦或是变更了配置信息,需要重新部署,则先执行如下命令,清除掉已部署的Docker容器,即OpenStack服务。
kolla - ansible destroy - i / openstack / kolla - deploy / multinode -- yes - i - really - really - mean - it
2)除此外,还有一些小工具,在自己需要时,可以使用。
- kolla-ansible prechecks:在执行部署命令之前,先检查环境是否正确;
- tools/cleanup-containers:可用于从系统中移除部署的容器;
- tools/cleanup-host:可用于移除由于网络变化引发的Docker启动的neutron-agents主机;
- tools/cleanup-images:可用于从本地缓存中移除所有的docker image。
最后,可以使用docker ps –a命令查看到OpenStack 所有服务的容器。
2. No valid host was found. there are not enough hosts available.
创建虚机时报上面的错, 查看Log(nova-placement-api.log),log目录在宿主机/var/lib/docker/volumes/kolla_logs/_data/:
: libvirtError: internal error: qemu unexpectedly closed the monitor: 2017-11-10T14:18:30.341372Z qemu-kvm: -chardev pty,id=charserial0,logfile=/var/lib/nova/instances/80f7f03e-7b9c-47aa-912f-08279c92d41e/console.log,logappend=off: Unable to open logfile /var/lib/nova/instances/80f7f03e-7b9c-47aa-912f-08279c92d41e/console.log: Permission denied
参考这篇文章: https://computingforgeeks.com/permission-denied-while-starting-instance-in-openstack/
配置文件中增加以下内容:
重启centos-source-nova-libvirt容器, 问题解决.
1. 用kolla安装openstack的N版,如果多节点部署,而且lbaas enble,则出现neutron_server一直是Restarting的状态,
看日志的报错是:ImportError: Plugin ‘neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPluginv2’ not found
解决思路:创建的neutorn-server的没有neutron-lbaas代码,neutron-base镜像里面应该也没有neutron-lbaas代码,
解决方法:
pass
2. 进入horizon后不能使用yum,运行yum的任何命令都卡死
解决思路:
yum也是用python写的,自己调试也比较得心应手,所以先调试了一会,发现是不能读取配置,在网上查询说可能是数据库连接不到,
重建数据库就好
解决方法:
rm -rf /var/lib/rpm/__db.00*
rpm -rebuilddb
3. 如果修改kolla部署的docker容器里面的配置文件,如horizon.conf,重启docker后文件还会变回原来的
解决思路:
应该是重启docker容器会从指定位置拷贝配置文件
解决方法:
docker重启会从/etc/kolla重新拷贝,如horizon容器,需要去宿主机的/etc/kolla/horizon里面修改,此目录下有三个文件config.json horizon.conf local_settings,其中config.json会指定重启docker都拷贝哪些文件
4.precheck时报错:
ERROR! Unexpected Exception, this is probably a bug: {{ neutron_tenant_network_types.replace(‘ ‘, ”).split(‘,’) | reject(‘equalto’, ”) | list }}: no test named ‘equalto’
分析:是jinja2版本的低问题,如下是版本信息:
解决,升级jinja2版本:
错误:No module named ‘requests.packages.urllib3
解决方法:参考http://www.niuhp.com/,
经查阅各种资料发现主要是 requests 和 urllib3 的问题,而 requests 的版本需要为 2.6.0,因此我们需要按照如下方式安装
pip install --upgrade --force-reinstall 'requests==2.6.0' urllib3
错误: TASK [ceph : Fetching Ceph keyrings] *******************************************
fatal: [controller01]: FAILED! => {“failed”: true, “msg”: “The conditional check ‘{{ (ceph_files_json.stdout | from_json).changed }}’ failed. The error was: No JSON object could be decoded”
参考:http://wangyaohua.cn/wordpress/?p=805
原因如下:
在我删除容器和镜像,并且清除了相关硬盘后,kolla生成的相关volume是没有删除的。其还存在于/var/lib/docker/volume下,而我之后的kolla-ansible destroy 会删除相关的容器,并根据删除的容器删除相关的卷。但是这些容器已经被我提前删完了,所以这volume是没有删除的。因此当再次构建kolla时,这些已经存在的volume会阻止ceph_mon的启动,会导致上述错误Ceph keyring无法获取而产生的一些错误。因此 删除掉docker volume ls下的卷。再次部署就能够成功的解决问题
删除卷:
docker volume rm $(docker volume ls -f dangling=true -q)
rabbitmq集群报错:
解决:
修改用户数限制:
虚拟机中测试kolla
需要注意的是如果是在虚拟机中测试kolla需要在宿主机上修改nova-compute的配置文件 为virt_type=qemu不然默认用的是kvm,会造成创建云主机失败。
vim /etc/kolla/nova-compute/nova.conf
新建/etc/kolla/config/nova.conf
[libvirt]
virt_type=qemu
重启这个容器。
docker restart nova_compute
openstack 服务配置的修改
# kolla-ansible -i multinode reconfigure
最终命令执行完,配置修改完毕。
注意。ESXi的虚拟机端口组要把混杂模式和伪传输打开,不然后br-ex的网络出不去
修改创建虚机时自动生成的novalocal的主机名为自定义主机名:
编辑/etc/kolla/nova-api/nova.conf, 在[DEFAULT]下添加:
dhcp_domain = yonyouiuap.com
重启nova-api服务
修改resolv.conf的默认search域:
编辑/etc/kolla/neutron-dhcp-agent/neutron.conf, 在[DEFAULT]下添加:
dns_domain = yonyouiuap.com.
重启所有centos-source-neutron-dhcp-agent服务
参考: http://jqjiang.com/openstack/openstack_kolla/
https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html
http://www.jinkit.com/openstack-dockerized/