KubeSphere v3.0.0进行了重大升级,其中多集群管理功能是重要更新之一。
使用KubeSphere,用户可以添加或删除集群。可以以统一的方式管理部署在任何基础架构(例如Amazon EKS和Google Kubernetes Engine)上的异构集群。KubeSphere的中央控制平面通过两种有效的管理方法使之成为可能。
- Solo,可以在KubeSphere容器平台中一起维护和管理独立部署的Kubernetes集群。
- Federation,多个Kubernetes集群可以聚合在一起作为Kubernetes资源池。当用户部署应用程序时,副本可以部署在池中的不同Kubernetes群集上。在这方面,跨区域和群集实现了高可用性。
多集群高可用
KubeSphere允许用户跨集群部署应用程序。更重要的是,还可以将应用程序配置为在特定群集上运行。此外,多集群功能与行业领先的应用程序管理平台OpenPitrix配合使用,使用户可以在整个生命周期(包括发行,删除和分发)中管理应用程序。
用户可以使用全局VIP或DNS将请求发送到相应的后端群集,从而在多个群集上部署工作负载。当群集发生故障或无法处理请求时,可以将VIP或DNS记录传输到运行状况群集。
多集群故障隔离
故障隔离。通常,与大型群集相比,多个小型群集隔离故障要容易得多。如果出现断电,网络故障,资源不足或其他可能导致的问题,则可以将故障隔离在某个群集中,而不会扩展到其他群集。
业务隔离。尽管Kubernetes提供了名称空间作为应用程序隔离的解决方案,但此方法仅代表逻辑上的隔离。这是因为通过网络连接了不同的名称空间,这意味着资源抢占问题仍然存在。为了实现进一步的隔离,用户需要创建其他网络隔离策略或设置资源配额。使用多个群集可以实现完全的物理隔离,这比通过名称空间进行隔离更加安全可靠。例如,当企业内的不同部门使用多个集群来部署开发,测试或生产环境时,这非常有效。
使用多集群功能之前,需要创建一个主机集群(以下称为Host Cluster集群),它实际上是启用了多集群功能的KubeSphere集群。
Host Cluster集群管理的所有集群都称为成员集群(以下称为Member Cluster群集)。它们是未启用多集群功能的常见KubeSphere集群。
Host Cluster集群只能存在一个,而Member Cluster集群可以同时存在多个。
在多群集体系结构中,Host Cluster集群和Member Cluster集群之间的网络可以直接连接,也可以通过代理连接。Member Cluster集群之间的网络可以完全隔离。
快速部署kubeSphere多集群联邦
多集群联邦要求每个kubernetes集群都要部署kubeSphere,下面准备3个节点每个节点都以all-in-one方式同时部署kubernetes和kubeSphere。
准备3个节点至少4核8G配置,每个节点都执行以下操作:
安装kubernetes集群部署工具kubekey
wget https://github.com/kubesphere/kubekey/releases/download/v1.0.0/kubekey-v1.0.0-linux-amd64.tar.gz
tar -zxvf kubekey-v1.0.0-linux-amd64.tar.gz
mv kk /usr/local/bin/
安装相关依赖
yum install -y socat conntrack
部署kubernetes和kubesphere
kk create cluster --with-kubernetes v1.18.6 --with-kubesphere v3.0.0
查看每个节点集群部署情况,每个节点模拟一个集群(实际部署时每个集群应参考官方文档规划为高可用集群,这里仅作为演示):
[root@cluster1 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
cluster1 Ready master,worker 69m v1.18.6 192.168.1.123 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 docker://19.3.8
[root@cluster2 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
cluster2 Ready master,worker 71m v1.18.6 192.168.1.124 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 docker://19.3.8
[root@cluster3 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
cluster3 Ready master,worker 71m v1.18.6 192.168.1.125 <none> CentOS Linux 7 (Core) 3.10.0-1127.18.2.el7.x86_64 docker://19.3.8
启用host集群
登录第一个集群kubesphere UI,默认密码admin/P@88w0rd
http://192.168.1.123:30880
选择左侧自定义资源CRD,搜索clusterConfiguration
点击进入,选择ks-installer右侧编辑配置文件,修改clusterRole为host
multicluster:
clusterRole: host
保存后查看部署日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
确认multicluster集群启用成功:
......
[22:27:51]Start installing monitoring
[22:27:51]Start installing multicluster
[22:27:51]**************************************************
[22:27:51]task monitoring status is running
[22:27:51]task multicluster status is successful
[22:27:51]total: 2 completed:1
[22:27:51]**************************************************
[22:27:51]task monitoring status is successful
[22:27:51]task multicluster status is successful
[22:27:51]total: 2 completed:2
......
查看部署的kubefed组件
[root@cluster1 ~]# helm ls -A | grep kubefed
kubefed kube-federation-system 1 2020-10-13 22:26:22.252226967 +0800 CST deployed kubefed-0.3.0
[root@cluster1 ~]# kubectl -n kube-federation-system get pods
NAME READY STATUS RESTARTS AGE
kubefed-admission-webhook-66bbdff47d-zxhsm 1/1 Running 0 30m
kubefed-controller-manager-54b459dfc4-s26bp 1/1 Running 0 30m
重新登录kubeSphere,可以看到集群已经变更为host集群:
启用member集群
获取host cluster的jwtSecret
[root@cluster1 ~]# kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret
jwtSecret: "V4kcSF2Ai7z9duNT9k0xAUJ85dWWtFH3"
登录第二个及第三个集群UI,同样方式修改clusterConfiguration,配置jwtSecret并修改集群角色:
authentication:
jwtSecret: V4kcSF2Ai7z9duNT9k0xAUJ85dWWtFH3
multicluster:
clusterRole: member
保存后查看部署日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
member集群启用完成后还需要在host集群执行手动导入操作。
导入member集群
登录host cluster,选择添加集群
在集群2 master节点获取kubeconfig,注意修改 server: https://lb.kubesphere.local:6443为节点IP地址,确保host cluster能够与member cluster正常连通:
[root@cluster2 ~]# cat /root/.kube/config
复制粘贴kubeconfig内容,点击导入
导入完成后点击左上角平台管理,集群管理,可以看到host集群已经纳管了开发集群和生产集群:
选择任意集群进入,点击集群管理可以在任意集群间快速切换:
部署跨集群应用
选择平台管理,访问控制,创建企业空间时可勾选可用的集群:
在多集群企业空间中可以创建多集群项目,创建多集群项目意味着每个k8s集群都会创建一个同名的命名空间:
在多集群项目中部署工作负载或服务,可在部署位置中选择跨集群部署应用副本,这里以跨每个集群部署2副本的nginx为例:
创建完成后查看部署的跨集群应用:
编辑配置文件查看yaml信息,可以看到创建的资源类型为FederatedDeployment,也就是在多集群项目中创建的所有资源都以Federatedxxx开头,包括创建的存储卷,密钥和配置,并且都会在每个集群分发一份。
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
...
选择服务,进入服务选择服务访问,由于选择nodePort暴露服务,任意集群节点加nodePort即可访问应用,也可以考虑在node节点前加负载均衡
解绑集群
备注:
除了纳管本地kubeadm部署的kubernetes集群,kubesphere也支持纳管Aliyun ACK、AWS EKS等集群类型。
原文链接:https://blog.csdn.net/networken/article/details/109062141