前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KubeSphere3.0 多集群联邦

KubeSphere3.0 多集群联邦

作者头像
jwangkun
发布2021-12-23 16:35:16
8380
发布2021-12-23 16:35:16
举报
文章被收录于专栏:John Wong's BlogJohn Wong's Blog

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

代码语言:javascript
复制
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/

安装相关依赖

代码语言:javascript
复制
yum install -y socat conntrack

部署kubernetes和kubesphere

代码语言:javascript
复制
kk create cluster --with-kubernetes v1.18.6 --with-kubesphere v3.0.0

查看每个节点集群部署情况,每个节点模拟一个集群(实际部署时每个集群应参考官方文档规划为高可用集群,这里仅作为演示):

代码语言:javascript
复制
[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

代码语言:javascript
复制
http://192.168.1.123:30880

选择左侧自定义资源CRD,搜索clusterConfiguration

点击进入,选择ks-installer右侧编辑配置文件,修改clusterRole为host

代码语言:javascript
复制
multicluster:
  clusterRole: host

保存后查看部署日志

代码语言:javascript
复制
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

确认multicluster集群启用成功:

代码语言:javascript
复制
......
[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组件

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@cluster1 ~]# kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret
      jwtSecret: "V4kcSF2Ai7z9duNT9k0xAUJ85dWWtFH3"

登录第二个及第三个集群UI,同样方式修改clusterConfiguration,配置jwtSecret并修改集群角色:

代码语言:javascript
复制
authentication:
  jwtSecret: V4kcSF2Ai7z9duNT9k0xAUJ85dWWtFH3
  
multicluster:
  clusterRole: member

保存后查看部署日志

代码语言:javascript
复制
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正常连通:

代码语言:javascript
复制
[root@cluster2 ~]# cat /root/.kube/config 

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

同样方式导入cluster3作为生产环境。

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

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

部署跨集群应用

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

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

首先在高级设置中开启每个集群外网访问网关

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

支持差异化配置,同一个应用可以在不同集群使用不同镜像:

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

点击查看详情

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

代码语言:javascript
复制
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集群→

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 快速部署kubeSphere多集群联邦
  • 启用host集群
  • 启用member集群
  • 导入member集群
  • 部署跨集群应用
  • 解绑集群
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档