
Karmada:混合多云下的应用管理
背景 过去几年,公有云凭借着更高扩展性、灵活性、可靠性和安全性,吸引了大量的企业将应用程序部署到公有云上。随着业务规模的不断扩张,企业出于某些原因,如避免厂商锁定、追求更低的延迟、更高的可靠性等,选择将应用部署在更多的公有云上;也有些企业出于数据敏感性等原因,选择将部分应用部署有私有环境中。后者也更像是将上云的过程拉长。不管是多云还是混合云,基础设施都不可避免的存在着差异,企业不得不在适配底层设施上投入了大量的人力物力。 Kubernetes 的出现,完美地解决了这一问题。除了屏蔽基础设施层的差异解决了跨平台的问题,还提供自动化的容器编排、更高的扩展性、弹性和高可用性,其背后更是有着庞大的社区的支持。Kubernetes 的风靡,得到了大量企业的青睐。随着时间的推移,企业使用多个 Kubernetes 集群管理应用的情况越来越普遍。 如何在跨越多个集群、甚至是混合多云的环境下来管理应用成了新的难题。Karmada 的出现正是要解决这一问题。 Karmada Karmada 是 CNCF(Cloud Native Computing Foundation)下面的一个开源项目,旨在为 Kubernetes 集群提供一个平台来简化跨多个 Kubernetes 集群的应用程序部署和管理,并提高可用性和可扩展性。 借用一下官网的架构图。从图中可以看到 Karmada 提供了一个集中式控制平面,负责资源和策略的管理,以及资源的调度;数据平面则是其管理的集群,真正运行资源的集群。 控制平面的组件与 Kubernetes 的组件类似,也都是负责资源的调度。不同的是,Kubernetes 的控制平面负责将资源调度到计算节点,而 Karmada 的控制平面是将资源调度到某个集群。 拿 Deployment 的部署来说,在 Kubernetes 集群中,控制平面根据当前节点的资源情况选择某个或某些节点来运行 pod。在 Karmada 多集群下,创建了 Deployment 资源后,Karmada 控制平面根据策略将其调度到目标的集群:在目标集群中创建 Deployment 资源,所有集群中的副本数之和,就是期望的副本数。