Kubernetes快车上的谋杀案:Docker容器的生与死


每天有数以百万计的Docker容器被启动起来以使用它们的资源,然后在结束任务后,没有用时就被杀掉。

这是一个残酷的现实,但对于作为开发者的你我来说非常有益。

你可以看到在过去几年中,容器技术已经大大改变了软件公司构建、发布和维护其应用程序的方式。

这是因为容器允许我们打包应用程序代码及其所有依赖项,因此无论计算运行环境如何,它都可以平稳快速地运行。

不仅如此,容器还可以很好地用于持续集成/持续部署(CI/CD),允许你尽快向客户提供新功能,增强功能或错误修复,从而推动客户增长以及改进你提供的软件。

这些只是工作流带来的红利。

还记得之前告诉过你关于容器的“出生与死亡”吗?这个循环称之为水平扩展(horizontal scaling),当应用程序面临的流量超过当前资源可以处理的流量时,这些额外的容器就会被启动起来,然后在流量消失后这些容器也会被终止。

当你在大规模运营时,整个部署自动化过程变得至关重要。

现在你可能在想,“哇!这听起来像是一个庞大的工程!”

你猜对了,但有个好消息,容器编排系统能为你完成所有这些繁重的工作。

虽然你有一些容器编排系统的选择,例如Docker Swarm,Apache Mesos,但是市面上没有任何一款能有Kubernetes这么流行,究其原因有以下。

Kubernetes是一个开源工具,允许我们利用内部部署,混合或公共云基础架构,使得可以随心所欲地移动工作负载。它提供安全,网络和存储服务,并且可以一次管理多个集群。

此外,它还可以自动执行许多在过去你必须手动执行的过程。例如:
  • 控制容器运行在哪个服务器上
  • 轻松快速地扩展资源
  • 当应用程序出现问题能自动进行回滚
  • 计算容器的“最佳位置”以实时优化容器均衡扩展资源和应用程序


听起来很酷对吧?

最终,Kubernetes可以更有效地使用硬件,最大限度地利用资源并节省资金。

但这就是事情变得棘手的地方。

你清楚当你使用类似Kubernetes这样的容器编排工具时,你可以在YAML文件中描述应用程序的配置。

在这个配置文件中,你可以告诉Kubernetes如何工作,例如收集容器镜像,如何在容器之间建立网络,如何挂载存储卷以及将容器日志安放在何处。

容器被部署到主机上,通常以复制组的形式存在。当需要将新容器部署到集群中时,Kubernetes会调度部署并根据选择的预定义约束(如CPU或内存可用性)查找最合适的主机来调度容器。

基本上,一旦容器在主机上运行,Kubernetes将根据你在容器的Dockerfile中书写的定义规范来管理其生命周期。

这意味着Kubernetes会为你自动执行所有这些任务,但它怎么做完全是基于做为开发人员所设置的配置。

虽然你可能是一名神枪手(工程师),但你可能无法确切知道在部署的第一个月内将会有多少流量,或者是应用程序表现如何。

这就是为什么,特别是对于前几个月,监控Kubernetes集群非常重要。

现在为桌面准备的有一些非常好的开源监控工具。

例如,Prometheus包含一个功能强大且灵活的查询语言——PromQL,它允许你收集Kubernetes集群并在时间序列数据库中记录这些富含洞察力的实时指标。

当你将Prometheus与Grafana(一种数据可视化工具)配合使用,它会将指标精美地展示在容易看懂的图表中。

Prometheus和Grafana一起为你的Kubernetes集群提供强大的数据可视化和监控功能。

但这些工具仅适用于桌面。

这意味着在第一个月左右,当你还在微调并了解集群的行为表现或应用程序面临多少流量时,你就被拴在办公桌上了。

事实上,直到最近,当你在旅途中时,还没有什么出色的移动解决方案可以用于管理集群的指标。

幸运的是,如果你在Kubernetes集群上运行Prometheus/Grafana监控栈,现在有一个名为Aetos的移动应用程序,可直接通过手机监控Kubernetes集群的运行状况和性能。

而且这个应用非常容易使用,只需将你的Grafana URL以及API密钥配置到应用程序中,Aetos就会给你容易读懂的图表让你实时查看数据。

当前该应用程序使用一体化可滚动视图,提供了CPU使用率,内存使用率,网络饱和度和系统饱和度的指标。

这些结果显示在几个不同的图表上,让你可以即时了解性能,如需迁移也仅需手指滑动即可。

此外,它是使用开源技术栈打造的,因此无需担心售价问题。

不必说,它有它的好处。

但无论你如何监控你的集群,如果你有一个尚未容器化的遗留代码库,你可能需要开始思考如何实现它。毕竟,容器化才是未来的发展方向。

此外,涉及到杀死那些已到达其生命周期末期的容器,你会发现,让Kubernetes为你做这些肮脏的工作会更容易。除非……你本身就是心狠手辣无情的怪物 :-D

原文链接:Murder On The Kubernetes Express: The Life And Death Of A Docker Container(翻译:冯旭松)

0 个评论

要回复文章请先登录注册