KubeSphere多集群管理

多集群管理

各种组织跨不同的云厂商或者在不同的基础设施上运行和管理多个 Kubernetes 集群的做法非常普遍。由于每个 Kubernetes 集群都是一个相对独立的单元,因此在多集群的场景下,需要多集群管理解决方案。

KubeSphere 的多集群管理为用户提供统一的控制平面,将应用程序及其副本分发到位于公有云或本地环境的多个集群。KubeSphere 还拥有跨多个集群的集中监控、日志系统、事件和审计日志等。

多集群架构

使用 KubeSphere 的中央控制平面管理多个集群之前,需要创建一个主集群。主集群是安装了 KubeSphere 设置角色为 Host 的集群,可以使用它提供的控制平面统一管理,只能有一个主集群存在。而多个成员集群可以同时存在,成员集群是安装了 KubeSphere 设置角色为 Member 的集群。主集群和成员集群之间的网络可以直接连接,或者通过代理连接。

启用多集群

设置主集群

可以在安装 KubeSphere 之前或者之后将一个集群指定为主集群

  1. 安装 KubeSphere 之前
# 设置安装配置文件 cluster-configuration.yaml 中的如下信息
multicluster:
  clusterRole: host     # 设置为主集群
  1. 安装 KubeSphere 之后
# 修改配置文件
kubectl edit cc ks-installer -n kubesphere-system
# 修改配置文件 cluster-configuration.yaml 中的如下信息
multicluster:
  clusterRole: host      # 设置为主集群

无论是安装前还是安装后,都可以通过下面的命令来检查,如果主集群准备就绪,将看到成功的日志返回。

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

设置成员集群

为了通过主集群管理,您需要使成员集群和主集群的 ​​jwtSecret​​​ 相同,先在主集群节点通过下面的命令查询主集群的 ​​jwtSecret​

kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep jwtSecret

类似主集群,也可以在安装 KubeSphere 之前或者之后将一个集群指定为成员集群

  1. 安装 KubeSphere 之前
# 设置安装配置文件 cluster-configuration.yaml 中的如下信息
# 设置 jwtSecret,从主集群中查询得来
authentication:
  jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
……
multicluster:
  clusterRole: menber     # 设置为成员集群
  1. 安装 KubeSphere 之后
#  修改配置文件
kubectl edit cc ks-installer -n kubesphere-system
#  修改配置文件 cluster-configuration.yaml 中的如下信息
## 设置 jwtSecret,从主集群中查询得来
authentication:
  jwtSecret: gfIwilcc0WjNGKJ5DLeksf2JKfcLgTZU
…… 
multicluster:
  clusterRole: menber     # 设置为成员集群

无论是安装前还是安装后,都可以通过下面的命令来检查,如果成员集群准备就绪,将看到成功的日志返回。

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

导入成员集群

直接连接

当成员集群的 kube-apiserver 地址可以被主集群直接访问,或者与主集群在同一私有网络或子网中时,此方法适用

  • 以 ​​admin​​ 身份登录主集群 KubeSphere 控制台,转到集群管理页面点击添加集群。
  • 在导入集群页面,输入要导入的集群的基本信息。可以点击右上角的编辑模式以 YAML 格式查看并编辑基本信息。编辑完成后,点击下一步。
  • 在连接方式,选择直接连接 Kubernetes 集群,复制成员集群 kubeconfig 内容并粘贴至文本框。
  • 使用命令 cat $HOME/.kube/config 查看成员集群 kubeconfig 文件
  • 确保主集群的任何节点都能访问成员集群 kubeconfig 中的 ​​server​​ 地址。

  1. 点击创建,然后等待集群初始化完成。
代理连接

当成员集群部署在私有环境下,kube-apiserver 地址无法被直接访问,但主集群可以暴露代理服务并由成员集群访问,适用此连接方法

  1. 设置代理服务地址
  1. 执行以下命令来检查服务。
kubectl -n kubesphere-system get svc
  1. 命令输出结果可能如下所示。在此示例中,可以看出 ​​NodePort​​​ 为 ​​30092​​:
NAME       TYPE            CLUSTER-IP      EXTERNAL-IP     PORT(S)                   AGE
tower      LoadBalancer    10.233.63.191   <pending>       8080:30092/TCP            16h
  1. 由于 ​​EXTERNAL-IP​​​ 处于 ​​pending​​​ 状态,需要手动设置代理地址。例如,如果公有 IP 地址为 ​​139.198.120.120​​​,则需要将公网 IP 的端口,如​​30092​​​ 转发到 ​​NodeIP​​​:​​NodePort​​​。由于我们的环境没有公网的 LoadBalancer,因此就默认把这个地址设置为 ​​NodeIP​​​:​​NodePort​
  2. 修改配置文件中代理地址(直接用 ​​NodeIP​​​:​​NodePort​​ 代替)
#  修改配置文件
kubectl edit cc ks-installer -n kubesphere-system
#  修改配置文件 cluster-configuration.yaml 中的如下信息
multicluster:
    clusterRole: host
    # 设置代理地址,本来应该是设置公网地址转发  现在直接设置 NodeIP:NodePort
    proxyPublishAddress: http://172.172.30.131:30092
  1. 保存配置并稍等片刻,或者可以运行以下命令手动重启 ​​ks-apiserver​​ 使修改立即生效
kubectl -n kubesphere-system rollout restart deployment ks-apiserver
  1. 以 ​​admin​​ 身份登录 KubeSphere 控制台,转到集群管理页面点击添加集群。
  2. 在导入集群页面输入要导入的集群的基本信息。也可以点击右上角的编辑模式以 YAML 格式查看并编辑基本信息。编辑完成后,点击下一步。
  3. 在连接方式,选择集群连接代理,然后点击创建。主集群会为后面需要部署在成员集群上的代理组件生成相应Deployment 的 YAML 文件
  4. 根据上一步生成的文件内容,在成员集群中创建一个 ​​agent.yaml​​​ 文件,然后将内容复制并粘贴到该文件中。在该节点上执行 ​​kubectl create -f agent.yaml​​ 然后等待代理启动并运行。确保成员集群可以访问代理地址。
  5. 待集群代理启动并运行,会看到成员集群已经导入主集群。

移除成员集群

  1. 点击左上角的平台管理,选择集群管理。
  2. 在成员集群区域,点击要从中央控制平面移除的集群右侧的三个点图标,点击解绑集群。
  3. 在弹出的移除集群对话框,请仔细阅读风险提示信息。如果您仍然想移除成员集群,输入集群名称,点击确定以移除成员集群。

启用多集群下创建项目和工作负载

创建项目

在启用多集群的情况下,当创建项目时,可以选择创建项目或多集群项目

  1. 项目
  1.   需要指定某个集群,只在该集群下创建项目,非多集群模式下相同管理
  1. 多集群项目

  1.   多集群项目只是逻辑上的项目,实际上是在多个集群下创建相同名称的 namespace,从主集群控制台可以进行统一管理
  2. Host 集群中
  3. Menber 集群中

创建工作负载

单集群项目下的负载创建没有变化,此处不再赘述,多集群项目下的负载创建如下:

  1. 需要指定副本在不同集群的分配情况,以副本数量或权重的方式分配
  2. 新增集群差异化设置,可以为不同集群上设置不同的容器设置、端口设置和环境变量设置
  3. 点击创建,会在不同集群下的同名 namespace 下分别创建副本

多集群项目配置管理

首先由企业空间目录进入项目,路径:http://hostIP:30880/workspaces/system-workspace/projects,查看多集群项目

在多集群项目下创建配置字典(configmap)

分别进入两个集群的终端中查看:

可以看到,在两个集群中,同名的 namespace,下都有刚刚创建的配置字典

在主集群控制台,编辑配置字典

编辑后分别在两个集群终端查看字典内容,可以看到两个集群中的配置同步更新。

创建多集群配置文件后,单独更新任何一个集群中的配置都是不生效的,因此此时的配置本质上是多集群配置资源 FederatedConfigmap 类型的资源管理的,规定了创建的 configmap 需要应用到哪几个集群中,以及配置的值

多集群管理注意事项

  • 主集群和成员集群必须都安装 KubeSphere
  • 主集群和成员集群必须完成时间同步,最好由同一 NTP 服务管理
  • 主集群和成员集群必须设置正确的集群角色,并且在主集群和成员集群上的 ​​jwtSecret​​ 也相同。
  • 建议成员集群在导入主集群之前是干净环境,即没有创建任何资源。
  • 建议在主集群控制台创建资源,不建议登录成员集群控制台去创建资源,因为部分资源(例如:企业空间)将不会同步到主集群进行管理
  • 不建议您将主集群转换为成员集群,或将成员集群转换成主集群,如果一个成员集群曾经被导入进主集群,将该成员集群从先前的主集群解绑后,再导入进新的主集群时必须使用相同的集群名称,否则会导致环境中资源错乱无法使用
  • 只需在主集群上启用应用商店,就可以直接在成员集群上使用与应用商店相关的功能
  • 对于除应用商店外的其他可插拔组件,当在主集群上启用时,仍然需要在成员集群上手动启用相同组件以实现相同的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值