写点什么

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

  • 2019-10-27
  • 本文字数:5960 字

    阅读完需:约 20 分钟

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

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 平台神秘面纱。

为何选用 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。

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

腾讯云 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 服务打通。核心引擎开源到容器社区,组件库作为配套功能同时开源。

如何基于 K8S 做容器集群的管理?

腾讯云容器服务应用编排


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


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



配置管理


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


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

  • Kubernetes 的 ConfigMap 中环境变量方式

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


其主要作用包括:


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

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

  • 通过配置项,可以隐含的实现多个服务直接依赖关系的管理。例如:服务 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 ,甚至是用户的定制版本。

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

腾讯云 CCS 解决方案介绍


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



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


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


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


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



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


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


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

未来规划

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


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


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/O-vaajOCXxaHD1VziV05ZA


2019-10-27 14:351284

评论

发布
暂无评论
发现更多内容

白码低代码/无代码开发平台功能及作用

低代码小观

低代码 开发工具 开发平台 无代码 企业服务

一文,动态规划入门

bigsai

算法 动态规划

个人信息保护法生效,企业数据安全合规正当时

行云管家

信息安全 数据安全 企业安全 网络保护

原来我才是内卷王,闭关3个月肝完Java 7大核心知识,成功斩获字节58万Offer。

Java高级开发

字节跳动 java; 字节跳动面经

OceanBase 源码解读(六):存储引擎详解

OceanBase 数据库

数据库 开发者 高性能 资源隔离 租户

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

Java MySQL redis 程序员 算法

墨天轮国产数据库沙龙 | 黄新著:金仓数据库全生命周期管控

墨天轮

国产数据库 KingBase 人大金仓

为什么那么多人在用WGCLOUD

王逅逅

zabbix 监控系统 linux运维 运维系统

腾讯云发布容器安全白皮书

腾讯安全云鼎实验室

容器 云安全 白皮书

如何快速应对井喷下的OCR需求?

鲸品堂

OCR

你以为委派模式很神秘,其实你每天都在用

Tom弹架构

Java 架构 设计模式

业务数据清洗,落地实现方案

知了一笑

数据 数据清洗 数据管理 数据服务 业务数据

《Linux一学就会》:第二章:Linux基本命令操作和文件管理

侠盗安全

Linux 运维 linux运维 云计算架构师

如何获取所有安装的应用程序信息

Changing Lin

11月日更

MapReduce Service更换集群外部时钟源,仅需10步

华为云开发者联盟

大数据 FusionInsight ntp 时钟同步 MapReduce Service

这场蝴蝶效应,从“丝滑”的双11开始

脑极体

什么是DISA STIG?概述+STIG安全

麦禾测试

JavaIO流核心模块与基本原理

知了一笑

Java nio IO流 字符流 字节流

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

Java 程序员 架构 分布式 算法

Sentinel-Go 源码系列(二)|初始化流程和责任链设计模式

捉虫大师

sentinel Go 语言 sentinel-go

11.11上云嘉年华,华为云数据库助力客户备战业务高峰

华为云数据库小助手

GaussDB GaussDB(for openGauss) GaussDB ( for Redis ) 华为云数据库

初识Java反射概念和使用

CRMEB

OBCE首位认证 实力与颜值并存 | 90后技术宅郑皓嘉的通关之路

OceanBase 数据库

分布式数据库 认证 oceanbase OBCE

“神算子”上线!EasyDL时序预测模型零门槛轻松上手

百度开发者中心

百度飞桨

低代码是什么意思?

低代码小观

程序员 低代码 开发工具 开发平台 企业开发系统

技术干货|开源项目-FlyFish使用攻略

云智慧AIOps社区

开源 大前端 低代码 数据可视化 大屏

TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?

腾讯云数据库

tdsql 国产数据库

ODC V3.2.0 新版本发布 | 着重用户体验,挑战权限管控业务场景

OceanBase 数据库

数据库 开发者 稳定性 应用场景 新功能

IOS技术分享| WebRTC iOS源码下载&编译

anyRTC开发者

ios 音视频 WebRTC 实时通信 视频直播

springboot集成阿里云短信

小鲍侃java

11月日更

行云管家荣登36kr企服点评云计算软件排行榜NO.1

行云管家

云计算 软件 排行榜 IT运维

揭秘腾讯云的PaaS技术选型策略_文化 & 方法_云加社区_InfoQ精选文章