畅聊Kubernetes 多集群调度方案
发布时间:2022-07-30 16:09:12 所属栏目:系统 来源:互联网
导读:Kubernetes 是一个容器编排平台,用于调度、部署和管理容器化应用。并且经过几年的发展,k8s 已经成为事实上的容器编排平台标准。集群是 k8s 架构的构建块(building block)。集群由多个工作节点(物理机或者虚拟机)组成,提供一个可供容器运行的资源池。
Kubernetes 是一个容器编排平台,用于调度、部署和管理容器化应用。并且经过几年的发展,k8s 已经成为事实上的容器编排平台标准。集群是 k8s 架构的构建块(building block)。集群由多个工作节点(物理机或者虚拟机)组成,提供一个可供容器运行的资源池。一个集群拥有: 为什么要有多集群调度? 通常来说,一个集群的大小需要预估业务的资源总量。当资源不够时,可以通过增加机器数量来进行集群扩容。但是集群规模也不是无限上升的。当节点 /pod 的数量越多,对控制平台的组件的压力就越大,进而影响集群整体稳定性。 场景 Kubefed Liqo Pod 调度 静态调度、动态调度只支持 Deployment/ReplicaSet 动态调度,但是还是会出现 pending 情况 控制平面 一套中心化管理组件 每个集群对等管理 集群发现 主动注册 动态发现和注册新集群 本文不会详细介绍这些项目在部署和网络管理的内容,重点分析两个项目(Kubefed、Liqo)的跨集群资源调度。 KubeFed KubeFed 的目的是通过统一的 API 管理多个 k8s 集群,实现单一集群管理多个 k8s 集群的机制,并通过 CRD 的机制来扩展现有的 k8s 资源跨集群编排的能力。 KubeFed 将集群分为 host cluster,member cluster 两个角色: host cluster:KubeFed 的控制平面面,用户需要安装 KubeFed 的 operator 组件。 member cluster:注册到 KubeFed API 上的集群,由 KubeFed 统一管理。通过命令行kubefedctl join 的方式手动注册到 host cluster。 被联邦管理的 k8s API 资源统称为 Federated Resources,例如 FederatedDeployments。开启跨集群调度也需要在 host cluster 上显式地对应用资源开启集群联邦管理,开启的方式是通过 kubefedctl federate 创建 FederatedTypeConfig。KubeFed 也支持联邦化 namespace,让 namespace 下面的资源都联邦化。通过 federation control plane 来下发资源到 member cluster。 kubefed-overview KubeFed 概览 资源调度 那 KubeFed 怎么支持跨集群部署的呢?在开启资源的联邦化之后,Federated Resources 的 spec 分成 3 个基础配置 : template:原资源类型的 spec placement:定义期望部署的集群 overrides:定义集群特定配置,基于原资源类型的 spec 进行修改,比如副本数的变化 用户在部署服务时,可以在 spec 下定义部署的集群(placement)和集群指定参数(overrides)。比如服务需要在 cluster2 集群上增加副本数,修改 deployment 的 replicas,需要在 overrides 上填写“/spec/replicas”的修改。可以想到为了通用,overrides 的配置有一定复杂性。 复制 spec: template: metadata: labels: app: nginx spec: replicas: 3 ... placement: clusters: - name: cluster2 - name: cluster1 overrides: - clusterName: cluster2 clusterOverrides: - path: "/spec/replicas" value: 5 ... Federated Resources 还支持通过另一个 CRD 来 ReplicaSchedulingPreference 配置资源类型级别的集群调度倾向。该方法通过指定资源类型在 member cluster 的最大 / 最小副本数实现了依据剩余可用资源的动态平衡。最终 controller 会将 preference 信息更新到 Federated Resources 的 overrides 上,从而重新分配实例。不过该功能还只支持 deployment/replicaset 资源。 可以看出在 KubeFed 的架构,还是区分了不同集群的配置和动态调度。 具体看看静态调度和动态调度。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |