技术手册-Kolla-Ansible:在容器环境中部署OpenStack
关注星融元
OpenStack简介
OpenStack是一个云操作系统,它控制整个数据中心的大型计算、存储和网络资源池,所有这些资源都通过一个仪表板进行管理,该仪表板赋予管理员控制权,同时允许用户通过web界面提供资源。
它为私有云和公有云提供可扩展的弹性的云计算服务,提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
Kolla-Ansible简介
Kolla旨在为运行OpenStack提供生产就绪的容器和部署工具。
Kolla-Ansible是Kolla的子项目,该项目使用Ansible部署Kolla容器映像。
Kolla-Ansible是开箱即用的工具,即使你是个新手也可以快速部署OpenStack,也允许你根据需求定制化的部署。
目标
在容器中部署OpenStack最大的特点就是升级,用户基本是无感知的状态下完成。同时可以实现本地与云端一致,一次开发随处运行,通过迁移到不同的设备,快速的完成部署和升级操作。
本文将以详细操作指导的方式,给出一种在Docker容器环境中部署OpenStack的指导方法。
环境准备
两台server,一台作为controller,另一台作为compute节点,操作系统CentOS 7.6.1810 镜像CentOS-7-x86_64-DVD-1810.iso。服务器具体配置要求如下:
- 2个千兆网口
- 至少8G内存
- 磁盘至少40G
- 计算节点的BISO中开启CPU嵌套虚拟化(INTEL叫VT-x,AMD的叫AMD-V)
Kolla-Ansible部署过程
关闭SELinux 【控制节点、计算节点】
SELinux不关闭的情况下无法实现,会限制ssh免密码登录
[root@localhost ~]#setenforce 0 [root@localhost ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux |
关闭防火墙【控制节点、计算节点】
防止安装时出现各个组件的端口不能访问的问题
[root@localhost ~]#systemctl stop firewalld && systemctl disable firewalld |
禁用宿主机的 Libvirt 服务
大多数操作系统会默认启动 Libvirt,但使用 Kolla 来部署 OpenStack 的话,Libvirt 应该在容器中运行并管理虚拟机。所以宿主机的 Libvirt 需要被关闭,以免造成冲突。
[root@localhost ~]#systemctl stop libvirtd.service |
设置主机名,hosts文件【控制节点、计算节点】
控制节点
[root@localhost ~]#hostname controller |
计算节点根据节点名称修改
[root@localhost ~]#vim /etc/hosts |
修改网卡名称【控制节点、计算节点】
说明:网卡名字不是必须改,保持各服务器使用的网卡名称一样。
网卡1:
[root@localhost ~]#cd /etc/sysconfig/network-scripts |
网卡2:
[root@localhost ~]#cd /etc/sysconfig/network-scripts |
修改网卡文件名称:
[root@localhost ~]#mv ifcfg-enp6s0f0 ifcfg-eno1 |
修改net配置文件
[root@localhost ~]#vi /etc/udev/rules.d/70-persistent-net.rules |
ATTR和服务器两网口MAC地址保持一致
重启服务器
[root@localhost ~]#reboot |
重启网络服务
[root@localhost ~]#systemctl restart network |
安装【控制节点、计算节点】
[root@localhost ~]#yum install -y epel-release |
安装编译环境【控制节点】
[root@controller ~]#yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python |
安装ansible【控制节点】
[root@controller ~]#pip install -U ansible |
l 安装docker【控制节点、计算节点】
[root@localhost ~]#tee /etc/yum.repos.d/docker.repo <<-‘EOF’ |
- 问题1 安装docker失败,提示与其他安装包冲突Error: docker-engine-selinux conflicts with 2:container-selinux-2.107-3.el7.noarch
解决方法如下:
[root@compute1 ~]#rpm -qa |grep container-selinux-2.107-3.el7.noarch |
设置Docker【控制节点、计算节点】
[root@localhost ~]#mkdir /etc/systemd/system/docker.service.d |
重启相关服务【控制节点、计算节点】
[root@localhost ~]#systemctl daemon-reload |
安装模块【控制节点、计算节点】
[root@localhost ~]#pip install docker |
安装【控制节点】
[root@controller ~]#yum install git |
安装kolla-ansible【控制节点】
[root@controller ~]#pip install kolla-ansible |
如果报如下错误
Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we
cannot accurately determine which files belong to it which would lead to only a
partial uninstall.
[root@controller ~]#rm -rf /usr/lib64/python2.7/site-packages/PyYAML* |
拷贝配置文件【控制节点】
[root@controller ~]#cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/ [root@controller ~]#cp /usr/share/kolla-ansible/ansible/inventory/* /home/ |
配置免密登录【控制节点】
[root@controller ~]#ssh-keygen #一路回车 |
存储节点配置【计算节点】
(演示版本可以跳过此步骤)
- 要启动cinder存储服务,需先添加一块新的硬盘,然后创建pv、vg
[root@computer1 ~]#pvcreate /dev/sdb |
- 问题1 如果出现创建不了pv
解决方法如下:
[root@compute1 ~]#pvcreate devsdb |
解决:
[root@compute1 ~]#dd if=/dev/urandom of=/dev/sdb bs=512 count=64 |
重启服务【计算节点】
[root@compute1 ~]#systemctl restart lvm2-lvmetad.service |
修改【控制节点】
[root@controller ~]#vim /home/multinode |
获取docker镜像【控制节点、计算节点】
- 使用kolla官方镜像源
[root@localhost ~]#vim /etc/kolla/globals.yml |
- 下载镜像包
[root@controller ~]#kolla-ansible pull -i /home/multinode |
修改全局配置文件globals.yml【控制节点】
管理网口eno1,外网网口eno2
如果采用cinder磁盘存储
kolla_base_distro: “centos” kolla_install_type: “binary” |
如果采用外部ceph存储:
kolla_base_distro: “centos” |
生成密码文件passwords.yml【控制节点】
这个密码文件可以使用工具自动生成,也可以手动输入但是手动输入需要注意格式,在:后需要空一格
再输入;而且ssh_key也比较麻烦所以推荐使用工具自动生成但是直接输入
[root@controller ~]#kolla-genpwd |
修改dashboard登录密码
[root@controller ~]#vi /etc/kolla/passwords.yml keystone_admin_password: admin |
修改部署文件multinode【控制节点】
[root@controller ~]#vim /home/multinode |
检查配置【控制节点】
[root@controller ~]#kolla-ansible prechecks -i /home/multinode |
配置SchedNova主机基础环境【控制节点】
[root@controller ~]#kolla-ansible -i /home/multinode bootstrap-servers |
部署OpenStack【控制节点】
[root@controller ~]#kolla-ansible deploy -i /home/multinode |
验证OpenStack安装【控制节点】
[root@controller ~]#kolla-ansible post-deploy -i /home/multinode |
OpenStack更新【控制节点】
### 修改镜像版本(此处不用更新,以后想更新版本再更新)
[root@controller ~]# vim /etc/kolla/globals.yml |
重启所有应用【控制节点】
[root@controller ~]#kolla-ansible -i /home/multinode reconfigure |
环境还原【控制节点】
#如果安装有错误,想重新安装,可以选择如下操作
##将删除所有容器和卷
[root@controller ~]#kolla-ansible destroy –yes-i-really-really-mean-it -i /home/multinode |
生成 admin-openrc.sh【控制节点】
[root@controller ~]#kolla-ansible post-deploy |
初始demo【控制节点】
执行后会自动下载cirros镜像, 创建网络, 并创建一批测试虚拟机.
[root@controller ~]#/usr/share/kolla-ansible/init-runonce |
查询登录密码【控制节点】
[root@controller ~]#grep admin /etc/kolla/passwords.yml |
安装OpenStack命令行客户端【控制节点】
[root@controller ~]#pip install python-openstackclient |
创建实例到指定计算节点
- 查看有效区域
[root@controller ~]#openstack availability zone list |
- 查看有效主机列表
[root@controller ~]#openstack host list |
- 查看有效计算节点列表
[root@controller ~]#openstack hypervisor list |
- 查询网络id
[root@controller ~]#openstack network list |
- 查看安全组
[root@controller ~]#openstack security group list |
- 创建flavor
[root@controller ~]#openstack flavor create –id 0 –vcpus 1 –ram 64 –disk 1 m1.nano |
- 创建实例
[root@controller ~]#openstack server create –flavor m1.nano \ |
–flavor 实例类型
–image 镜像
–nic 网络 net-id网络id 第4步查得
–availability-zone nova:compute1:compute1 前三步查得
compute1为指定计算节点。
结论
从上面的安装过程我们发现Kolla-Ansible来完成OpenStack安装过程非常的简洁,不需要过多修改OpenStack的配置文件,从而可以很轻松的完成部署和升级等操作。
参考资料
- OpenStack官网: openstack.org
- Kolla-Ansible项目官网:https://wiki.openstack.org/wiki/Kolla#Kolla
- Kolla-Ansible官网安装:https://docs.openstack.org/kolla-ansible/latest/