首页
学习
活动
专区
工具
TVP
发布

Kolla让OpenStack 部署更贴心

上方关注,成为我们的生命共同体

Kolla 简介

长久以来 OpenStack 部署难、 升级难的问题经常为人诟病,简单、便捷、高效的部署升级方案是所有 OpenStack 用户(客户、云服务提供商、开发者)的共性刚需。Kolla 正是应需而生,它基于社区的最佳实践,提出了可靠、可扩展的生产级别 OpenStack Service Containers 部署方式。

简单来说,Kolla 就是充分应用容器特性,实现容器化部署 OpenStack 服务的 DevOps 工具。

Kolla 显著的特点是「开箱即用」「简易升级」,前者由编排工具提供自动化支撑,后者则完全是 Container 的功劳。Kolla 追求为每一个 OpenStack Service 都构建相应的 Container,将升级/回滚的粒度(隔离依赖关系集)降维到 Service 或 Project 级别,实现升级/回滚的原子性。假若升级失败,则直接启动 Old Version Container 完成回滚。版本升级只需三步:

Pull New Docker Image

Stop Old Docker Container

Start New Docker Container

除此之外,Kolla 还提供了定制化部署拓扑的能力,允许用户花费更小的学习和试错成本,逐渐摸索演变出适合自己的部署架构蓝图。

众所周知,容器技术具有非常优秀的应用部署敏捷性和效率,其中以 Docker 和 Kubernetes 作为构建容器化应用程序的主要标准,是最受欢迎的容器技术选型。Kolla 社区紧贴用户,将 Kolla Project 逐渐解耦成为了三个产品。由 Kolla 负责构建镜像,由 Kolla-ansible/Kolla-kubernetes 负责部署,而且 Kolla-kubernetes 还兼具着容器管理的能力。它们之间既互相配合又能自成一家,松耦合的架构更有利于最大限度的覆盖用户多方面需求。

Kolla:容器镜像构建

Kolla-ansible:容器部署

Kolla-kubernetes:容器部署,容器管理

在 Queens Release,Kolla-ansible 开始支持「开发者模式」,这的确是一个令人兴奋的消息。

支持开发模式。这个对 OpenStack 的开发者很是方便。以住,开发者可能要通过 devstack 搭建完整的 OpenStack 来开发,但是部署复杂,难度高。现在 kolla-ansible 已经支持了开发模式。通过配置要开发环境的 dev_mode,如 ,那么 horizon 容器内的代码会从物理机上挂载进去,开发者对代码修改后,就可以直接看到修改后的效果。十分方便。

from.

99Cloud 雷神(Kolla PTL)

详细请参考:https://docs.openstack.org/kolla-ansible/latest/contributor/kolla-for-openstack-development.html

虽然,现在开发模式支持的项目还比较有限,但社团贡献者已经提交了 BluePrint,相信很快就能支持大部分核心项目了。 BP:https://review.openstack.org/#/c/560969/

在本文中,我们以 Kolla & Kolla-ansible 的组合,介绍如何轻松的部署出一套 OpenStack 环境。

Kolla & Kolla-ansible 部署 OpenStack

部署环境

平台:VMware Workstations

操作系统:CentOS 74,4C/8G

双网卡

Host 模式:eth0 192.168.1.13/24

Bridge 模式:eth1 DHCP

Kolla branch master

Kolla-ansible branch master

OpenStack Version 6.0.0

部署须知

建议最小化安装 CentOS 7.4,并以 root 用户完成所有操作

有一些软件源没有国内镜像,建议科学上网

本文面向 Kolla 入门者和开发者,采用 centos+source 的 For development & All-In-One 部署方式

eth1 被用于 Neutron Ext Network,被放到 Linux Network Namespace qrouter-XXXX 后,会导致网络断开

理论上 eth0 和 eth1 都需要连通外网,但根据部署需求 eth1 允许不通外网

需要始终保持 eth0 的内外网互通性,并建议使用 eth0 进行 ssh 连接

Troubleshooting List 位于文末

准备操作系统基础环境

安装系统基础依赖包

惯例开启 NTP 时间同步服务

惯例关闭防火墙服务

禁用宿主机的 Libvirt 服务

Tips:建议此处上快照

准备 Python 基础环境

安装基础依赖包

Tips:下列软件包版本是 ERROR 高发区,如果出现疑似依赖包版本的问题,不妨查看一番。

docker>=2.0

jinja 2>=2.10

ansible>= 2.0

确保没有安装 docker-py

修改 ansible 配置文件

准备 Docker 基础环境

安装 Docker

开启 Docker 的 shared mount 共享挂载功能

启动 Docker 服务

安装 kolla & kolla-ansible

Tips:这里使用两个沙盒环境,建议在不同的终端内操作,避免错乱

安装 Kolla

编辑 kolla-build.conf:该配置文件用于控制 kolla build 的过程,这里设定 centos+source 部署方式

安装 Kolla-ansible

编辑 passwords.yml:该文件用于设定 OpenStack Services 的各种密码,这里仅设定 admin 管理员登陆密码

编辑 globals.yml:这是最重要的配置文件,用于设定 Deploy 操作的细节

:启用开发者模式

NOTE:passwords.yml和 globals.yml的项目值必须保持一致,否则 Kolla Build 的 Images 不会被 Kolla-ansible Deploy 使用。

修改 Hypervisor Type:因为在 VirtualMachine 里部署 OpenStack,存在嵌套虚拟化不支持 KVM 的问题,如果你希望启动 OpenStack Instance,就需要把使用 QEMU(Default KVM)。

Kolla Build Images

参数项对应 kolla-build.conf 的 [profiles] Sections,Default images 表示仅 Build 主要的 Images。

接下来需要一段漫长的镜像构建时间,如果出现异常中断现象,可重复执行。赖于 Docker Build 的 Cache 功能,能为 Re-Build 追回不少时间。

但有些情况,错误的配置参数可能也会被 Cache 住,这时建议执行 Clean 操作:

Build Successfully

查看镜像列表

从上图可见,Kolla Build 出来的 Images 通常具有四层,镜像分层可以更好地对环境依赖集进行抽象,降低依赖包重复率,提高镜像传输率。简而言之,有点 “代码复用” 的意味。

(图片来源自网络)

Base image:最基础的操作系统环境,几乎是所有 Images 的基础环境。

openstack-base image:OpenStack All Service 的基础环境,安装了 OpenStack Service 级别的依赖集。

-base image:OpenStack

Service 的基础环境,安装了 Project 级别的依赖集。

image:一个具体 Service 最后的特异性依赖集,并设置了服务启动入口。

Kolla 是根据 Jinja2 Template 语法生成的 Dockerfile 文件来引导镜像构建的,所以如果你有个性化的定制需求可以通过编辑镜像的 Dockerfile.j2 实现:

Kolla-ansible Deploy OpenStack

Kolla-ansible 通过提供一个完整的 Ansible Playbook 来引导部署这些 Images,并且同时提供了 all-in-one 和 multihost 两种部署模式。

在正式 Deploy 之前,还需要进行一些准备工作

Step 1. 自动生成随机密码,填充 passwords.yml 文件配置项

Step 2. 处理 bootstrap servers 所需要的依赖

Step 3. Deploy 环境预检查

Tips:做 prechecks 环境检查前需要完成 kolla-genpwd

正式开始 Deploy OpenStack

成功 Deploy 之后,查看 Container 状态

Tips:horizon project 通常是最后部署的。

NOTE

从上图可见,Service Container 实际上是由 kolla_start 脚本启动起来的

因为 Kolla 使用的是 --net=host 网络,所以没有必要做端口映射

检验 & 使用

生成 /etc/kolla/admin-openrc.sh 文件:该文件用于 Export Keystone Auth 环境变量

初始化运行环境:会自动执行下列操作

Creating glance image.

Configuring neutron.

Generating ssh key.

Configuring nova public key and quotas.

NOTE:如果你希望 External Network 能够正常运行,还需要编辑初始化脚本 init-runonce 中的网络配置,设定为 eth1 的网络信息。

e.g. eth1 IP:172.16.0.10/24

这样,Instance Floating IP 才能够利用 qrouter-XXXX 中的 iptables 进行 NAT 转发。

创建虚拟机

清理环境:完全清理部署好的 OpenStack Container

最后

NOTE 1:实际上,Kolla-ansible 和 Kolla-kubernetes 是支持独立部署的(不依赖 Kolla),它们实现了检测和构建 Images 的策略。如果 Deploy 时,镜像没有 Ready,则会远程 Pull Images。不过这样做的速度是比较慢的,而且 Pull 下来的 Images 未必包含有最新的 Commit,所以建议使用 Kolla 在本地构建镜像。查看 Kollaglue Repo 提供的 Docker 镜像:

Building Container Images,请参考:https://docs.openstack.org/kolla/latest/admin/index.html#building-container-imagesDocker Hub,请参考:https://hub.docker.com/u/kollaglue/

NOTE 2:如果你希望使用 Kolla 进行多节点部署,那么还需要依赖 Local Docker Register 服务器,构建 Docker 私有仓库,请参考:https://docs.openstack.org/kolla-ansible/latest/user/multinode.html

参考文档

https://docs.openstack.org/kolla/latest/http://xcodest.me/kolla-aio-install.htmlhttp://www.chenshake.com/kolla-installation/https://blog.csdn.net/karamos/article/details/80122218https://my.oschina.net/LastRitter/blog/1617079http://xcodest.me/kolla-queens-and-rocky.html

Troubleshooting List

ERROR 1

TS 1:因为包被系统环境依赖,不能卸载,也不需要卸载,跳过即可。

ERROR 2

TS 2:网络不可达,请科学上网或随缘安装。

ERROR 3

TS 3:Jinja2 版本过低不支持 reject,需要高于 2.8。

ERROR 4:Deploy 过程中重复 Build 镜像

TS 4:kolla 和 kolla-ansible 指定的 Docker Image Tag 不一致。

镜像分层示意图

JmilkFan-范桂飓

专注于 Python、云计算与边缘计算

技术即沟通

化云为雨,落地成林

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G0U18300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券