Docker容器使应用程序开发变得更容易,但在生产中部署容器可能会很难。
环境复杂性、生态系统易变性、跨不同分布式基础架构的部署……
本文将为你解析生产环境部署容器的五大挑战及应对之策。

软件开发人员通常只关注在特定基础架构上运行的单个应用程序、应用程序堆栈或工作负载。然而,在生产环境中,一组不同的应用程序常需在各种技术(例如Java,LAMP等)上运行,而这些技术又需在本地、云上或二者结合的异构基础设施上部署。这给生产环境中容器化应用程序的运行带来了一些挑战:

  • 控制高度密集、快速变化的环境的复杂性
  • 充分利用极为易变的技术生态系统
  • 确保开发人员自由创新
  • 跨不同的分布式基础架构部署容器
  • 执行组织战略管理

控制高度密集、快速变化的环境的复杂性

2016年6月Cloud Foundry公司发布的《希望与现实:容器,2016》报告显示,45%的受访者表示,他们最担心的是Docker部署太复杂,无法融入到他们的环境中。[1]其中很大的原因是容器化环境的密度和波动性。由于不需要为每个容器加载操作系统和内核,因此与传统的虚拟化环境相比,容器化环境能够在给定数量的基础架构内实现更高的工作负载密度。因此,在整个生产环境中创建、监视和销毁的组件需求总量呈指数级增长,从而显著增加了基于容器的管理环境的复杂性。

容器时代,不仅有更多的东西需要管理,而且它们相比以往任何时候都要变化更快。Datadog调查显示,传统的和基于云的虚拟机的平均寿命大约只有短短15天,Docker容器的平均寿命更短,仅为2.5天。[2]这就导致了需要单独管理和监控的事物数量呈数量级增长。

由于架构的复杂性,这些高密集、快变化的环境就更进一步复杂化了。容器通常部署在高度分布式的单个集群或多集群环境中。这些群集的组成是高度分散的,它们可以在本地、云中部署或两者并举。虽然60%的容器在亚马逊网络服务(AWS)上运行,但仍有40%在本地运行。[3]

因此,组织需要一种更便捷的方法来编排容器,以及管理多容器、多主机应用程序的底层基础架构服务。这对于具有微服务体系结构的应用程序尤为重要,例如,一个Web应用程序,包括一个容器集群运行Web服务器前端的多个实例的主机(故障转移和负载均衡)以及多个后端服务,是各自运行在不同的容器中的。

利用高度波动的技术生态系统

Docker的生态系统复杂多变。在过去几年中,第三方工具和服务大量出现,帮助开发人员在开发过程中部署、配置和管理他们的容器化工作流程。基于开源技术,这些工具和服务的变化之快以及新文档的数量之多,使构建稳定的技术栈以实现在生产中运行容器变得充满挑战。这也使得公司难以建立和维护利用丰富的生态系统所需的工程技能。根据RightScale公司第五个年度“云调查状况”显示,对于目前还未使用容器的公司而言,迄今为止,缺乏经验是采用容器面临的最大挑战(39%)。[4]

确保开发人员自由创新

在简化容器管理中,开发人员能够不失灵活创新、不断探索新技术的重要性越发凸显。他们需要有足够的自由来挑选他们需要的工具和框架。RedMonk分析公司将这称为“无限发展时代”。[5]当开发人员需要解决什么问题时,他们不再询问他们“可以”使用什么工具,而是会直接寻找最佳工具。 他们还喜欢选择最新版本,虽然新版本不一定是最稳定的,但是他们可以快速利用其新功能。与此同时,他们也越来越需要承担责任,确保他们创建的任意应用程序逻辑在生产中能够正常运行,如果出现问题,也能快速修复它。这表示如果部署遇到问题,就需要他们能够回滚部署。

开发人员需要root访问的自由,他们希望能够安装任何他们喜欢的开源软件。因此他们通常会避免传统的平台即服务(PaaS)解决方案。把PaaS从容器中抽取出来,这样开发人员就可以不用管理容器而是专注于编码。然而,一家供应商或基础设施提供商提供的多是专用服务,不像本地开源堆栈那样通用。开发人员的创造力很大程度上也受限于此。

跨不同的分布式基础架构部署容器

容器的主要优点之一就在于它们是可移植的——一个应用程序,其所有的依赖关系可以捆绑到一个独立于Linux内核、平台分布或部署模型的主机版本的单个容器中。此容器可以传输到另一台运行Docker的主机上,并且在没有兼容性问题的情况下执行。云和数据中心之间的基础设施服务差异巨大,这导致应用程序几乎不可能实现真正的可移植性。因此利用容器使应用程序跨不同基础设施需要的不仅仅是一个用于运输代码的标准化单元,它还需要基础设施服务,包括:

  • 运行Docker容器的主机(CPU、内存、存储和网络连接),包括在本地以及云上运行的虚拟机或物理机器;
  • 协调好端口映射或软件定义的网络,使不同主机上的容器能够相互通信;
  • 向Internet提供负载均衡器服务;
  • DNS,通常用于实现服务发现;
  • 集成的健康检查,确保应对请求的使用的都是健康的容器服务;
  • 某些事件触发执行操作时的应对措施,例如在主机发生故障后重新启动新容器,确保可用的正常容器始终维持一个固定的数量,或者创建新主机和容器以响应增加的负载;
  • 通过现有容器创建新容器来扩展服务;
  • 借助存储快照和备份功能以备份状态容器,从而进行灾难恢复;

部署好这些基础架构服务,组织面临的难题就变成了如何监控它们。DevOps团队需要迅速解决这些问题。因此,监控和记录基础架构性能,并在出现问题时提醒DevOps团队,这是任何一个容器管理所要具备的重要功能。

执行组织策略和管理

与部署容器相关的安全性和合规性问题是必须解决的,这是所有在生产中使用容器的大企业都一定会关注的问题,特别是那些受监管的行业,如金融和医疗保健。Docker等公司正在努力修复这些问题,并通过在工具链上创建新的软件和集成作为应对这个问题。

然而,在应用程序容器安全性和企业使用虚拟机之间仍缺乏平衡。这包括实施组织策略,确保安全访问容器和集群管理,包括管理传输层安全(TLS)证书。通过基于角色的访问控制(RBAC),用户和用户组能够共享或拒绝访问资源和环境(例如开发或生产)。 用户身份验证需要与Active Directory、LDAP和/或GitHub等活动目录集成。

巧妙利用工具,应对五大挑战

容器使软件开发变得更容易,使您能够更快地编写代码并更好地运行它。 然而,在生产中运行容器可能会很困难。 有各种各样的技术需要集成和管理,并且新的工具层出不穷。 Rancher使您可以轻松管理运行容器的方方面面。那些集成复杂的开源技术必备的技术技能,你可能再也不需要了。

想在生产环境中的任一基础设施上运行Docker,Rancher可以提供你需要的一切。Rancher让你可以轻松配置和集成可移植的基础设施服务层。Rancher提供了一个易于使用的用户界面,您可以利用其丰富的集合编排功能,随后通过单击来部署容器。Rancher强大的Catalog可以将配置文件打包为模板并在组织中共享。目前, Rancher已经拥有超过2000万次下载和并提供企业级支持,很快成为在生产环境中运行容器的首选开源平台。

Rancher使用起来非常简单

只需按照下列步骤操作:

  • 尝试一下:您可以先使用Rancher Sandbox。它是公开托管的,并且会自动更新。
  • 下载:您可以把Rancher部署为一个Docker容器,甚至还可以在您的集群或笔记本电脑上部署Rancher。
  • 开始:如果您按照快速入门指南中的步骤操作,部署Rancher只需不到5分钟。
  • 使用文档:Rancher使用起来非常简便。但Rancher的技术文档中仍有大量信息,以备用户不时之需。
  • 利用我们的强大的用户社区:您可以登陆我们的论坛,这里是新产品发布、与同行以及和Rancher工程师交流互动的最佳场所。

资料来源:
[1]https://www.cloudfoundry.org/hope-versus-reality-containers-in-2016/
[2]https://www.datadoghq.com/docker-adoption/
[3]https://clusterhq.com/assets/pdfs/state-of-container-usage-june-2016.pdf
[4]http://www.rightscale.com/blog/cloud-industry-insights/new-devops-trends-2016-state-cloud-survey
[5]http://redmonk.com/fryan/2016/02/16/docker-containers-and-the-cio/

原文来源:Rancher Labs

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐