在容器中部署 TripleO¶
https://blueprints.launchpad.net/tripleo/+spec/containerize-tripleo
能够在容器中部署 TripleO。
问题描述¶
Linux 容器正在改变行业部署应用程序的方式,它提供了一种轻量级、可移植且可升级的替代方案,以取代在物理主机或虚拟机上的部署。
由于 TripleO 已经使用 OpenStack 本身来管理 OpenStack 基础设施,因此容器可能是部署 OpenStack 服务的一种新方法。它将改变部署工作流程,但可以扩展升级能力、编排和安全管理。
将 OpenStack 服务容器化的好处包括
可以通过交换容器来执行升级。
由于整个软件堆栈都包含在容器中,因此依赖关系不会影响服务的部署。
容器定义了明确的状态和数据要求。最终,如果我们转向 Kubernetes,所有卷都将位于主机之外,使主机无状态。
如果升级失败,可以轻松回滚到可用的容器。
在每个容器中交付的软件已经证明适用于此服务。
在同一主机上混合和匹配服务的版本。
Immutable 容器在启动时提供一致的环境。
提议的变更¶
概述¶
此蓝图的意图是将容器引入作为交付 OpenStack 安装的一种方法。我们目前有一个完全可用的容器化计算节点版本,但我们希望将其扩展到所有服务。此外,它应该与最近添加的新可组合角色工作配合使用。
想法是在 Heat 模板中拥有一个接口,为每个要作为容器启动的服务添加信息。此容器格式应与 Kubernetes 定义密切相似,以便将来有可能过渡到 Kubernetes。这项工作已经在这里开始
为了保持可用性和实用性,已经做出了一些技术选择。这些包括
使用 Kolla 容器。Kolla 容器使用最流行的操作系统选择构建,包括 CentOS、RHEL、Ubuntu 等,非常适合我们的用例。
我们正在使用 Heat hook 通过 docker 直接启动这些容器。这最大限度地减少了节点上所需的软件,并直接映射到当前的裸机实现。此外,保持 Heat 接口可以使 GUI 正常运行,并允许 Heat 驱动容器的升级和更改。
将容器部署的格式更改为与 Kubernetes 匹配,以便将来有可能使用该技术。
在节点上使用 CentOS(而非 CentOS Atomic),以便用户拥有一个可用的系统来进行调试。
Puppet 驱动的配置,在启动时挂载到容器中。这使我们能够保留我们的 Puppet 配置系统,并与现有的裸机部署并行运行。
引导¶
一旦节点启动并运行,就会有一个 systemd 服务脚本运行,该脚本启动 docker agents 容器。此容器具有启动系统所需的所有组件。这包括
heat agents,包括 os-collect-config、os-apply-config 等。
puppet-agent 和用于部署配置的模块。
连接到主机 docker 守护程序的 docker 客户端。
用于配置主机网络的环境。
此容器充当自安装容器。启动后,此容器将使用 os-collect-config 连接回 Heat。然后 Heat agents 执行以下任务
设置一个 etc 目录并运行 Puppet 配置脚本。这将生成服务所需的所有配置文件,就像在没有容器的情况下运行一样。这些被复制到主机上可访问的目录中,以及所有容器化服务。
开始启动容器化服务以及 Heat 模板中定义的其他步骤。
目前,所有容器都使用 net=host 实现,以允许服务直接侦听主机网络。这在网络隔离和 IPv6 方面保持了功能。
安全影响¶
此更改不应产生重大的安全影响。从安全角度来看,此更改不应对部署产生不利影响,但可能会发现未知问题。Docker 中实现了 SELinux 支持。
最终⽤户影响¶
容器化服务的调试会有所不同,因为它需要了解 docker(未来是 kubernetes)和其他工具才能访问容器中的信息。
可能提供更多升级和新服务版本的选项。
它将允许服务隔离和更好的依赖管理
性能影响¶
影响很小
运行时性能应保持不变。
我们注意到使用容器的引导时间略长,但可以通过一些简单的优化来解决。
部署者影响¶
- 从部署的角度来看,变化很小
部署工作流程保持不变。
由于我们不必担心软件堆栈的依赖问题,因此可能有更多服务的版本选项。
升级影响¶
这项工作旨在允许从裸机 overcloud 部署到基于容器的部署进行弹性、透明的升级。
- 最初我们需要过渡到容器
需要节点重启。
自动化升级应该是可行的,因为服务相同,只是容器化了。
一些状态可能会移动到集中式存储。容器非常清楚地定义了所需的数据和状态存储要求。
- 升级可以更容易地进行
由于减少了依赖关系,可以升级单个服务。
更容易回滚到服务的先前版本。
容器的数据和状态的显式存储清楚地表明需要保留什么。最终,状态信息和数据可能不会存在于单个节点上。
开发人员影响¶
开发人员的工作流程略有变化。与通过 systemd 和日志文件与服务交互不同,您将通过 docker 与服务交互。
- 在计算节点内部
sudo docker ps -a
sudo docker logs <container-name>
sudo docker exec -it <container-name> /bin/bash
实现¶
- 负责人
rhallisey imain flaper87 mandre
- 其他贡献者
dprince emilienm
工作项¶
Heat Docker hook,启动容器(完成)
容器化计算(完成)
TripleO CI 作业(不完整 - https://review.openstack.org/#/c/288915/)
容器化控制器
自动构建 OpenStack 服务的容器
容器化 Undercloud
依赖项¶
可组合角色。
Heat 模板接口,允许扩展以支持容器化服务定义。
测试¶
TripleO CI 需要一个新的 Jenkins 作业,该作业将使用所选解决方案在容器中部署 overcloud。
文档影响¶
https://github.com/openstack/tripleo-heat-templates/blob/master/docker/README-containers.md
在容器中部署 TripleO
调试 TripleO 容器