kubefed
参考我的博客多集群管理kubefed
目前接触的多集群管理开源项目有kubesphere
的tower
和华为开源的karmada
。这两个都使用了kubernetes Federation
的模块,在此基础之上实现了对多集群应用的调度和访问的封装。
karmada
Karmada
控制平面由以下组件组成。
1、Karmada API
服务器
2、Karmada
控制器管理器
3、Karmada
调度器
ETCD
存储karmada API
对象,API
服务器是所有其他组件对话的REST
端点,Karmada
控制器管理器根据你通过API
服务器创建的API
对象执行操作。
Karmada
控制器管理器运行各种控制器,控制器观察karmada
对象,然后与底层集群的API
服务器对话,创建常规的Kubernetes
资源。包括以下控制器:
(1)集群控制器:将kubernetes
集群附加到Karmada
,通过创建集群对象来管理集群的生命周期。
(2)政策控制器:该控制器观察PropagationPolicy
对象。当PropagationPolicy
对象被添加时,它选择一组与resourceSelector
匹配的资源,并与每个单一的资源对象创建ResourceBinding
。
(3)绑定控制器:该控制器观察ResourceBinding
对象,并通过单个资源清单创建对应于每个集群的work
对象。
(4)执行控制器:该控制器观察work
对象。当work
对象被创建时,它将把资源分配给成员集群。
karmada v0.6
的例子能调度应用到指定集群,host cluster
上能获得其他集群上应用的部分信息(可以获取deployment
,但无法获取pod
信息),无法在host cluster
访问其他集群上的应用。其他集群断线后能自治,自修改应用,但是连线host cluster
后没有机制将应用信息同步到host cluster
。(考虑云边协同环境,云端应用可以分发到边端,云端的修改可以同步到边端,边端可以离线自治,但是边端的修改在重连云端后无法同步到云端)
kubesphere
多集群实现
kubesphere
中多集群采用了kubernetes Federation
的模块,此外构建了组建tower
解决跨网络环境的多集群管理。
kubesphere
使用kubefedcluster
代表集群,使用以下命令可以查看集群数量
root@bionic-1:/home/test# kubectl get kubefedclusters --all-namespaces
NAMESPACE NAME AGE READY
kube-federation-system host 16h True
kube-federation-system member62 15h True
kube-federation-system member63 15h True
root@bionic-1:/home/test#
kubesphere
使用kubefedworkspace
代表多集群工作空间,federatednamespaces
代表多集群项目,federateddeployments
代表多集群工作负载,federatedstatefulsets
代表多集群有状态应用,federatedservice,federatedingress
代表多集群服务,federatedapplication
代表多集群应用(应用市场)等等。
root@bionic-1:/home/test# kubectl get federatedworkspaces --all-namespaces
NAME AGE
multi 15h
system-workspace 16h
root@bionic-1:/home/test# kubectl get federatednamespaces --all-namespaces
NAMESPACE NAME AGE
kubesphere-monitoring-federated kubesphere-monitoring-federated 16h
mult-project mult-project 15h
root@bionic-1:/home/test# kubectl get federateddeployments --all-namespaces
NAMESPACE NAME AGE
mult-project nginx-multdp 15h
root@bionic-1:/home/test#
kubesphere
采用两种方式来管理多集群,一种是直连,处理成员集群和主机群在同一个可以互相通信的网段;另一种是使用agent
连接,处理不能直连的情况(例如,公有云上k8s
集群通过负载均衡器的公网IP
对外提供服务,公有云集群内部IP
不能与成员集群直连),这种情况下,kubesphere
会要求用户手动在成员集群运行一个cluster-agent
组件(其实内部是跑tower
),该组件与主集群的tower loadbalancer ip
通信,达到基于ssh
上http/https/tcp
跨网络通信。
注:kubesphere
插件启用容易,禁用插件操作复杂。
注:kubesphere
多集群服务统一入口功能未实现,即kubefedingresses
不生效,还是需要从过kubernetes service
的暴露方式访问。