返回顶部

【转载】8个构建容器化应用程序的最佳实践

[复制链接]
虚拟现实Lv.2 显示全部楼层 发表于 2017-2-17 09:49:20 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
容器是在公有云和私有云中部署应用程序的主要趋势。但什么是容器,为什么它们成为流行的部署机制,以及如何修改应用程序以优化容器化环境?


什么是容器?

容器背后的技术有很长的历史,从2000年的SELinux和2005年的Solaris区域开始。今天,容器是几个内核特性的组合,包括SELinux、Linux命名空间和控制组,提供了对最终用户进程、网络和文件系统空间的隔离。


它们为什么这么受欢迎?

最近容器的广泛采用主要是由于旨在使它们更容易使用的标准的发展,例如Docker映像格式和分发模式。这个标准调用了不可变映像,这是容器运行时的启动点。不变的映像保证开发团队发布的映像与被测试并部署到生产环境中的映像是同一个。

容器提供的轻量级隔离为应用程序组件创建了更好的抽象。在容器中运行的组件不会在它们可能直接在虚拟机上运行的方式方面相互干扰。它们可以防止系统资源之间的分配不足,而且除非它们共享一个持久卷,否则会阻止尝试写入相同的文件。容器已经帮助标准化日志和指标收集等,并且允许在物理和虚拟机上增加多租户密度——所有这些都降低了部署成本。



如何构建容器就绪的应用程序?

将应用程序改为在容器内运行不一定是必需的。主要的Linux发行版具有可以运行任何在虚拟机上运行的基本映像。但是容器化应用的总体趋势是遵循一些最佳实践:



1.实例是一次性的

应用程序的任何给定的实例不应该刻意保持运行。如果一个运行一堆容器的系统出现故障,你会希望能够在其他可用系统上启动新容器。


2.重试而不是崩溃

当应用程序中的一个服务依赖于另一个服务而此服务不可达时,应用程序不应该崩溃。例如,API服务正在启动并检测到数据库不可访问。不应该失败和拒绝启动,而是应该让它重试连接。当数据库连接关闭时,API可以响应503状态码,告诉客户端该服务当前不可用。应用程序应该已经遵循了这种做法,但如果你是在实例是一次性的容器化环境中工作,这需要变得更加明显。


3.持久性数据是特殊的

容器是基于使用写时复制(COW)文件系统的共享映像来启动的。如果容器正在运行的进程选择写入文件,那么这些写入只会在容器存在时才存在。当容器被删除时,COW文件系统中的对应层被删除。给容器一个挂载的、持续时间超过容器寿命的文件系统路径将需要额外的配置和物理存储成本。清楚地定义什么存储的抽象是被持久化的,促进了实例是一次性的想法。拥有抽象层还允许容器编排引擎能够处理将持久卷安装和卸载到需要它们的容器的复杂性。


4.使用stdout不是日志文件

你现在可能在想,如果持久性数据是特殊的,那么该如何处理日志文件?容器运行时和编排项目采用的方法是,进程应该写入stdout / stderr,并具有用于归档和维护容器日志的基础设施。.



5.机密(及其他配置)也很特殊

你不应该对映像中的密码、密钥和证书等机密数据进行硬编码。当应用程序与开发服务、测试服务或生产服务通信时,机密信息通常各不相同。大多数开发人员没有权限访问生产机密信息,所以如果机密信息被嵌到映像中,那么将必须创建一个新的映像层来覆盖开发机密信息。此时,你不再使用由开发团队创建并通过质量工程(QE)测试的同一映像,这样失去了不可变映像的好处。实际上,这些值应该被抽象为在容器启动时注入的环境变量或文件。


6.不要假定服务的co-location

在编排好的容器环境中,你希望允许编排器将容器发送到当前最适合的任何节点。最佳适配可能意味着许多事情:它可以基于任何具有现在最多空间的节点、容器请求的服务质量、容器是否需要持久性卷等。这可能意味着你的前端、API和数据库容器都在不同的节点上。尽管可以对每个节点强制使用API容器(请参阅Kubernetes中的DaemonSets),但这应该为执行任务(如监视节点本身)的容器保留。


7.规划冗余/高可用性

即使你没有足够的负载来要求HA设置,你也不应该以阻止运行多个副本的方式编写服务。这将允许你使用滚动部署,使得可以轻松地将负载从一个节点移动到另一个节点上,或者从一个服务版本升级到下一个节点而不需要任何停机时间。


8.实施就绪和存活检查

通常,应用程序在能够响应请求之前具有启动时间,例如,需要填充内存中数据缓存的API服务器。容器编排引擎需要一种方法来检查容器是否可以服务请求。为新容器提供就绪检查允许滚动部署以保持旧容器的运行,直到不再需要该旧容器,从而防止停机时间。类似地,存活检查是编排引擎继续检查容器是否处于健康状态的方式。由应用程序创建者决定容器怎么样算健康或者“活”。不再“活”的容器将被杀死,并在其位置创建一个新容器。

作者:Jessica Forrester

来源:https://opensource.com/life/16/9 ... erized-applications
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云萌主 云萌主-BIGSAAS旗下,由北京合智互联信息技术有限公司在2018年创立,为广大云应用技术爱好者的平台。在云萌主论坛可以查看云应用技术文章、云产品产品最新资讯、技术问答、技术视频。在畅游云上技术的同时,学到最新的云应用产品和技术。
  • 微信公众号

  • Powered by Discuz! X3.4 | Licensed | Copyright © 2001-2022, Aliyun Cloud. | 星点互联设计
  • 京ICP备18052714号 | 营业执照 | |合智互联| QQ