KubeSphere Kubernetes

KubeSphere3.0 多集群联邦

Posted on 2020-10-15,9 min read

KubeSphere v3.0.0进行了重大升级,其中多集群管理功能是重要更新之一。

使用KubeSphere,用户可以添加或删除集群。可以以统一的方式管理部署在任何基础架构(例如Amazon EKS和Google Kubernetes Engine)上的异构集群。KubeSphere的中央控制平面通过两种有效的管理方法使之成为可能。

  1. Solo,可以在KubeSphere容器平台中一起维护和管理独立部署的Kubernetes集群。
  2. 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,选择添加集群

在这里插入图片描述
配置基本信息,cluster2作为开发环境

在这里插入图片描述
在集群2 master节点获取kubeconfig,注意修改 server: https://lb.kubesphere.local:6443为节点IP地址,确保host cluster能够与member cluster正常连通:

[root@cluster2 ~]# cat /root/.kube/config 

复制粘贴kubeconfig内容,点击导入

在这里插入图片描述
同样方式导入cluster3作为生产环境。

导入完成后点击左上角平台管理,集群管理,可以看到host集群已经纳管了开发集群和生产集群:

在这里插入图片描述

选择任意集群进入,点击集群管理可以在任意集群间快速切换:

在这里插入图片描述

部署跨集群应用

选择平台管理,访问控制,创建企业空间时可勾选可用的集群:

在这里插入图片描述

在多集群企业空间中可以创建多集群项目,创建多集群项目意味着每个k8s集群都会创建一个同名的命名空间:

在这里插入图片描述
首先在高级设置中开启每个集群外网访问网关

在这里插入图片描述
在多集群项目中部署工作负载或服务,可在部署位置中选择跨集群部署应用副本,这里以跨每个集群部署2副本的nginx为例:

在这里插入图片描述
支持差异化配置,同一个应用可以在不同集群使用不同镜像:
在这里插入图片描述

创建完成后查看部署的跨集群应用:

在这里插入图片描述
点击查看详情

在这里插入图片描述
编辑配置文件查看yaml信息,可以看到创建的资源类型为FederatedDeployment,也就是在多集群项目中创建的所有资源都以Federatedxxx开头,包括创建的存储卷,密钥和配置,并且都会在每个集群分发一份。

apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
...

选择服务,进入服务选择服务访问,由于选择nodePort暴露服务,任意集群节点加nodePort即可访问应用,也可以考虑在node节点前加负载均衡

在这里插入图片描述
使用nodeport访问示例:
在这里插入图片描述

解绑集群

选择集群设置,可执行解绑集群
在这里插入图片描述

备注:
除了纳管本地kubeadm部署的kubernetes集群,kubesphere也支持纳管Aliyun ACK、AWS EKS等集群类型。

原文链接:https://blog.csdn.net/networken/article/details/109062141

下一篇: Centos7.4使用rke V1.1.9安装K8s集群→