多集群连接配置并接入Karmada集群

环境配置

集群:
ClusterA
ClusterB
其中ClusterA作为Host集群;
两个集群均为虚拟机创建的实体集群,并非kind创建的模拟集群。
两个集群的master节点网络可达(可以互相ping通)

集群配置:
ClusterA Karmada v1.31 Kubernetes v1.25.0
ClusterB Kubernetes v1.25.0

集群配置文件

Kubernetes的集群配置文件一般在$HOME/.kube/config
这里给出一个config文件的示例:

apiVersion: v1
clusters:
- cluster:
	certificate-authority-data: certificate-code
	server: ServerIP:ServerPort
	name: cluster-name
contexts:
- context:
	cluster: cluster-name
	user: user-name
	name: context-name
current-context: current-context-name
kind: Config
preferences: {}
users:
- name: user-name
user:
	client-certificate-data: client-certificate-code
	tvwklodmiclient-key-data: client-key-code

config主要分为几个部分:
apiVersion : 也就是api的版本,不用管

clusters:集群部分,此字段下用于记录集群的配置部分,如果有多个集群,此处应该有多个 -cluster 的配置信息。
-cluster:此字段下是一个集群的配置信息,其中包括认证方式、服务地址以及集群名字。认证方式有很多种,其中包括token、证书等,此示例中所演示的 certificate-authority-data 代表的是证书的认证方式。certifacate-code 是具体的数据。server指代的是集群的apiserver的地址和端口。name是集群的名字。

contexts:上下文部分。此字段下用于记录集群的上下文配置内容,同理,如果有多个集群,此处应该有多个 -context 的配置信息。
-context:此字段下是一个集群的上下文配置信息,其中包括集群名字,用户以及上下文的名字。集群名字主要是用于和上文的集群进行匹配,用户名字用于指定此上下文的拥有者,上下文名字用于标识此上下文,同时也是在切换上下文时使用的名字。

current-context:用于标识当前所在的上下文,其值就是配置中的上下文名字中的一个。

preference:首选项,暂时用不到。

users: 客户端认证的具体配置。如果有多个集群,此处也会有多个条目。
-name:此处应该是context中的user name,用于和context匹配,此时便完成了cluster-context-user的匹配。
user:此部分内容是认证文件的具体内容,如果是证数,此处便是证数的内容,如果是token,此处便是token的内容。

多集群的连接

此时你应该拥有两个集群的配置文件, 可以通过手动复制或者scp的方式将配置文件复制到想要配置的集群中,这里假设已经将ClusterB的配置文件复制到了集群A中,并重命名。clusterA和clusterB的文件目录如下:

$HOME/.kube/configA
$HOME/.kube/configB

执行以下命令自动合并文件:

cd $HOME/.kube/config
KUBECONFIG=config1:config2 kubectl config view --flatten > $HOME/.kube/config

或者手动更改config文件

gedit $HOME/.kube/config

根据前文所述,将对应的字段,填写到对应的位置即可,需要填写的内容有:
-cluster:
-contex:
-name:
user:

配置完成后,config文件大概长这样:

apiVersion: v1
clusters:
- cluster:
	certificate-authority-data: certificate-codeA
	server: ServerIPA:ServerPortA
	name: cluster-nameA
- cluster:
	certificate-authority-data: certificate-codeB
	server: ServerIPB:ServerPortB
	name: cluster-nameB
contexts:
- context:
	cluster: cluster-nameA
	user: user-nameA
	name: context-nameA
- context:
	cluster: cluster-nameB
	user: user-nameB
	name: context-nameB
current-context: current-context-nameB
kind: Config
preferences: {}
users:
- name: user-nameA
user:
	client-certificate-data: client-certificate-codeA
	tvwklodmiclient-key-data: client-key-codeA
- name: user-nameB
user:
	client-certificate-data: client-certificate-codeB
	tvwklodmiclient-key-data: client-key-codeB

需要注意,每个集群的名字和上下文的名字不要重名。名字都可以自己修改。

查看集群:

kubectl config get-clusters

查看上下文:

kubectl config get-contexts

查看当前上下文:

kubectl config current-context

切换上下文:

kubectl config use-context context-name

Host集群安装Karmada

加入Karmada集群

v1.3.2版本为例,

wget https://github.com/karmada-io/karmada/releases/download/v1.3.2/kubectl-karmada-linux-amd64.tgz
tar -zxf kubectl-karmada-linux-amd64.tgz
sudo chmod +x ./kubectl-karmada
sudo mv ./kubectl-karmada /usr/local/bin

验证安装:

kubectl karmada version

输出示例,

kubectl karmada version: version.Info{GitVersion:"v1.3.2", GitCommit:"1fe31b182a6d251e09528530ec51de8adb42d202", GitTreeState:"clean", BuildDate:"2022-11-24T09:34:36Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}

执行安装:
国内环境镜像比较难获取,建议指定镜像:
镜像的版本可查看karmada github 源码中相应的yaml文件来获取。

kubectl karmada init --etcd-image registry.aliyuncs.com/google_containers/etcd:3.5.4-0 --karmada-apiserver-image registry.aliyuncs.com/google_containers/kube-apiserver:v1.25.2 --karmada-kube-controller-manager-image registry.aliyuncs.com/google_containers/kube-controller-manager:v1.25.2

在这里插入图片描述

前提条件:

Host集群的config已经配置好,集群已经连接。
context-name只能由字母、数字 和 - 组成,不能包含其他字符,开头和结尾只能是字母和数字,例如 cluster1context、123-abc等
Host集群已经安装Karmada

Push模式

执行以下命令将集群加入Karmada:

kubectl karmada --kubeconfig /etc/karmada/karmada-apiserver.config join context-name --cluster-kubeconfig=$HOME/.kube/config

context-name替换成需要加入的集群的上下文名字。
其他的路径分别是karmada的配置文件的路径以及kubernetes的配置文件的路径,也就是上文配置的config的文件,一般情况下不用更改。
出现以下显示加入成功(此处加入的上下文名字是cluster3-context):
在这里插入图片描述

查看已经加入的集群:

kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

在这里插入图片描述

Pull模式:

要求:

Member集群可以访问到Host集群,Host集群和Member集群都已经安装Karmada。
Pull模式并不需要配置多集群的连接部分内容。
载host的karmada控制平面,获取token以及加入命令。

kubectl karmada token create --print-register-command --kubeconfig /etc/karmada/karmada-apiserver.config

注意,这里获取命令的方式有多种,上述命令的Karmada是通过kubectl-karmada插件安装的,安装时执行的命令是kubectl karmada init。
如果是通过karmadactl init方式安装的,则相应的执行下列命令

karmadactl token create --print-register-command --kubeconfig /etc/karmada/karmada-apiserver.config

在这里插入图片描述
将获取的命令在Member集群中执行:
在这里插入图片描述

执行完成后,在Host集群中进行查看:

kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

在这里插入图片描述

报错修改:

/etc/karmada/pki/ca.crt already exists

找到对应的路径,删除文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值