写点什么

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

  • 2018-03-25
  • 本文字数:5861 字

    阅读完需:约 19 分钟

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

腾讯云容器服务应用编排

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 ,甚至是用户的定制版本。

腾讯云 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 月初上线。

2018-03-25 21:383993
用户头像

发布了 24 篇内容, 共 10.7 次阅读, 收获喜欢 2 次。

关注

评论

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

《Programming from the Ground Up》读后感

codists

汇编 编程人

在Vue3中如何实现四种全局状态数据的统一管理?

不在线第一只蜗牛

JavaScript vue.js 前端

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

博睿数据

ECCV 2024 亮点!RoboTwin:首个双臂协同机器人策略学习Benchmark

松灵机器人

前沿科技 人工智能’ 具身智能 松灵机器人 双臂智能机器人

登顶!智源BGE首开国产模型Hugging Face月度下载全球第一

智源研究院

内核级流量治理引擎Kmesh八大新特性解读

华为云开发者联盟

服务网格 ebpf Sidecar Kmesh

文档转换API功能与特性全景:选择指南与应用洞察

幂简集成

API

阿里云可观测 2024 年 9 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

3个步骤轻松集成Push Kit,实现App消息推送

快乐非自愿限量之名

人工智能 深度学习 HarmonyOS

繁星·数智思享会第2期:流程挖掘,全知视角驱动业务增长

望繁信科技

流程挖掘 流程资产 流程智能 望繁信科技 数字换转型

Python装饰器:让你的代码优雅又高效的秘密武器

LLLibra146

装饰器 代码优化 Python 3.12 Python编程技巧

拍立淘API返回值在商品数据分析中的应用

代码忍者

pinduoduo API API 性能测试

数据仓库 Palo 2.0 for Apache Doris 冷热分离原理分析

Baidu AICLOUD

数据仓库 数据仓库服务

天猫商品描述API返回值中的商品参数对比与竞品分析

技术冰糖葫芦

API 接口 API 文档 API 测试 API 性能测试

Python:条件分支 if 语句全讲解

不在线第一只蜗牛

Python

CocosCreator 快速部署 TON 游戏:Web2 游戏如何使用 Ton支付

股市老人

精准监控,高效运营 —— 商品信息实时分析为商家带来新机遇

技术冰糖葫芦

API 接口 API 文档 API 测试 pinduoduo API API 性能测试

基于 Nginx 的大型互联网集群架构与实战方案

EquatorCoco

nginx 架构 运维

一文读懂HyperWorks的耦合求解功能

智造软件

CAE altair hyperworks

JNPF重塑企业数字化竞争力

EquatorCoco

低代码

Spring Boot3集成 LiteFlow 实现业务流程编排

江南一点雨

什么是iPaaS?iPaaS选型、落地及案例分析

RestCloud

数据集成 应用集成 ipaas

老韩运维知识解析系列02:深入理解网络监控指标与实战应用

Geek_a83400

如何挑选CDN加速器节点网络?

Ogcloud

CDN 网络加速 CDN加速 企业网络加速 CDN网络加速

软件测试学习笔记丨二叉树:添加练习

测试人

软件测试

淘宝商品详情API返回值:深度挖掘其业务价值

代码忍者

pinduoduo API API 性能测试

云桌面VS传统PC:企业用户该如何取舍

青椒云云电脑

云桌面

博睿数据Bonree ONE全面适配HarmonyOS NEXT,守护鸿蒙原生应用稳健前行

博睿数据

打造你的专属语音助手,基于函数计算托管 CosyVoice 语音模型

阿里巴巴云原生

阿里云 云原生 函数计算

鸿蒙原生应用开发者激励计划发布,冲刺HarmonyOS NEXT正式商用

最新动态

倒计时1天 | 第三届OpenHarmony技术大会——明天,上海见!

OpenHarmony开发者

剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略_DevOps & 平台工程_江柳_InfoQ精选文章