KubeSphere+Kosmos 实现跨集群编排
如果无法正常显示,请先停止浏览器的去广告插件。
1. Kubesphere + Kosmos
实现跨集群编排
仇
明
中移云能力中心 ● 软件工程师
主办方
合作伙伴
2. 议题概要
1. 移动云的云原生演进之路
2. 多集群管理 -- Kosmos
• 多集群网络
• 跨集群编排
• 多集群调度
• 结合 kubesphere 使用
• 跨云灾备场景
3. 未来规划
云原生 Meetup 杭州站
3. 移动云的云原生演进之路
内部落地,移动云多款资源型产品使用精细 kosmos v0.2.0 版本发布,目前 star 数
化容器管理进行多集群管理、跨 AZ 编排 量 150+ , pr 300+
精细化容器管理探索阶段
2023.8
2022.4
2022.11
2021.3
多集群管理,跨 AZ 编排
当前
开源筹备, kosmos 项目初始化
( kosmos 的前身)
云原生 Meetup 杭州站
4. 多集群管理 -- Kosmos
名称的由来
Host
Host Cluster
Cluster
kube-APIServer
kube-APIServer
Kosmos ( K 代表
Pod
Pod Virtual
Virtual Pod
Pod Virtual
Virtual Pod
Pod Virtual
Virtual Pod
Pod
node1
node1 node2
node2 leaf-node1
leaf-node1 leaf-node2
leaf-node2
Kubernetes , Cosmos 在希腊语中是
宇宙)是受 Virtual kubelet 等开源项
目启发,并从众多项目实践中孕育而生
的分布式云原生多集群技术集合。
Kosmos 功能模块
多集群网络( ClusterLink )
Kosmos
Kosmos
ClusterLink
ClusterLink
ClusterTree
ClusterTree
Member
Member Cluster1
Cluster1
Scheduler
Scheduler
Member
Member Cluster2
Cluster2
kube-APIServer
kube-APIServer
kube-APIServer
kube-APIServer
跨集群编排( ClusterTree )
多集群调度( Scheduler )
便捷化运维工具( Kosmosctl )
Pod
Pod Pod
Pod Pod
Pod Pod
Pod Pod
Pod Pod
Pod
node1
node1 node2
node1
node1
node2 node3
node1
node1
node3 node1
node1 node2
node1
node1
node2 node3
node1
node1
node3
云原生 Meetup 杭州站
5. Kosmos—— 多集群网络
ClusterLink :使用隧道技术( VxLAN/IPSec )打通跨集群网络。在 CNI 上层实现,用户无需卸载或
重启已经安装的 CNI 插件,不会对正在运行的 pod 产生影响。
Host
Host Cluster
Cluster
Watch
Network-Manager
Network-Manager
Reconcile
Multi-Cluster-CoreDNS
Multi-Cluster-CoreDNS
Cluster
Node
CRD
Cluster
CRD
Node
Config
CRD
mcs-controller
mcs-controller
Watch
Member
Member Cluster1
Cluster1
Controller-Manager
Controller-Manager
node1
node1
Member
Member Cluster2
Cluster2
Reconcile
Agent
Agent
(Daemonset)
(Daemonset)
node2
node2
podlIP:
podlIP:
10.100.0.2/24
10.100.0.2/24
vx-bridge
10.0.1.3/24
vx-bridge
10.0.1.2/24
Controller-Manager
Controller-Manager
Build tunnels,
apply routes, etc.
Tunnel
node4
node4
Agent
Agent
(Daemonset)
(Daemonset)
node3
node3
podlIP:
podlIP:
10.100.0.4/24
10.100.0.4/24
vx-bridge
10.0.1.4/24
vx-bridge
10.0.1.5/24
云原生 Meetup 杭州站
6. Kosmos—— 多集群网络
Gateway 模式
兼容性强,每个集群
只需 1 个节点对外提
Member
Member Cluster1
Cluster1
node2
node2
优。适用于全节点
underlay 互通场景
vx-bridge
10.0.0.2/24
②
vx-local
10.0.1.2/24
①
vx-local
10.0.1.3/24
⑥
⑤
vx-local
10.0.2.2/24
node4
node4
podlIP:
podlIP:
10.200.0.3/24
10.200.0.3/24
③
vx-bridge
10.0.0.3/24
tunl0
景
网络路径短,性能更
node3
node3 (
( gateway
gateway node
node )
)
node1
node1 (
( gateway
gateway node
node )
)
podlIP:
podlIP:
10.100.0.2/24
10.100.0.2/24
供访问,适合跨云场
P2P 模式
Member
Member Cluster2
Cluster2
CNI
CNI
tunl0
④
vx-local
10.0.2.3/24
Member
Member Cluster1
Cluster1
node2
node2
Member
Member Cluster2
Cluster2
node3
node3
node1
node1
node4
node4
podlIP:
podlIP:
10.100.0.2/24
10.100.0.2/24
vx-bridge
10.0.1.2/24
podlIP:
podlIP:
10.200.0.3/24
10.200.0.3/24
vx-bridge
10.0.1.3/24
①
vx-bridge
10.0.2.2/24
vx-bridge
10.0.2.3/24
②
云原生 Meetup 杭州站
7. Kosmos—— 多集群网络
全局 IP 分配
① ip route add 242.0.2.0/24 via 10.0.1.4
dev vx-bridge
GlobalCIDRsMap:
10.100.0.0/24 : 242.0.1.0/24
Member
Member Cluster1
Cluster1
GlobalCIDRsMap:
10.100.0.0/24 : 242.0.2.0/24
Member
Member Cluster2
Cluster2
② iptables -t nat -A POSTROUTING - d
242.0.2.0/24 -j MASQUERADE
③ iptables -t nat -A PREROUTING -d
242.0.2.0/24 -j NETMAP --to
10.100.0.0/24
node2
node2
node4
node4
podlIP:
podlIP:
10.100.0.2/24
10.100.0.2/24 podlIP:
podlIP:
10.100.0.2/24
10.100.0.2/24
globalIP:
globalIP:
242.0.1.2/24
242.0.1.2/24 globalIP:
globalIP:
242.0.2.2/24
242.0.2.2/24
vx-bridge
10.0.1.2/24 vx-bridge
10.0.1.4/24
④ ip route add 242.0.1.0/24 via 10.0.1.2
dev vx-bridge
云原生 Meetup 杭州站
8. Kosmos—— 跨集群编排
Host
Host Cluster
Cluster
App
App
apply
kube-APIServer
kube-APIServer
workload
workload
Pod2
Pod2
Pod1
Pod1
workload
workload
Orchestration
Orchestration
Cluster
Cluster
CRD
CRD
node1
node1
Pod1
Pod1
pod-controller
pod-controller Services/Endpoints
Services/Endpoints
storagecopy-controller
storagecopy-controller Secrets/Confimaps
Secrets/Confimaps
mcs-controller
mcs-controller PVs/PVCs
PVs/PVCs
...
... ...
... ...
... ...
...
node2
node2
leaf-node1
leaf-node1
leaf-node2
leaf-node2
one to many
(LabelSelector)
one to one
Member
Member Cluster1
Cluster1
node1
node1
Pod1
Pod1
Pod2
Pod2
node-controller
node-controller
Services/Endpoints
Services/Endpoints
Secrets/Confimaps
Secrets/Confimaps
PVs/PVCs
PVs/PVCs
...
... ...
...
node3
node3
leaf-node3
leaf-node3
Services/Endpoints
Services/Endpoints
Secrets/Confimaps
Secrets/Confimaps
PVs/PVCs
PVs/PVCs
Pod1
Pod1
更新
pod-controller : 监 听 host 集
群 pod 创 建 , 调 用 leaf 集 群
;维护 pod 状态;环境变量转换
one to cluster
node1
node1
算;节点状态维护;节点 lease
kube-apiserver 进 行 pod 创 建
;权限注入
Member
Member Cluster2
Cluster2
node2
node2
node-controller :节点资源计
storagecopy-controller
node2
node2
node3
node3
Services/Endpoints
Services/Endpoints
Secrets/Confimaps
Secrets/Confimaps
PVs/PVCs
PVs/PVCs
:
pv/pvc 资源同步和状态管理
mcs-controller : service 资
源同步和状态管理
云原生 Meetup 杭州站
9. Kosmos—— 跨集群编排
场景一: pod 使用 kosmos 下发到子集群
场景二:存量集群中已经部署过 csi
Host
Host Cluster
Cluster
Host
Host Cluster
Cluster
Pod
Pod
kube-APIServer
kube-APIServer
csi-provisioner
csi-provisioner update PV
csi-node
csi-node Kosmos
Kosmos
Pod
Pod
storagecopy-controller
storagecopy-controller
...
...
watch pv
watch pv
Member
Member Cluster1
Cluster1
create PVC
create pvc
Member
Member Cluster2
Cluster2
Member
Member Cluster1
Cluster1
Pod
Pod Pod
Pod Pod
Pod Pod
Pod
node1
node1 node2
node2 node1
node1 node2
node2
Member
Member Cluster2
Cluster2
kube-APIServer
kube-APIServer kube-APIServer
kube-APIServer
csi-provisioner
csi-provisioner csi-provisioner
csi-provisioner
csi-node
csi-node csi-node
csi-node
Leaves
云原生 Meetup 杭州站
10. Kosmos—— 跨集群编排
当出现 AZ 级故障,或 AZ 之间网络中断,确保用户用户实例能正常访问是非常重要的。
mcs-controllers 实现了 services 、 endpoints 从 host 集群向子集群的同步
eps-probe-plugin 实现了 endpoints 的健康检测
Host
Host Cluster
Cluster
endpointSlice
endpointSlice
Service
Export
annotated
watch
service
service
Kosmos
Kosmos
mcs-controller
mcs-controller
watch
create & update
watch
Member
Member Cluster2
Cluster2
Member
Member Cluster1
Cluster1
Pod
Pod
Service
Import
eps-probe-plugin
eps-probe-plugin
check
DNS request
coreDNS
eps-probe-plugin
eps-probe-plugin
check
DNS request
request
save
endpointSlice
endpointSlice
service
service
request
endpointSlice
endpointSlice
service
service
Pod
Pod
save
coreDNS
Service
Import
云原生 Meetup 杭州站
11. Kosmos—— 多集群调度
Kosmos 纳管子集群后,会映射出一个带
有「 kosmos.io/node=true:Noschedule
」污点的虚节点。
LeafNodeTaintToleration 调度插件,容
忍这个污点,实现子集群和 host 集群节
点无差别混合调度效果。
LeafNodeVolumeBinding 调度插件,存
储卷绑定过程中直接通过带污点的虚节点
。
LeafNodeDistributionPolicy 调度插件
,实现 Pod 按节点类型(实节点、虚节
点、混合节点)调度
云原生 Meetup 杭州站
12. 结合 kubesphere 使用
KubeSphere 是在 Kubernetes 之上构建的面向
云原生应用的分布式操作系统,提供了运维友好
的向导式操作界面,帮助企业快速构建一个强大
和功能丰富的容器云平台。例如 Kubernetes 资
源管理、 DevOps 、应用生命周期管理、微服务
治理(服务网格)、日志查询与收集等。
云原生 Meetup 杭州站
13. 结合 kubesphere 使用
使用 kubesphere 监控,多
套 Kubernetes 集群
云原生 Meetup 杭州站
14. 结合 kubesphere 使用
部署 Kosmos :
kosmosctl install --cni "${CLUSTER_CNI}" --default-nic "$
{NETWORK_CARD}"
纳管 member1-cluster :
kosmosctl join cluster --name member1-cluster--kubeconfig "$
{MEMBER_KUBECONFIG}"
云原生 Meetup 杭州站
15. 结合 kubesphere 使用
使用 kubesphere ,查看
Host 集群节点——实节点
( Host 节点)和 虚节点(子集
群)
云原生 Meetup 杭州站
16. 结合 kubesphere 使用
部署开源 MySQL
Operator ,可见实例主备
Pod ,分别被调度到实节点和虚
节点上。
云原生 Meetup 杭州站
17. 结合 kubesphere 使用
部署开源 MySQL
Operator ,可见实例主备
Pod ,分别被调度到实节点和虚
节点上。
云原生 Meetup 杭州站
18. 结合 kubesphere 使用
部署开源 MySQL
Operator , PVC 被同步到
Host 集群。
云原生 Meetup 杭州站
19. 结合 kubesphere 使用
部署开源 MySQL
Operator , PVC 被同步到
Host 集群。
云原生 Meetup 杭州站
20. 结合 kubesphere 使用
部署开源 MySQL
Operator , Services 信息
得到同步。
云原生 Meetup 杭州站
21. 结合 kubesphere 使用
部署开源 MySQL
Operator , Services 信息
得到同步。
云原生 Meetup 杭州站
22. 跨云灾备场景
云原生 Meetup 杭州站
23. 未来规划
功能规划
•
•
•
•
•
CNI 适配插件化
控制面高可用性提升
Pod 驱逐逻辑优化
接入 kubesphere 应用商店
基于 RDMA 助力 AI 大模型推理
Doc
https://kosmos-io.github.io/website/quick-start
Github :
https://github.com/kosmos-io/kosmos
Wechat : Kosmos 技术交流
云原生 Meetup 杭州站
24. Thank you
云原生 Meetup 杭州站