Skip to content
This repository was archived by the owner on May 13, 2024. It is now read-only.

MCS Demo with 3 k3s clusters by ErieCanal and Karmada

CaiShu edited this page Jan 24, 2023 · 9 revisions

基于这个演示Simple MCS Demo,我们准备了如下这个演示。在这个演示中,我们采用Karmada进行多集群的部署,采用ErieCanal进行多集群的流量调度。相比于Simple MCS Demo,这个演示主要变化是用Karmada进行部署;之前是在每个集群进行部署,很多重复的工作;在使用Karmada之后,没有重复工作,极大降低了工作量,也相应的降低了手动部署引入的拼写等错误。

简单介绍下Karmada,Karmada是华为云团队开源的多集群部署工具。Karmada可以认为是kubefed项目的继承者和延伸。Karmada在标准的k8s api-server上进行了改进,我们称为karmada-apiserver。通过这个这个api server定义的资源(deployment, service等),可以按照一定的策略部署karmada所管理的k8s集群中。这些资源的定义是兼容标准k8s资源的定义,因此各种资源定义可以直接使用。Karmada引入了PropagationPolicy,具体实现是一个CRD,这个CRD定义了“如何在多个k8s集群上部署资源”,比如部署一个deployment,在第一个集群部署2个实例,在第二个集群部署3个实例等。Karmada的使用,极大的降低了多集群环境下部署的工作量和复杂度。

在这个演示里,我们创建由三个k3s组成的“三集群环境”。在第一个集群中,我们部署karmada控制平面和用于演示的consumer service,这是一个封装的curl,对于一个给定的URL,可以从这个服务的容器里进行curl。等价于attach到容器里,然后手动执行curl。在第二个和第三个集群中,我们部署了Karmada标准演示的nginx服务,这个服务在80端口返回一个nginx的默认页面。在所有的三个集群中,我们部署了erie-canal。erie-canal不区分控制面和执行引擎。演示的预期效果是这样的:在被“karmada + erie-canal”管理的多集群中,一个服务(curl)访问另外两个集群中的服务(nginx)时候,erie-canal可以从集群1调度请求到集群2和集群3,实现跨集群访问。

这个演示的步骤如下,其中有些步骤在Simple MCS DemoKarmada标准演示的nginx服务有具体的细节,这里就直接引用,不再重复记录了。对于这个演示感兴趣的小伙伴如果有任何问题,可以在Erie-Canal项目上开issue,或者在slack和微信群里和我们联系;也可以和Karmada社区联系。

#1 部署3个k3s集群

#2 在集群1中部署Karmada控制平面

#3 在三个集群中部署Erie-Canal

#4 在集群1中部署osm-edge

#5 在集群1中部署curl服务

#6 使用Karmada在集群2和集群3中部署nginx服务

#7 在集群2和集群3中为Nginx服务创建ServiceExport

#8 在curl所在集群(集群1)创建GlobalTrafficPolicy

#9 访问curl,验证结果

Clone this wiki locally