分布式云原生操作系统 KubeWharf 初探
自 2023 年以来,云原生技术的快速发展为企业带来了降本增效的机会。通过优化资源利用率和自动化管理,企业能够降低成本并提高效率。云原生架构和设计提供了高度可伸缩和弹性的应用程序,使企业能够更好地应对用户需求的变化,并加快软件交付速度。然而,企业需要具备相应的技术能力和知识来理解和应用云原生技术,并进行全面的规划和设计,以确保系统的稳定性和安全性。同时,在原生的 K8s 中,针对海量工作负载也带了不少挑战,字节针对原生 K8s 在数据存储、多租户管理、网络网关、成本优化、集群调度、监控追踪方面沉淀了非常多的生产经验,并将其开源出来,它就是字节跳动基础架构团队基于 Kubernetes 构建的分布式操作系统-Kubewharf。
KubeWharf 经过大规模应用和不断的优化增强,专注于提高系统的可扩展性、功能性、稳定性、可观测性和安全性。KubeWharf 旨在支持以下场景:大规模多租集群、离线混部、存储和机器学习云原生化。
通过优化 Kubernetes 的核心功能和添加自定义功能,KubeWharf 提供了更好的系统可扩展性。它能够轻松地处理大规模集群,并支持多租户的管理和调度。此外,KubeWharf 还通过增强 Kubernetes 的功能,提供了更丰富的特性,以满足不同场景的需求。
稳定性是 KubeWharf 的另一个关键关注点。通过对 Kubernetes 进行优化和增强,KubeWharf 提供了更强大的容错机制和自动恢复能力,以确保系统的稳定运行。
KubeWharf 还注重系统的可观测性,即对系统状态和性能的监控和分析能力。它提供了丰富的监控指标和日志收集功能,帮助用户更好地了解系统的运行状况,并快速诊断和解决问题。
安全性是 KubeWharf 设计的另一个重要方面。它提供了强大的安全措施来保护集群和应用程序的安全。这包括身份认证、访问控制、数据加密等功能,以确保敏感数据和资源的安全性。
原数据存储之 KubeBrain
字节在存储方面开源了 KubeBrain,在传统的 K8s 典型的中心架构中,对 Matedata 存储非常重要,因为关系到整个 K8s 集群的稳定性及可扩展性,字节针对海量数据原生 etcd 遇到性能瓶颈后,自研了 Kubebrain 代替传统 K8s 集群中的 etcd 存储原数据,其基于分布式 KV 键值对设计并实现,可以支撑超过 2w 节点超大规模 K8s 业务集群稳定运行,成功替代原上 etcd 集群规模限制住在 5k 节点的性能瓶颈。
KubeBrain 特点:
无状态 KubeBrain 作为一个实现 API Server 所需要使用的存储服务端接口的组件进行存储接口的转换并不实际存储数据,实际的元数据存放在底层的存储引擎中,而 API Server 所需要监听的数据存放主节点内存中。
扩展性 KubeBrain 抽象了键值数据库接口, 在此基础上实现存储 API Server 存储所需要使用的接口, 具有指定特性的键值数据库均可适配存储接口。
高可用 KubeBrain 当前采用主从架构,主节点支持包括条件更新、读、事件监听在内所有操作,从节点支持读操作,基于 K8S 的leaderelection 进行自动选主,实现高可用。
水平扩容 生产环境下,KubeBrain 通常使用分布式键值数据库存储数据,水平扩容包含两个层面:在 KubeBrain 的层面,可以通过增加从节点提高并发读性能;在存储引擎层面,可以通过增加存储节点等手段提高读写性能和存储容量。
KubeBrain 系统实现了 APIServer 所使用的元信息存储 API ,整体采用主从架构,主节点负责处理写操作和事件分发,从节点负责处理读操作,主节点和从节点之间共享一个分布式强一致 KV 存储,在此基础上进行数据读写。
多租户管理之 KubeZoo
原生 Kubernetes 已成为容器编排领域的标准,但在集群管理,原生集群不提供多租户管理能力,但是在企业的复杂业务中,需要集群具备多租户管理的需求,字节针对此问题,内部自研 KubeZoo 轻量级多租户管理项目,其基于协议转换的核心概念,在一个无力的 K8s 集群中虚拟多个租户,具备轻量级,兼容原生 K8s API 物侵入等特性,打造 Serverless Kubernetes 方案。
KubeZoo 是一个轻量级的 Kubenertes 多租户项目,基于协议转换的核心理念在一个物理的 K8s 控制面上虚拟出多个控制面,它具有以下特点:
资源消耗低:和租户独占集群或者 Master 控制面对比,KubeZoo 只需要一个“网关”,无需为每一个租户起一个独立的控制面集群,资源消耗很少。且租户数量越多,资源消耗方面的收益更加显著。
控制面隔离性高:每个租户可以拥有独立且完整的 Kubernetes 集群视图,租户既可以使用 namespace scope 的资源,又可以使用 cluster scope 的资源,使用体验好。
运维成本低:KubeZoo 有效的减少了集群/ Master 管控面的数量,大大减少了运维、升级维护成本。
高效率:秒级创建租户,每个租户的集群创建相当于创建一个 Tenant 对象,省略了耗时的硬件资源分配和控制面初始化过程。
网络流量治理 KubeGateway
在原生 Kubernetes 中,存在 kube-apiserver 在海量流量场景下复负载不均衡情况,由于 kube-apiserver 和 client 使用 HTTP2 协议,多个请求会复用底层同义 TCP 链接,
这导致 kube-apiserver 重启或异常重启情况下,会引起 kube-apiserver 在长时间内有很少请求数,极端情况下,负载较高会引起 OOM,甚至引起雪崩。由于企业大部分业务的云原生化,大部分应用均上 K8s,对集群高可用性提出更高的要求,在生产环节中的经验沉淀,也使得字节针对 kube-apiserver 流量特征自研七层网关 KubeGateway。
目前外部负载均衡器(LB)的选型一般为 LVS、云厂商的 SLB 或 nginx、HAProxy 的四层负载均衡方案,存在如下问题:缺乏请求治理的灵活性:4 层负载均衡在传输层工作,它只负责消息的传递,但是无法处理应用层的 HTTP 协议的信息,因此相较于 7 层负载缺乏对请求治理的“灵活性”和 “智能性”。比如无法根据请求的内容(比如 verb、url 等字段)制定灵活的负载均衡和路由策略,也无法在网关层对请求级别进行限流降级等处理。
KubeGateway 是一个七层网关,用于接入和转发 kube-apiserver 的请求。它具有以下特点:对客户端透明,无需改造即可接入;支持多个 K8s 集群的请求代理,通过不同域名或虚拟地址进行区分;实现基于 HTTP 请求级别的负载均衡,解决 kube-apiserver 负载不均衡问题;支持可扩展的负载均衡策略,包括 Round Robin 和 Random 等;灵活的路由策略根据请求信息进行路由;云原生化的配置管理,支持 K8s 标准 API 形式管理配置;提供限流、降级、动态服务发现、优雅退出等通用能力。
成本管理及离线部署之 Katalyst
在云原生场景下,资源分配不合理,如何提升集群资源利用率,通过离线作业进行云原生改进,Katalyst 实现了离线元数据的打通,使得离线作业能够与在线服务共享同一基础设施。这样一来,离线作业可以充分利用在线服务未使用的资源,从而提高资源利用率。其次 Katalyst 系统实现了管控同步化,确保在线和离线工作负载之间的资源分配协调。它通过与 Kubernetes 体系中的 Kubelet 或 Node Manager 等单机组件进行通信,异步更新在线和离线工作负载的资源分配情况。这种协调机制确保了资源的合理分配和高效利用。
此外,Katalyst 系统还具备策略智能化的特点。Katalyst 系统支持运维自动化。它提供了自动化的资源管理功能,减轻了运维人员的工作负担。运维人员可以通过 Katalyst 系统进行资源配置、监控和调整,从而实现对整个云原生环境的高效管理。
Katalyst 解决了云原生场景下的资源不合理利用的问题,有以下特点:
QoS-Based 资源模型抽象;
资源弹性管理;
微拓扑及异构设备的调度、摆放;
精细化资源分配、隔离。
Katalyst 架构主要分为四层,API 层、中心、单机层、内核层。
Katalyst 系统是字节跳动在云原生化改造中开发的一个关键组件,通过离线元数据打通、管控同步化、策略智能化和运维自动化等特点,提供了高效的资源管理和优化能力,为字节跳动的云原生环境带来了显著的性能和效益提升,目前开源出来,可以针对痛点进行解决适配。
可观测性之 Kelemetry
在云原生可观测性下,logging、tracing、metric 是业界所关注的指标,字节针对生产环节的可观测实战,开源 Kelemetry,其是一个用于 Kubernetes 控制平面的全局追踪系统。该系统从全局视角追踪多个 Kubernetes 组件的行为,并记录单个 Kubernetes 对象的完整生命周期以及不同对象之间的相互影响。Kelemetry 通过可视化 K8s 系统内的事件链路,使得 Kubernetes 系统更容易观测、理解和调试。
传统的分布式追踪通常在用户请求期间的内部调用之间建立追踪。然而,在 Kubernetes 中,由于其异步和声明式的特性,组件之间的直接因果关系很难观察到。为了解决这个问题,各个组件过去通常实现了自己的内部追踪,但缺乏一个单一的追踪能够解释整个流程,导致可观察性的孤立岛。
为了解决可观察性数据孤岛的问题,Kelemetry 以组件无关、非侵入性的方式收集并连接来自不同组件的信号,并以追踪的形式展示相关数据。它采用了与传统跨度追踪模型不同的方法,为每个对象创建一个跨度,并将在对象上发生的事件作为子跨度。通过连接对象之间的拥有关系,形成树形层次结构和时间线,Kelemetry 提供了更全面的观测和理解 Kubernetes 系统的能力。
Kelemetry 的主要数据源之一是 Kubernetes apiserver 的审计日志,这些日志提供了有关控制器操作的详细信息。为了简化部署过程,Kelemetry 还提供了一个审计 webhook,用于接收原生的审计信息,并暴露插件 API 以支持特定厂商的审计日志消费。Kelemetry 是一个用于 Kubernetes 控制平面的全局追踪系统,通过连接多个组件的行为和事件,提供了更好的可观测性和调试能力,使得 Kubernetes 系统更容易管理和理解。
有了 Kelemetry,大大降低了 Kubernetes 定位问题的复杂性,是的业务更可观测透明。
多集群编排调度之 KubeAdmiral
在生产环节中,企业不仅仅是一朵云,更多的是多云、混合云,K8s 作为云计算中的云原生操作系统,其对基础设施进行了抽象几规范化,为应用提供更加统一的标准运行环境,在 K8s 集群联邦作为分布式云场景下,多集群的应用分发调度,管理好多个云原生场景下的基础设施显得尤为重要,
字节开源其多集群联邦调度项目 KubeAdmiral,其是基于 KubeFed v2 基础上研发,并支持 Kubernetes 原生 API 的多集群联邦解决方案。
KubeAdmiral 具有以下优势:
多集群管理:KubeAdmiral 专注于解决多集群环境下的资源管理和调度问题。它能够同时管理多个 Kubernetes 集群,包括跨云和混合云环境。
灵活的调度策略:KubeAdmiral 提供了灵活的调度策略,可以根据应用需求和集群资源情况进行智能的资源分配和调度决策。这样可以最大化资源利用率,提高应用性能和可靠性。
平滑的扩缩容能力:KubeAdmiral 支持平滑的水平扩展和收缩,可以根据应用负载的变化自动调整集群规模。这种能力使得应用可以根据需求动态地进行扩展,提供更好的弹性和可伸缩性。
多样化的资源调度:KubeAdmiral 支持多样化的资源调度,包括有状态服务和作业等。它能够根据不同类型的应用需求,将任务分配到最适合的集群中,并确保资源的高效利用。
与原生 API 兼容:KubeAdmiral 与 Kubernetes 原生 API 兼容,这意味着开发人员可以直接使用 Kubernetes 的 API 和工具进行应用部署和管理,无需额外学习和适应新的接口和工具。
高效、规模化和成本优化:相较于传统的集群联邦解决方案,KubeAdmiral 具有更高的效率、规模化能力和成本优势。它能够提供更好的性能和可扩展性,同时降低管理和运维的成本。
与传统的联邦解决方案相比,KubeAdmiral 具有更高的效率、规模、性能和成本优势,并且与原生 API 兼容,降低了接入成本。通过 KubeAdmiral,企业能够解决集群资源孤岛、资源弹性效率低下和部署效率不理想等问题。它提供了统一的平台入口,支持应用在多个集群间的分发和调度,使得多云和混合云环境下的基础设施管理更加便捷。KubeAdmiral 的架构演进和优势,展示了字节跳动在多集群编排调度领域的创新和努力,企业为多集群编排调度提供了优秀的解决方案。
总结
KubeWharf 项目未来的发展方向包括提供更细粒度的权限控制和智能资源分配,深入整合更多云原生工具和服务以提供全面的解决方案,扩大社区和吸引更多贡献者以实现稳健发展和持续创新。这将推动云原生技术向更加标准化的方向发展,通过社区和开源的力量凝聚全球开发者共同推进云原生技术的进步,实现其蓬勃向前的发展,字节针对复杂云原生生产经验和产品为云原生场景下提供了新的思路及利器。
参考链接
版权声明: 本文为 InfoQ 作者【雪雷】的原创文章。
原文链接:【http://xie.infoq.cn/article/ee72b91deeb0cc8bf8422856a】。文章转载请联系作者。
评论