剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

2018 年 3 月 26 日 InfoQ

点击关注 InfoQ,置顶公众号

接收程序员的 8 点技术早餐


1 前言

Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔……

虽然,Kubernetes很火,并不代表可以“上手即用”,基于 Kubernetes的容器编排也不是简单的“拿来主义”。在容器圈,除了 Kubernetes,还存在着 Mesos、Swarm等分属不同阵营的容器集群管理工具,以及基于这些工具的多个容器云提供商。

腾讯云在 2016年底决定开发容器产品,随后组建容器技术团队并进行技术选型,通过对不同编排工具的分析对比,最终选择 Kubernetes 作为容器编排引擎,并且迅速在 2017 年初推出容器解决方案 CCS ,为用户提供托管 Kubernetes 的一站式服务。

随着业务量的增加,腾讯云容器团队基于 Kubernetes,不停的增加和完善容器监控、日志处理、容器 Registry 等关键特性,来保障用户业务的平稳运行。在整个 2017 年的运营过程中,管理了数千个集群、数十万容器,以及业务高峰期的成倍扩容。

那么,在 16年底,Kubernetes并未大热时,腾讯云为何偏偏在诸多主流的编排引擎当中选择 Kubernetes?腾讯云 Kubernetes架构和资源调度原理是什么样的?在用户托管服务中,又为何采用 Kubernetes来托管用户 Kubernetes集群的 Master?作为国内最大基于 Kubernetes的容器服务提供商,腾讯云在 Kubernetes上还有哪些应用实践…… 本文将带着这些疑问,为你一一揭开腾讯云基于 Kubernetes的 PaaS平台神秘面纱。

2 为何选用 Kubernetes?

容器技术无疑是近几年最热门的技术之一,很多公司或者行业已经把容器作为自己的测试环境以及正式环境,正式上跑一些业务。腾讯紧随外界技术发展的潮流,在三年之前,腾讯云的基础平台部门开始容器方面的技术实践,经过三年时间的积累,腾讯云目前已经有很多业务跑在容器平台上。

在最开始的容器产品技术选型阶段,腾讯云也曾对比过 Kubernetes、Docker Swarm、 Mesos:

  • Kubernetes的核心是如何解决自动部署,扩展和管理容器化(containerized)应用程序。它支持资源调度、服务发现、服务编排、资源逻辑隔离、服务自愈、安全配置管理等。

  • Mesos是一个分布式内核,核心理念是数据中心操作系统(DCOS),为了解决 IaaS层的网络、计算和存储问题,所以 Mesos的核心是解决物理资源层的问题。它同时支持 Marathon、 Kubernetes 和 Swarm 等多种框架,Mesosphere 也是 Kubernetes 生态的一员。

  • Swarm:从 Docker1.12版本开始,Swarm随 Docker一起默认安装发布,也由于随 Docker引擎一起发布,无需额外安装,配置简单。它支持服务注册、服务发现,内置 Overlay Network以及 Load Balancer。Swarm是与 Docker CLI非常类似的操作命令,对熟悉 Docker的人非常容易上手学习。

综上来看,每一种工具都有自己的核心理念。

但是,腾讯云最终选择了 Kubernetes, 现在看来这个选择无比正确。 在技术选型上,除了编排引擎自身的核心特性,腾讯云也主要从以下几个方面进行了评估。

注:表格里的材料是当初选型时调研的情况,上述编排工具现在的特性已经有了新变化。

从整个行业来看,业界的技术架构正在大规模向微服务迁移,容器技术天生就是部署微服务的最佳方式,腾讯云拥有海量的业务架构,而 Kubernetes 的使用让部署大规模的微服务更加容易,这也是腾讯云选择 Kubernetes的主要原因,另外腾讯云选择 Kubernetes还考虑了其它优势,如:

  • 出身名门 Google,其开发和设计受到了 Google著名的 Borg系统的影响;

  • GitHub上关注 Kubernetes项目和提交代码的开发者非常多,社区活跃,如果遇到问题,通过社区咨询和解决 问题速度也会比较快。

  • Kubernetes可以很好的支持有状态的服务。

Kubernetes 是近 3 年来社区热度最高的项目,Linux 基金会也成立了 CNCF 来加强社区运作,不仅对 Kubernetes 进行管理,还对相关项目进行有序的运作,保证了整个技术栈稳定和蓬勃的发展。 Kubernetes技术相比Docker swarm和Mesos 学习难度更高,腾讯云为此提供了免费容器实验室, 帮助开发者快速入门学习kubernetes,感性趣的读者可以点击【阅读原文】了解详情。

3 腾讯云目前有哪些容器解决方案?

腾讯云 PaaS平台发展至今已有了丰富的容器解决方案, 包括但不限于:腾讯云 Kubernetes托管服务、单容器实例服务、TencentHub服务、Flow Engine服务、CCI持续集成服务等,以及基于 Kuberentes 的 TensorFlow 和 Spark 解决方案,帮助用户在使用容器解决方案的同时进行数据计算和模型训练。

  • 腾讯云 Kubernetes服务:基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的 CBS、CLB 等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。

  • 单容器实例服务:基于 Clear Linux 技术提供的单容器实例解决方案,通过单容器实例服务享受容器的便捷、虚拟机级别的隔离, 像使用虚拟机一样如丝般顺滑的来使用容器,非常试用于通过容器来进行批量计算、通过容器来快速部署个人站点。不依赖 VM的容器在配置和使用时间上更灵活,提供了一种更低成本的计算资源。目前,但容器实例服务正在内测阶段。

  • TencentHub服务:在云原生应用盛行的今天,仅仅提供 Git 服务或 Container 镜像存储的 Hub 已经无法满足用户在日常开发和运维过程中的种种需求。构造支持多种文件格式、容器镜像格式、编排方案的云原生 Hub 能更好的降低用户的架构向云原生迁移。 TencentHub不仅仅提供一个私有镜像的存储,同时提供了 Helm包、二进制文件等文件存储。

  • DevOps 产品:DevOps 任务容器化、资源及执行全托管至 Kubernetes、提供给用户一个全生命周期的 Workflow,完成容器构建、测试和部署等 DevOps 流程,支持用户通过界面拖拽定义 Workflow ,支持 Workflow 定义文件导入等功能,和腾讯云已有基础服务和 DevOps 服务打通。核心引擎开源到容器社区,组件库作为配套功能同时开源。

4 腾讯云是如何基于 K8S做容器集群的管理?
腾讯云容器服务应用编排

Kubernetes原生的方案中,基于服务粒度对系统组件进行管理,支持服务注册发现和路由管理。对于一个服务提供多种不同的资源描述类型,比较常用的有 Deployment、Job、CronJob、Stateful、Daemonset。

腾讯云容器服务参考社区 Helm的实现形式,在容器服务中实现了完整的应用编排管理功能。腾讯云容器服务编排服务主要分为配置管理,应用模板管理,基于应用的服务组管理几个主要部分。

配置管理

配置管理是指将应用中常变的值以变量的形式替代,配置项支持多版本,方便用户进行更新和回滚应用。关于配置管理的实现,腾讯云支持三种实现方式:

  • Helm的模板文件支持变量渲染

  • Kubernetes的 ConfigMap中环境变量方式

  • Kubernetes的 ConfigMap通过 Volume方式进行数据填充

其主要作用包括:

  1. 通过提取出多个环境中不同的部分,支持同一套系统在多个环境中部署。

  2. 提取出服务中经常变更的部分,实现服务的灵活变更。并且通过配置文件的版本管理,可以很好的对变更进行追溯和回滚。

  3. 通过配置项,可以隐含的实现多个服务直接依赖关系的管理。例如:服务 A需要访问服务 B的,一般情况下依赖于服务 B的名称。这种情况下,将服务 B的名称提取成为一个配置项,而将配置项传递给服务 A。这样在不同环境中,服务 B名称的改变,服务 A能自动感知,不需要单独修改服务 A的参数。

应用模板

应用模板包括多个服务的定义加一个默认配置,通过应用模板 +配置项的组合,方便用户部署相同应用的不同环境。主要用于描述一个或多个服务的定义,服务的定义支持原生的 Yaml语法,但可以通过 GoTemplate的方式定义对应的变量。其主要作用为:

  • 实现应用的快速克隆。由于应用的相关信息已经通过对应的 Template文件进行了描述,复制应用的过程只需要针对性的修改应用的配置,其他结构信息不需要进行改变。

  • 应用的多环境部署。在多个环境中,实现应用的部署,也不需要关系每个服务具体的部署信息,只需要在不同环境下修改环境对应的配置,即可以通过应用模板实现在新环境应用的快速部署。

  • 更高阶的功能,通过应用市场可以下载通用的模板,快速的部署应用。例如:在 Helm(Charts)的应用市场 https://kubeapps.com/,已经打包好了 100+应用的模板文件。直接下载对应的应用模板就可以实现应用的部署。

应用

应用包括描述多个服务以及这些服务间的相互调用依赖关系 ,方便用户管理多个服务。应用可以理解为多个服务的组合,多个服务会统一进行展示,服务支持按照应用进行搜索。多个服务的配置项,统一的通过同一个配置进行管理。通过服务组的方式,管理多个服务。可以简化多个服务管理的复杂度。

应用中的服务支持单独编辑,部署和更新。同时服务支持差异化比较,方便用户查看两次修订之间的差异。在服务编辑时,自动提取出对应的变量,简化配置的过程。并支持服务回滚功能,支持服务回滚到上一个版本。

用 K8S托管用户 K8S集群的 Master

与其他云服务商不同的是,腾讯云为用户管理 Master 节点,最重要的挑战是为了保证用户 Kubernetes 集群的高可用,将用户 Kubernetes 集群的 Master 节点的进程以容器方式运行,发挥 Kubernetes 的优势提供稳定保障。

在这个过程中,随着托管集群数量的增加,Kubernetes 的 Master 节点的负载也越来越高,腾讯云提供的 Kubernetes 托管服务面临巨大的稳定性挑战:

  • 多集群共享 ETCD面临性能瓶颈、运维困难、可用性较难持续保障

  • 大量小集群产生 master服务器成本增加,可用性、性能较难保障

  • 用 agent管理节点,随集群增加安装包、证书、配置越发难以维护,更新回滚困难

  • 提供给用户的监控与后台使用的监控是完全不同的两套,监控对象与环境不统一,维护困难

Kubernetes为高效运维而生,为什么运维起来却这么难?腾讯云为用户提供了高效的 Kubernetes服务,为什么自己做不到? 通过多次的技术方案碰撞,腾讯云最终选择用 Kubernetes来管理 Kubernetes的方案,让自己成为自己的第一个用户。

如上图,腾讯云将用户集群 Master 节点的组件全部使用容器的方式部署在一个 Kubernetes 集群里进行管理,最大限度的利用了容器的优势和 Kubernetes 本身的能力,通过这样的部署方案:

  • 用户集群 Master不再独占云主机,解决成本问题

  • 健康检查即可实现基本 HA,多副本可提供更高可用性

  • 单个用户集群 Master相关数据放在同一个 namespace下

  • 无需额外 db存储用户集群版本信息

  • 升级时备份 namespace下数据即可快速回滚

  • 无需开发、维护额外的 agent

腾讯云 Kubernetes高可用托管架构解析

用 K8S管理 K8S方案说起来简单,但将用户的所有 Master 节点的组件全部使用容器的方式部署在一个 Kubernetes 集群里,其实现过程也并不容易。具体到落地实践上,腾讯云是如何做的呢?下图为腾讯云的 Kubernetes高可用托管架构。

托管服务中将整个平台分为控制面和数据面两层。控制面节点中驻留的是用户 Kubernetes 集群的 Master 相关容器和腾讯云容器服务的服务管理服务节点;数据面的节点是客户运行业务的节点。

服务管理节点是由一组高可用的 Kubernetes Master 节点组成,同时包括一组高可用的 etcd 集群。服务管理节点外的其它机器都属于该 Kubernetes 的 Node 节点。当用户在腾讯云的控制台申请一个 Kubernetes 集群时,在这些 Node 节点上把 etcd/api-server/controller/scheduler 等 Kuberneter Master 必须组件以 Kubernetes Controller 的方式部署在集群内,并且通过 ingress 暴露到 VPC 。用户 Node 节点在初始化时指定要加入的 Kubernetes 集群。

采用以上架构方案,当用户集群负载升高的时候,可以快速启动更多的容器应对访问压力。同时无需开发额外的 agent 管理 Master 节点,减少管理环节有效的降低运维难度。腾讯云可以通过容器的滚动升级,快速为用户升级到最新的 Kubernetes 版本,享用最新的特性。可以方便的为客户部署多种版本的 Kubernetes ,甚至是用户的定制版本。

5 如何用腾讯云容器解决方案部署微服务?
腾讯云 CCS解决方案介绍

微服务架构适用于构建复杂的应用,腾讯云 CCS容器解决方案将单体式应用从不同纬度拆分成多个微服务,每个微服务的内容使用一个 Docker 镜像管理。在功能不变的情况,应用拆分成了多个可管理的服务,使得每个单体的服务更容易理解、开发和维护。

不同的微服务也可以由不同的团队来开发,开发团队可自由选择开发技术和程序语言等,每个服务又可独立部署、独立扩展。例如 Web 应用程序可以分割成一组更简单的外部服务及多组内部服务。

小红书基于腾讯云的微服务改造实践

小红书是一家发展非常快速的公司,技术团队在急剧增加的同时技术栈也在不断变迁。以前小红书的研发团队采用的是纯 Python 的技术环境,随着业务的发展,不同的团队在做 Java、Go、Node等不同方向尝试 ,同时在每年电商大促时,扩容在现有模式也很耗时耗力。为了为了支撑业务的发展, 小红书利用腾讯云的 CCS解决方案对业务系统进行微服务化改造。

在微服务改造的过程中,小红书基于腾讯云容器服务搭配 Jenkins、GitLab、Prometheus 和 Spinnaker等开源组件,以最小的投入,最低的开发量快速的实现容器化微服务架构。

上图是小红书之前的应用上线的过程,开发向运维提需求,需要多少台服务器,运维依据需求去做初始化并交付给开发。现在小红书有一个运维平台,所有服务器的部署都是由这个平台来完成的,平台调用腾讯云 API 生成服务器,做环境初始化,配置监控和报警,交付给开发的是一个标准化好的服务器。

如上图,开发者拿到服务器准备线上发布时用 Jenkins 触发脚本的方式:用 Jenkins 的脚本做测试,执行代码推送。当需要新加一台服务器或者下线一台服务器,要去修改这个发布脚本。 发布流程大概为:Jenkins 脚本先往 beta 环境发,开发者在 beta 环境里做自测,自测环境没有问题就全量发。

经过架构的系列微服务改造实践,小红书的资源利用率提高了 100%, 计算资源减少将近 1倍,稳定支撑了双 11等大型促销活动。除了应用于微服务架构改造,CCS解决方案也能够根据业务运行情况,提供集群和服务两个层级的弹性伸缩能力,并为持续集成与持续交付提供的高效的 DevOps 环境。

6 未来规划

在 PaaS平台的未来规划上,腾讯云将会提供更多的容器基础解决方案,支持包括 Docker、OCI、Kata 等容器引擎和镜像格式。同时推出更多配套的 DevOps 服务,为用户提供完整的 PaaS + DevOps 开发部署环境。

据悉,腾讯云单容器实例解决方案 CIS 计划在 5 月底发布公测,用户可以通过 CIS从容器 Image 当中快速创建容器实例。同时提供 DevOps 编排引擎的 Tencent Hub 的一部分已经上线,计划将在 5 月底正式发布公测,而在黑石上部署的 CCS 解决方案也即将在 4 月初上线。

登录查看更多
0

相关内容

Kubernetes 是一个自动化部署,扩展,以及容器化管理应用程序的开源系统。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
FPGA加速系统开发工具设计:综述与实践
专知会员服务
65+阅读 · 2020年6月24日
大数据安全技术研究进展
专知会员服务
92+阅读 · 2020年5月2日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
36+阅读 · 2020年4月26日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
【大数据白皮书 2019】中国信息通信研究院
专知会员服务
137+阅读 · 2019年12月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
阿里巴巴全球化架构设计挑战
InfoQ
35+阅读 · 2019年11月25日
深度解读华为云AI开发平台ModelArts技术架构
AI前线
8+阅读 · 2019年5月18日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
重新体验NoSQL | 飞雪连天射白鹿 大数狂舞倚灵动(Lindorm)
阿里巴巴数据库技术
11+阅读 · 2018年12月25日
大数据流处理平台的技术选型参考
架构文摘
4+阅读 · 2018年3月14日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
Conceptualize and Infer User Needs in E-commerce
Arxiv
3+阅读 · 2019年10月8日
Self-Attention Graph Pooling
Arxiv
5+阅读 · 2019年4月17日
The Evolved Transformer
Arxiv
5+阅读 · 2019年1月30日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关VIP内容
相关资讯
阿里巴巴全球化架构设计挑战
InfoQ
35+阅读 · 2019年11月25日
深度解读华为云AI开发平台ModelArts技术架构
AI前线
8+阅读 · 2019年5月18日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
重新体验NoSQL | 飞雪连天射白鹿 大数狂舞倚灵动(Lindorm)
阿里巴巴数据库技术
11+阅读 · 2018年12月25日
大数据流处理平台的技术选型参考
架构文摘
4+阅读 · 2018年3月14日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
【人工智能架构】深度解密京东登月平台基础架构
产业智能官
11+阅读 · 2017年9月26日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
Top
微信扫码咨询专知VIP会员