karmada介绍和分析

karmada介绍和分析

背景

  • kind v0.11.1
  • 已用kind创建一个版本为1.23的集群:k8s123

1. kubectl-karmada

kubectl-karmada是kubectl的一个插件,用来操纵karmada的命令行工具。我们通过以下步骤安装它:

# 1.下载
wget https://github.com/karmada-io/karmada/releases/download/v1.0.2/kubectl-karmada-linux-amd64.tgz
# 2.解压
tar -zxf kubectl-karmada-linux-amd64.tgz
# 3.移动到指定目录
mv kubectl-karmada /usr/local/bin/

现有command:

command 解释
cordon 标记指定集群不可调度
get 获取一个或多个资源
init 在kubernetes集群中安装karmada
join 注册一个集群到karmada控制面板(push模式)
promote 将资源从遗留(member)集群提升到karmada控制面板
taint 给一个或多个集群更新污点
uncordon 标记指定集群可调度
unjoin 从karmada控制面板移除集群注册
version 输出版本信息

2. 安装Karmada

为了更好的理解Karmada,我们采用离线的方式安装karmada。提前准备好以下内容crd和相关组件的镜像:

  • CRD ,karmada部署所需的CRD文件。
  • --etcd-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-etcd:3.5.1-0 (原镜像仓库: k8s.gcr.io/etcd:3.5.1-0),该镜像为etcd镜像,服务于karmada-apiserver。
  • --etcd-init-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-dockerio-alpine:3.14.3 (原镜像仓库: docker.io/library/alpine:3.14.3),该镜像为ectd init容器镜像。
  • --karmada-aggregated-apiserver-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-aggregated-apiserver:latest (原镜像仓库: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:latest)
  • --karmada-apiserver-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-kube-apiserver:v1.21.7(原镜像仓库: k8s.gcr.io/kube-apiserver:v1.21.7)
  • --karmada-controller-manager-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-controller-manager:latest(原镜像仓库: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:latest)
  • --karmada-kube-controller-manager-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-kube-controller-manager:v1.21.7(原镜像仓库: k8s.gcr.io/kube-controller-manager:v1.21.7)
  • --karmada-scheduler-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-scheduler:latest(原镜像仓库: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:latest)
  • --karmada-webhook-image: registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-webhook:latest(原镜像仓库: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:latest)

2.1 执行安装

kubectl karmada init --crds crds.tar.gz \
--etcd-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-etcd:3.5.1-0 \
--etcd-init-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-dockerio-alpine:3.14.3 \
--karmada-aggregated-apiserver-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-aggregated-apiserver:latest \
--karmada-apiserver-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-kube-apiserver:v1.21.7 \
--karmada-controller-manager-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-controller-manager:latest \
--karmada-kube-controller-manager-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-k8sgcrio-kube-controller-manager:v1.21.7 \
--karmada-scheduler-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-scheduler:latest \
--karmada-webhook-image registry.cn-hangzhou.aliyuncs.com/earl-k8s/karmada-webhook:latest

2.2 部署成功

部署成功后会显示如下内容,其中由包含注册member集群的步骤指导。注册模式分为push模式和pull模式。

其中push模式下,karmada将直接访问member集群的kube-apiserver来获取集群状态和部署资源。

在pull模式下,karmada不会访问成员集群而是通过karmada-agen组件来实现:

  • 将member集群注册到karmada
  • 维护集群的状态报告给karmada
  • 从karmada执行空间(karmada-es-)获取部署资源部署到其所在集群。
------------------------------------------------------------------------------------------------------
 █████   ████   █████████   ███████████   ██████   ██████   █████████   ██████████     █████████
░░███   ███░   ███░░░░░███ ░░███░░░░░███ ░░██████ ██████   ███░░░░░███ ░░███░░░░███   ███░░░░░███
 ░███  ███    ░███    ░███  ░███    ░███  ░███░█████░███  ░███    ░███  ░███   ░░███ ░███    ░███
 ░███████     ░███████████  ░██████████   ░███░░███ ░███  ░███████████  ░███    ░███ ░███████████
 ░███░░███    ░███░░░░░███  ░███░░░░░███  ░███ ░░░  ░███  ░███░░░░░███  ░███    ░███ ░███░░░░░███
 ░███ ░░███   ░███    ░███  ░███    ░███  ░███      ░███  ░███    ░███  ░███    ███  ░███    ░███
 █████ ░░████ █████   █████ █████   █████ █████     █████ █████   █████ ██████████   █████   █████
░░░░░   ░░░░ ░░░░░   ░░░░░ ░░░░░   ░░░░░ ░░░░░     ░░░░░ ░░░░░   ░░░░░ ░░░░░░░░░░   ░░░░░   ░░░░░
------------------------------------------------------------------------------------------------------
Karmada is installed successfully.

Register Kubernetes cluster to Karmada control plane.

Register cluster with 'Push' mode

Step 1: Use kubectl karmada join to register the cluster to Karmada control panel. --cluster-kubeconfig is members kubeconfig.
(In karmada)~# MEMBER_CLUSTER_NAME=`cat ~/.kube/config  | grep current-context | sed 's/: /\n/g'| sed '1d'`
(In karmada)~# kubectl karmada --kubeconfig /etc/karmada/karmada-apiserver.config  join ${MEMBER_CLUSTER_NAME} --cluster-kubeconfig=$HOME/.kube/config

Step 2: Show members of karmada
(In karmada)~# kubectl  --kubeconfig /etc/karmada/karmada-apiserver.config get clusters


Register cluster with 'Pull' mode

Step 1:  Send karmada kubeconfig and karmada-agent.yaml to member kubernetes
(In karmada)~# scp /etc/karmada/karmada-apiserver.config /etc/karmada/karmada-agent.yaml {member kubernetes}:~

Step 2:  Create karmada kubeconfig secret
 Notice:
   Cross-network, need to change the config server address.
(In member kubernetes)~#  kubectl create ns karmada-system
(In member kubernetes)~#  kubectl create secret generic karmada-kubeconfig --from-file=karmada-kubeconfig=/root/karmada-apiserver.config  -n karmada-system

Step 3: Create karmada agent
(In member kubernetes)~#  MEMBER_CLUSTER_NAME="demo"
(In member kubernetes)~#  sed -i "s/{member_cluster_name}/${MEMBER_CLUSTER_NAME}/g" karmada-agent.yaml
(In member kubernetes)~#  kubectl create -f karmada-agent.yaml

Step 4: Show members of karmada                                                                                                                       
(In karmada)~# kubectl  --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

3. karmada组件介绍及分析

3.1 karmadactl

karmadactl是karmada的一个命令行工具,其功能和kubectl-karmada是完全一样的。karmada在全局参数中通过--kubeconfig配置kubeconfig的路径。

3.1.1 init子命令

init子命令用于在kubernetes上部署karmada。

用法:

karmadactl init [flags]

参数介绍:

参数 类型 描述
--cert-external-dns string the external DNS of Karmada certificate (e.g localhost,localhost.com),生成证书生效外部DNS
--cert-external-ip string the external IP of Karmada certificate (e.g 192.168.1.2,172.16.1.2),生成证书生效外部IP
--crds string karmada的自定义资源
--etcd-data string 配置etcd数据路径,在hostPath模式下生效
--etcd-image string 配置etcd镜像仓库,默认k8s.gcr.io/etcd:3.5.1-0
--etcd-init-image string 配置etcd init容器镜像仓库,默认docker.io/alpine:3.14.3
--etcd-node-selector-labels string 配置etcd pod运行的节点通过label,在hostPath模式生效
--etcd-pvc-size string 配置etcd所有pvc大小,默认5Gi,在PVC模式生效
--etcd-replicas int32 配置etcd副本数,默认1
--etcd-storage-mode string 配置etcd数据储存模式(emptyDir(默认),hostPath,PVC(配置--storage-classes-name))
--karmada-aggregated-apiserver-image string 配置karmada聚合apiserver镜像仓库,默认swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:latest
--karmada-aggregated-apiserver-replicas int32 配置karmada聚合apiserver副本数,默认1
--karmada-apiserver-image string 配置karmada apiserver镜像仓库,默认k8s.gcr.io/kube-apiserver:v1.21.7
--karmada-apiserver-replicas int32 配置karmada apiserver副本数
--karmada-controller-manager-image string 配置karmada-controller-manager镜像仓库,默认"swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:latest
--karmada-controller-manager-replicas int32 配置karmada-controller-manage副本数
--karmada-data string 配置karmada数据(kubeconfig cert,crds等)路径,默认/etc/karmada(执行命令的主机上)
--karmada-kube-controller-manager-image string 配置karmada-kube-controller-manager镜像仓库,默认k8s.gcr.io/kube-controller-manager:v1.21.7
--karmada-kube-controller-manager-replicas int32 配置karmada-kube-controller-manager副本数
--karmada-scheduler-image string 配置karmada-scheduler镜像仓库,默认swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:latest
--karmada-scheduler-replicas int32 配置karmada-scheduler副本数,默认1
--karmada-webhook-image string 配置karmada-webhook镜像仓库,默认swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:latest
--karmada-webhook-replicas int32 配置karmada-webhook副本数,默认1
--namespace string 配置karmada组件所在的namespace,默认karmada-system
--port int32 配置访问karmada apiserver的node port,默认32443
--storage-classes-name string 配置使用的Kubernetes StorageClasses名

通过参数可以看出,我们可以在部署karmada的时候根据自己的实际情况配置karmada组件相关参数,整个流程如下所示:

3.1.2 join子命令

join子命令用于添加member集群到karmada控制面。

用法:

karmadactl join CLUSTER_NAME --cluster-kubeconfig=<KUBECONFIG> [flags]

参数介绍:

参数 类型 描述
--cluster-context string 当kubeconfig(member)中有多个context时,指定context name
--cluster-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王盼达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值