华为云的 Kubernetes 实践之路

阅读数:2153 2018 年 3 月 28 日 18:05

华为与 Kubernetes 的渊源颇深,早在 Kubernetes 刚开源的时候就以社区创始成员及白金会员的身份加入其中。目前拥有 1 个 Steering Committee 席位和 5 个 Maintainer 席位。

1.1 华为自身基于 Kubernetes的实践

加入初期,作为全球最大的电信设备制造商之一,华为内部 IT 运维着遍布全球的八个数据中心,在 100K + VM 中运行 800 多个应用程序,使用虚拟机封装应用程序,但每次启动虚拟机都花费了大量的时间,这给管理及部署基于虚机应用程序的高成本和低效率带来了严峻的挑战。因此华为决定利用 Kubenetes 技术对自身 IT 系统进行容器化改造。

与此同时,华为通过参与和贡献 Kubernetes 项目,为自身带来了在规划、网络、多集群联合、应用支持、安全、可扩展性和政策执行等方面的良好设计、代码和文档管理,以及在服务治理方面的收益。通过自身的容器化改造实践,在受益的同时又将自身遇到的实际问题不断的贡献给社区,与社区成员一同推动 Kubernetes 的发展。

比如,在华为内部 IT 系统的实践历程中,业务的全球化属性给平台带来了混合云、跨地域、多 DC 部署方面的需求,这与社区发展多集群联邦的理念不谋而合。因此,华为在集群联邦项目成立之初就积极参与其中,主导了架构设计以及联邦级别的无状态应用、短任务支持、集群间策略调度、应用跨集群自动伸缩等关键特性开发。目前集群联邦已在社区正式孵化为独立子项目。

另一个例子是早期的 K8S 并不支持亲和反亲和等高级调度策略,使得大型传统应用改造上云十分困难。在华为公司对应用做微服务拆分和容器化改造的过程中,最典型的问题就是拆分后的组件间如何高效地通信。在传统方案中,往往有多个组件的业务进程部署在同个虚机上,组件间交互可以通过进程间通信来实现。应用改造后,组件变成了 k8S 中的 Pod,被相对独立地调度和拉起,通过容器网络互相通信。当一个复杂应用的各个组件十分分散时,网络通信的时延会大幅增加。一方面,针对这个问题,华为在 k8S 社区的主导实现了节点亲和反亲和调度、应用间亲和反亲和调度、Taints tolerations 等高级调度机制。通过给 Pod 配置高级调度策略干预应用组件的分布,配合容器网络在路由策略上的优化,访问时延问题得到了显著的改善。

另一方面,在集群规模和性能方面,华为也做了很多探索与实践。面对大规模场景下海量 Service 的管理性能问题,华为设计实现并向社区贡献了使用 IPVS 管理 service 路由规则的方案,将 k8S 对 service 的管理规模从上千提升到了数万的级别。

1.2 华为云应用服务与 Kubernetes

华为云应用服务产品均围绕着“容器”为中心构建,致力于帮助客户容器化的应用在云上高效地开发、交付与运维,并保障应用运行时的高性能、高可靠、高弹性。目前,华为云应用服务产品以基于 K8S 的华为云容器引擎(CCE)为核心,协同补齐了完整的应用开发、交付与运维流程,为客户提供完整的一站式云上应用生命周期管理方案。

华为云应用服务大体上可以分为三大类:

第一类围绕着 Kubernetes 核心功能,也就是容器编排与调度,与下层的基础设施层包括计算、网络、存储,以及水平的权限控制、网络防护、镜像仓库等服务进行整合形成一个容器化基础设施平台,并向上对接到集群管理、多 DC/AZ、多区域管理实现云上的水平弹性。

通常大家所提到的“容器服务”或“容器云”大部分都是指这一类服务。华为云所提供的云容器引擎(CCE)、云容器实例(CCI)归属于此类。两者均基于 Kubernetes 构建,但技术路线偏重点有所区分。

CCE 的服务形态是用户专属的 Kubernetes 集群(Kubernetes as a Service),用户能够控制整个 Kubernetes 集群的资源与应用,并且可以调用完整的 Kubernetes API,以及安装各类 Addon 以及自定义扩展比如调度器、工作负载控制器等;而 CCI 的服务形态是无服务器容器(Serverless Container),用户无需感知 Kubernetes 集群,通常只需要调用 Kubernetes Workload API 进行应用的管理即可,而把资源全部交由华为云进行自动调度与管理。

因此,通常 CCE 适合业务半托管的场景,即用户自身有一定运维能力,且业务场景需要用户手动做一些管控比如资源规划、弹性伸缩,甚至自定义一些平台特性以适配业务;相对而言 CCI 适合业务全托管的场景,即用户只需关注以容器形态所交付的应用本身,无需关注资源管控,甚至无需关注 Kubernetes 的相关原理。

第二类服务围绕着 Kubernetes 标准化接口以及结合具体场景的最佳实践来构建完整的应用开发、交付与运维流程,实现云上的应用全生命周期管理。

华为云在开发阶段提供微服务开发框架帮助用户在产品开发中落地微服务架构实践,在交付阶段提供“从代码到容器镜像”的自动镜像构建服务,支持一键式部署到 Kubernetes 平台之上,实现持续交付,而最终业务上线运行之后的运维阶段除了基础的容器监控、日志、告警系统之外,同时提供了微服务治理引擎,以及应用性能管理用于故障在线辅助与自动定位。

具体举例而言:

  • 华为云微服务引擎(CSE)提供了具备升降级、容错、熔断等完整服务治理能力的微服务框架,兼容 Spring Cloud、Dubbo 等开源接口,并与 CCE 深度整合,支持 ServiceMesh,未来计划进一步与 CNCF 基金会各微服务相关项目,尤其是 Istio 生态相结合,提供最适合在 K8S 之上运行业务所使用的微服务开发框架
  • 华为云应用编排服务(AOS)提供了以应用为中心的高层编排引擎,能够将 K8S 上运行的各种工作负载、各类资源对象整合管理,并提供了完善的版本与生命周期管理机制,便于客户以更高层的“应用”为对象进行日常交付与运维管理
  • 华为云应用性能管理(APM)提供了丰富的各类运维工具,除了基础的监控、日志与告警,进一步面向故障定位与分析场景提供了应用全局性能拓扑展示与调用链跟踪等高级特性,使得运维人员能够及时了解应用健康状态并进行相关处理。

第三类则是直接在 Kubernetes 之上身体力行地构建一些典型服务化应用,针对某些业务场景提供更易用、更高效的服务,使得客户更聚焦自身业务逻辑。

比如:

  • 以分布式数据库(DDM)、分布式缓存(DCS)、分布式消息(DMS)为代表的云化中间件服务,供应用业务逻辑所调用,辅助客户应用的容器化、无状态化、微服务化开发或改造;
  • 以 CCE/CCI 为基础设施层所构建的 Serverless Computing(FunctionStage)服务,面向 Event-Driven 的典型业务流场景简化应用代码逻辑,并基于容器热启动、各类主流语言运行时的快速启停优化,实现更高效、更低成本的实时计算;
  • 区块链服务 BCS 则提供了主流的 Hyperledger 开源框架,并基于 Kubernetes 的高性能实现 3 分钟一键上链,2000+TPS 的并发区块处理能力,可满足联盟链与私有链的各类业务场景诉求,使客户免运维地使用区块链构建自有业务框架。

1.3 未来:紧随社区版本 持续优势创新

纵观华为在 Kubernetes 上的创新可以总结为优势创新、场景创新、技术创新三个层面,优势创新是围绕华为固有的自身强势领域如网络、硬件进行与容器技术的结合运用。场景创新则是聚焦在不同领域的客户需求如游戏、电商、AI 等,基于客户的计算需求进行解决方案的适配。技术创新,以无服务器容器为例,在 Serverless 的云服务趋势下,华为云提供更加便捷,更加全新理念的容器服务方式。

目前看来,容器服务并没有统一的服务标准,并没有说哪一种创新可以一招解决所有企业云上容器化的痛点,这需要根据客户的业务场景进行量身匹配,而华为云的全栈容器服务的实践案例也充分说明了这一点。众多不同的容器服务在上线不久已应用在众多不同领域,裸金属容器已成功运用在一部分游戏客户中,帮助其进行测试环境,及高峰时间的流量应对。Windows 容器成功运用在传统 IT 系统的容器化改造,而无服务器容器则可以帮助更多缺乏 Kubernetes 技术投入的公司快速上手享受容器化带来的益处。

这也就是华为云对于 Kubernetes 的一些探索和思考,未来还会有更多基于容器的创新,一切才刚刚开始。

评论

发布