未名企鹅极客 | 基于Kubernetes的容器云实践

本文介绍了未名企鹅如何基于Kubernetes构建高可靠、高可用的容器云架构,包括DevOps流程、日志系统(EFK)和监控系统(Prometheus+Grafana)。通过Kubernetes,实现了自动化部署、资源优化,并解决了环境一致性问题。
摘要由CSDN通过智能技术生成

在这里插入图片描述

基于Kubernetes的容器云实践

01
为什么选择 Kubernetes

1.1 背景
以往我们部署服务采用主流的做法,就是创建一批云主机(比如:亚马逊的 AWS EC2、阿里云 ECS),然后通过 Ansible、Puppet 这类部署工具在机器上部署应用。

但所有功能都集成在一个包里面,而且模块之间相互耦合,随着应用的规模变得越来越庞大,逻辑也越来越复杂,迭代更新也越来越频繁,这时我们就逐渐发现了一些问题,比如:

1)性价比低,资源利用率低
有时候用户只是希望运行一些简单的程序而已,比如跑一个小进程,为了不相互影响,就要建立虚拟机。这显然会浪费不少资源,毕竟 IaaS 层产品都是按照资源进行收费的。同时操作也比较复杂,花费时间也会比较长;

2)迁移成本高
如果想要迁移整个自己的服务程序,就要迁移整个虚拟机。显然,迁移过程也会很复杂;

3)环境不一致
在进行业务部署发布的过程中,服务之间的各种依赖,比如操作系统、开发语言及其版本、依赖的库/包等,都给业务开发和升级带来很大的制约。

那有什么办法能够解决这些困难呢?

1.2 Docker 的横空出世
随着 Docker 的横空出世,上面的那些问题似乎可以得到解决,那 Docker 又是什么呢?

在某一段时期内,大家一提到 Docker,就和容器等价起来,认为 Docker 就是容器,容器就是 Docker。但其实容器是一个很早就有的概念,并不是 Docker发明的,Docker 只是一个容器管理引擎,其降低了使用容器技术的门槛,轻量、可移植、跨平台、镜像一致性保障等优异的特性。

Docker 镜像解决了环境打包的问题,它直接打包了应用运行所需要的整个“操作系统”,而且不会出现任何兼容性问题,它赋予了本地环境和云端环境无差别的能力,这样避免了用户通过“试错”来匹配不同环境之间差异的痛苦过程, 这便是 Docker 的精髓。

有了 Docker,一下子解放了生产力,如:
开发同学,可以选择合适的编程语言和框架,然后通过微服务的方式组合起来。
交付同学,可以利用容器保证交付版本和交付环境的一致性,也便于各个模块的单独升级。
测试同学,可以只针对单个功能模块进行测试,加快测试验证的速度。

Docker 让工作更有效率了,但如果我们大规模地使用容器,就不得不考虑容器调度、部署、跨多节点访问、自动伸缩等问题了。

那有什么好用的调度平台呢?

1.3 Kubernetes 登场
如今主流的容器管理调度平台有三个,分别是 Docker Swarm、Mesos Marathon 和 Kubernetes,它们有各自的特点。首先作为容器调度平台,得要有以下几种特性:

1)可以自动生成容器实例;
2)生成的容器可以相邻或者相隔,帮助提高可用性和性能;
3)还有健康检查、容错、可扩展、网络等功能;
4)解决需求与资源的匹配编排问题。

今天我们介绍的主角是 Kubernetes(简称K8S),其目标就是消除编排物理或者虚拟计算、网络和存储等基础设施负担,让应用运营商和开发工作者可以专注在以容器为核心的应用上面,同时可以优化集群的资源利用率。

架构图(来源官网):
在这里插入图片描述

Kubernetes 采用了 Pod 和 Label 这样的概念,把容器组合成一个个相互依赖的逻辑单元,相关容器被组合成 Pod 后被共同部署和调度,就形成了服务,这也是 Kuberentes 和其他两个调度管理系统最大的区别。

02

未名企鹅基于 Kubernetes 的容器编排系统

2.1 架构简图
未名企鹅采用 Kubernetes 的容器编排系统,整合 DevOps 周边应用,构建了一套全自动化的持续集成、持续交付、持续部署的平台。减轻开发及运维的负担,同时能提高资源利用率。

架构简图如下:
在这里插入图片描述

下面将通过对 DevOps、日志系统、监控系统的介绍来详细了解该架构图。

2.2 DevOps
根据架构图,简要介绍下未名企鹅的 DevOps 流程:
第一阶段:开发提交代码时,触发 sonar 静态扫描,单元测试,如果这些测试不通过,将通知开发进行修复。

第二阶段:开发提交代码后,经过编译、构建镜像,然后部署到测试环境,触发自动化测试。

第三阶段:测试环境测试通过后,发布到集成环境,验证通过后可以进行生产发布。同时进行生产环境各项指标的监控工作。

在这里插入图片描述

通过 DevOps 这套流程,可以很方便的构建以及发布服务,解放生产力,并且提高交付的能力。

2.3 日志系统
在架构图中涉及到日志相关的内容。在以往,每次出现问题需要查询日志的时候,我们需要登录到服务器,并且使用各种命令来搜索出想要的关键日志。这样不仅效率低下,而且对于异常程序会产生大量的日志,排查问题的时间会变得很长。

我们采用 EFK 这套解决方案来收集 Kubernetes 系统中 pod 的日志。EFK 是 Elasticsearch、Fluentd、Kibana 三个组件的缩写,而且都是开源软件,之间相互配合使用,完美的衔接,能够高效的满足很多应用场景。结构图如下:
图片
1)Elasticsearch 负责存储日志
2)Fluentd 负责收集日志
3)Kibana 负责界面展示,日志搜索

有个这套 EFK 解决方案,开发和运维同学可以很方便的在 Kibana 上搜索到应用服务的日志,方便快速的定位问题,以及解决问题。

2.4 监控系统
最后说下监控系统,我们采用 Prometheus 采集 Kubernetes 系统中各服务的指标,然后采用 Grafana 进行数据展示。

可以对各种关键性指标进行收集和展示,比如:
1)主机的CPU、内存、I/O、磁盘。
2)应用的CPU、内存等资源使用量。
3)JAVA 服务的一些关键性指标等都能够进行监控。
在这里插入图片描述

03

总结

未名企鹅基于 Kubernetes 构建了一套具有高可靠、高可用、高稳定性的容器云架构。另外我们针对应用服务及主机节点都设计有动态扩容和缩容的功能,能够应对各种高并发、高负载的使用场景。

在整个容器云实施落地过程中,我们遇到了很多的困难和挑战,同时也收获了很多宝贵的经验和教训。相信我们有能力,也能够为客户提供更加稳定、安全、可靠的服务。

文 / 平平
编辑 / Crystal

关于未名企鹅

未名企鹅以“连接健康”为使命,致力于提供生命健康领域的大数据产品和解决方案,帮助客户实现数据驱动的业务增长。

未名企鹅中的“未名”代表北大,寓意人文精神;“企鹅”代表腾讯,象征科技。由一群来自腾讯的北大校友们于2015年创立。生命健康领域正是体现人文关怀的产业,公司以未名企鹅命名是希望以人文情怀加上科技力量来推动生命科学行业数字化发展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值