长久以来 OpenStack 部署难、 升级难的问题经常为人诟病,简单高效的部署升级方案是所有 OpenStack 用户(云服务供应商、客户、开发者)的共性刚需。Kolla 项目正是应需而生,它基于社区的最佳实践,提出了可靠、可扩展的生产级别 OpenStack Service Containers 部署方案。
简而言之,Kolla 就是一个充分运用容器特性,实现容器化部署 OpenStack 服务的 DevOps 工具。
众所周知,容器技术具有非常优秀的应用部署敏捷性和扩展性,其中又以 Docker 和 Kubernetes 作为构建容器化应用程序的主要标准,是最受欢迎的容器技术选型。为了适配多样的应用场景,社区将 Kolla 项目解耦成为了三个组件。由 Kolla 继续负责构建容器镜像,由 Kolla-ansible 和 Kolla-kubernetes 负责容器的自动化部署与管理。三者间既互相配合又自成一家,松耦合的架构更有利于覆盖用户多方面的需求。
Kolla:容器镜像构建
Kolla-ansible:容器部署
Kolla-kubernetes:容器部署与管理
Kolla 显著的特点是「开箱即用」和「简易升级」,前者由编排工具提供自动化支撑,后者则完全是容器技术的功劳。Kolla 追求为每一个 OpenStack Service 都构建容器镜像,将升级/回滚的粒度(隔离依赖关系集)降维到 Service 级别,实现了操作原子性。版本升级只需三步:
Pull New Docker Image
Stop Old Docker Container
Start New Docker Container
即使升级失败,也能够立即 Start Old Docker Container 完成回滚。
从最新的 Kolla Queens Release 可以看出,Kolla 为实现「从升级到零宕机升级」的目标作出了努力,现已支持 Cinder 和 Keystone 项目的最小宕机时间升级,并不断扩展至其他项目。
笔者认为,零宕机升级功能的发布对 Kolla 而言具有里程碑式的意义,以往,Kolla 提供的升级服务因为具有时延性,只是解决了用户的痒点需求(在部署和升级上提供了便利)。如何在生产环境实现基础设施管理平台升级的同时保障用户业务负载的连续性和可用性,才是用户最深切的痛点。这样有助于加深用户和 OpenStack 社区的粘合度,紧随社区发展,并不断引入新的功能来壮大自身。现在的 Kolla 或许离实现这一目标已经不远了。
除此之外,Kolla-ansible 还发布了支持「开发者模式」,这是一个值得 OpenStack 开发者们高兴的消息。
支持开发模式。这个对 OpenStack 的开发者很是方便。以住,开发者可能要通过 devstack 搭建完整的 OpenStack 来开发,但是部署复杂,难度高。现在 kolla-ansible 已经支持了开发模式。通过配置要开发环境的 dev_mode, 如 horizon_dev_mode:true
, 那么 horizon 容器内的代码会从物理机上挂载进去,开发者对代码修改后,就可以直接看到修改后的效果。十分方便。
from 99Cloud 张雷(Kolla PTL)
虽然现在支持开发者模式的项目同样有限,但社区贡献者已经提交了 Blueprint,相信很快就能满足普遍需求。
在下面的内容中,我们以 Kolla & Kolla-ansible 的组合,主要分 3 个部分介绍如何轻松部署出一套 OpenStack 环境。
环境依赖准备
使用 Kolla 构建镜像
使用 Kolla-ansible 部署 OpenStack
部署环境:
平台:VMware Workstations
操作系统:CentOS 74,4C/8G
双网卡(eth0 192.168.1.13/24,eth1 DHCP)
Kolla branch queens(6.0.0)
Kolla-ansible branch queens
OpenStack Queens
须知:
建议最小化安装 CentOS 7.4,并以 root 用户完成所有操作
建议科学上网,因为有些包没有国内镜像
建议使用 eth0 进行 ssh 和访问外网,因为 eth1 用作 External Network,被放到 network namespace qrouter-XXX 之后,网络连接会断开
本文面向 Kolla 入门,采用 For development & All-In-One 部署方式
Troubleshooting List 位于文末
安装系统基础环境依赖包:
yum install epel-release -y
yum update -y
yum install python-pip python-devel libffi-devel gcc openssl-devel libselinux-python vim git wget -y
惯例开启 NTP 时间同步服务:
systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service
惯例关闭防火墙服务:
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
惯例禁用宿主机的 Libvirt 服务:大多数操作系统会默认启动 Libvirt,但使用 Kolla 来部署 OpenStack 的话,Libvirt 应该在容器中运行并管理虚拟机。所以宿主机的 Libvirt 需要被关闭,以免造成冲突。
systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service
Tips:建议此处打上快照
准备 Python 基础环境安装基础依赖包:
pip install -U pip
pip install -U ansible
pip install -U tox
pip install -U python-openstackclient
pip install -U docker
pip install -U jinja2
Tips:下列软件包是版本问题的高发区,不妨提前查看一番。
docker>=2.0
jinja 2>=2.10
ansible>= 2.0
确保没有安装 docker-py
NOTE:较新的版本中使用 docker 库代替 docker-py
修改 ansible 配置文件:
mkdir /etc/ansible
vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100
deprecation_warnings=False
为了提高部署效率,这里调整了一些 Ansible 服务参数。
准备 Docker 基础环境安装 Docker:
curl -sSL https://get.docker.io | bash
开启 Docker 的共享挂载功能:
mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf {"msg": "The conditional check 'item not in type_drivers' failed. The error was: An unhandled exception occurred while templating '{{ neutron_type_drivers.replace(' ', '').split(',') | reject('equalto', '') | list }}'. Error was a , original message: no test named 'equalto'\n\nThe error appears to have been in '/root/venv/share/kolla-ansible/ansible/roles/neutron/tasks/precheck.yml': line 41, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Checking tenant network types\n ^ here\n”}
TS 3:Jinja2 版本过低不支持 reject,需要高于 2.8。
ERROR 4:Deploy 过程中重复 Build 镜像
TS 4:kolla 和 kolla-ansible 指定的 Docker Image Tag 不一致。
>> 关于作者:范桂飓,九州云(99Cloud)OpenStack 研发工程师,曾先后服务于 Windows Azure、Redhat OpenStack 与 Prophetech HyperMotion。云物互联公号主,现专注于探索云计算与边缘计算的深度结合应用场景。
> > 关于『 Linux宝库 』:欢迎关注『Linux宝库』微信公众号,这里每天发布最新的开源人物和开源事件。谨以此号记录Linux和开源业界的点点滴滴,为开源爱好者和从业者点亮人生。
- END -
- 责任编辑:RAY MAN -
为开源爱好者和从业者点亮人生!
长按二维码关注我们