短生命周期容器在生产环境中的应用实践
本文是东京OpenStack Summit大会系列采访的一部分,被采访者是Ian Lewis,谷歌云平台工程师,主要阐述了短生命周期容器的概念,作用和如何将它应用到生产环境当中。
原生云计算(Cloud-native computing)依赖于短生命周期的容器而不是固定的服务器。在短生命周期的容器中运行应用,解决了资源困乏的挑战,但同时也引入了需要新的实践和工具去匹配这个动态环境的问题。谷歌的Ian Lewis将在这个月东京举办的OpenStack Summit上分享如何在短生命周期的容器中记录并追踪它们。
我们联系了Ian,学习了DevOp团队是如何将短生命周期容器应用到实践中,如何采用新的架构模型并且将应用迁移到容器中,Ian提供了一些很好的点子,包括如何存储数据、为什么服务发现是必要的、OpenStack开发了什么新的开源项目和如何帮助团队实现将应用转移到短生命周期的容器中。
Q: 为什么容器应该是短生命周期的,短生命周期的容器可以解决什么问题?
使用容器一个最主要的好处是在集群中它们可以很容易的运行和管理,而不用考虑它们在什么样的实体机上运行。这就允许你在运维需要时,透明的将一个正在运行的应用迁移到不同的硬件上。这种迁移容器的灵活性意味着你不能在本地一台特定的机器上存储状态,因为移动的过程可能会在任何时候发生。你需要做到无论应用在什么地方运行都可以访问到存储状态信息。
Q: 实践中什么是短生命周期?
通常来说,短生命周期的意思是你的应用不能在本地存储数据,数据包括从应用数据到日志数据。你的应用应该可以重启并工作在一个新的容器镜像中。数据需要被存储在容器外部,意味着存储需要使用专门的服务。
Q: 可任意支配和短生命周期的容器听起来很酷,只需要运行、迁移和撤销操作,但如果内容已经存储在容器中并且一些端点(Endpoint)已经被容器暴露,怎么办呢,例如:会话状态、API路径和数据库连接端点。那会话状态和数据库连接也消失了?
容器本身并不是管理状态、API路径和连接的银弹。你仍然需要容器的编排管理系统和网络来使它满足高可用性。这也是为什么谷歌发明Kubernetes来解决这些问题的原因。
Q: 传统的部署方式依赖于持久化服务器,那应该如何重构服务器和应用来实现迁移型的容器呢?
我认为有两个比较大的变化。第一是在主机外和容器外存储状态。第二是应用应该有方法完成服务发现。容器迁移意味着需要一种方式,实现无论服务端实际在哪里运行,客户端都能连接到它。
Q: 你有什么好的架构模型推荐吗?
使用容器时,我会推荐面向服务的架构。好处在于当这个服务运行得足够小,并且能够互相独立地扩展或收缩时,容器会非常容易被感知到。
Q: 我该如何创建一个短生命周期的容器环境而不是持久化的容器环境呢,什么基础设施和开发框架可以使用来安全的部署、迁移和处理容器?
可以尝试使用集群管理工具如Kubernetes(或者Container Engine)。Kubernetes是一个容器编排管理工具,它在集群的服务端调度容器,让容器知道它们适合的运行时间,这些时间可能不会和服务端在同一个时间点。使用Kubernetes也许是不错的选择。
Q: 容器如何在OpenStack中执行?
容器编排管理引擎如Docker Swarm和Kubernetes将会在OpenStack中成为一等重要的资源,通过一个叫Magnum的API服务来实现。Magnum会创建服务端集群如同虚拟机安装了一个集群管理工具,使用Magnum来操控容器就容易很多。
Q: 在OpenStack最新的发布版本和路径中,有没有关于容器管理编排和调度的?