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

高可用集群和负载均衡集群_etcd集群_etcd 集群

1 前言

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

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

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

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

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

2 为何选用 Kubernetes?

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

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

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

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

etcd 集群_高可用集群和负载均衡集群_etcd集群

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

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

Kubernetes 是近 3 年来社区热度最高的项目,Linux 基金会也成立了 CNCF

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

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

etcd集群_高可用集群和负载均衡集群_etcd 集群

4 腾讯云是如何基于 K8S做容器集群的管理?

腾讯云容器服务应用编排

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

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

高可用集群和负载均衡集群_etcd 集群_etcd集群

配置管理

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

其主要作用包括:

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

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

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

应用模板

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

应用

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

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

用 K8S托管用户 K8S集群的 Master

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

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

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

etcd集群_高可用集群和负载均衡集群_etcd 集群

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

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

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

etcd 集群_etcd集群_高可用集群和负载均衡集群

托管服务中将整个平台分为控制面和数据面两层。控制面节点中驻留的是用户 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 镜像管理。在功能不变的情况,应用拆分成了多个可管理的服务,使得每个单体的服务更容易理解、开发和维护。

etcd集群_etcd 集群_高可用集群和负载均衡集群

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

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

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

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

高可用集群和负载均衡集群_etcd集群_etcd 集群

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

高可用集群和负载均衡集群_etcd集群_etcd 集群

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

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

6 未来规划

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

据悉,腾讯云单容器实例解决方案 CIS

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688