一线攻城狮谈Kubernetes的实践与应用

 技术分享

作者:洋芋

由萝卜兔编辑整理

最近四年,容器技术的快速发展给系统平台技术带来了深远的影响,随着kubernetes确立编排领域的霸主地位,整个容器生态也日渐明朗:容器引擎领域docker仍然占据主导地位, 编排领域kubernetes一统天下。正是基于这种背景,而且随着我们的快速发展,原有的技术平台和运维平台已经无法很好的满足需求,所以最终我们引入了kubernetes。通过 kubernetes我们完整的统一了内部的技术平台, 下面从两方面来介绍kubernetes在极验的应 用。

PAAS

PAAS作为IAAS和SAAS的中间层,虽然在公有云市场一直不温不火,但是在内部而言, PAAS有其不可替代的作用:

它可以极大的降低应用上线的难度,保证应用开发人员在没有运维协助的情况下上线,升级,回滚;

它可以统一整个工作流;

降低系统管理的难度。

当引入kubernetes后,在其上构建一个PAAS就成了一个很自然的想法,通过一系列的调研, 最终我们发现现存的PAAS往往大而全,但是确实太重,不太符合我们的需要,而且考虑到这类系统根据内部的需求肯定要做一定的调整,最终决定自己开发。

Architecture

PAAS的简化的系统结构图如下(有一些组件做了精简)

PAAS主要提供了两个操作接口:CLI和WEB,CLI的功能全面,WEB界面对有些功能做了精简 (主要是为了避免手残误操作)。下面是一个项目的截图

通过这个界面可以很方便做一些常规操作,比如部署,回滚,伸缩,查看审计日志等等。

实践应用工作流程

开发人员将代码push到gitlab同时打上release tag,gitlab的CI会自动的调用CLI来向PAAS 注册应用和版本,同时CI也会自动的调用CLI来build对应的版本,这个过程会生成对应的 docker image,接着应用开发人员就可以在web界面上升级与部署了,当然发现情况不对也 可以直接在web界面回滚,得益于kubernetes自带的滚动更新支持,整个过程都可以做到对 服务不产生影响。

Job

这部分最主要的目标其实是支持短时间运行的任务,特别是GPU任务,在极验内部,我们在 2016年基于mesos开发了一个支持GPU的Scheduler,可以对任务自动的容错和排队,基本能 满足我们的需求。但是这个有一些缺点,比如因为人力有限,HA部分基本没做,数据持久化 因为当初的设计原因做的也不是非常好。所以当我们引入kubernetes之后,自然而然就考虑 把其移植到kubernetes上,得益于kubernetes的强大功能,整个移植过程比较顺利,它同样 可以通过命令行和web界面操作。它的主要功能有:

任务自动排队;

任务失败会自动重试,次数由用户指定;

可以在web界面或者命令行看到流式的stdout;

可以自动拉取要运行的代码;

总结

通过引入kubernetes以及基于kubernetes的运维工具的开发,最终得到了一个统一的内部平 台,较好的提高了公司的自动化运维水平。



你可能感兴趣的:(一线攻城狮谈Kubernetes的实践与应用)