什么是 Karmada 拇舀?
Karmada 是 CNCF 的云原生項目逻族,主要的能力是納管多個 Kubernetes 集群蜻底,以及基于原生的 Kubernetes 的資源對象骄崩,將其下發(fā)到多個集群。對于一些有計算資源需求的 Deployment薄辅,Job 等 workload 具體副本數(shù)調(diào)度能力要拂,讓不同的 workload 按照一些的策略運行在不同的集群上。以此來達到多云分發(fā)的能力的這么一個項目站楚。
Karmada 和 Kubernetes 的關(guān)系:首先 Karmada 本身需要運行在 Kubernetes 集群中脱惰,這樣的 Kubernetes 集群,我們稱作為 Host Cluster (宿主集群)窿春,主要是用來運行 Karmada 控制平面的組件拉一,其中包含 Karmada 的 etcd,karmada-api server旧乞, karmada-controller manager蔚润, Kubernetes controller manager,karmada-scheduler尺栖,karmada-webhook嫡纠, karmada-scheduler-estimator 等控制面的組件。還有一種集群是負責(zé)真正運行工作負載的集群延赌,對于這種集群除盏,我們稱之為 Workload Cluster。在 Workload Cluster 集群中挫以,會真正運行業(yè)務(wù)的容器者蠕、一些 Kubernetes 的資源對象、存儲掐松、網(wǎng)絡(luò)蠢棱、dns 等锌杀,同時對于 pull 模式的部署方式,還會運行 Karmada 的 agent 組件泻仙,用于和控制面組件通信糕再,完成工作負載的下發(fā)能力。
安裝部署
Kind 創(chuàng)建集群
本次實驗環(huán)境使用 Kind 創(chuàng)建集群玉转,因此需要提前安裝好 Kind突想。請自行搜索安裝。
我們直接使用 Karmada 為我們提供的腳本部署集群究抓。
Kind配置文件
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerAddress: "10.115.92.94"
apiServerPort: 6443
kubeProxyMode: "ipvs"
nodes:
- role: worker
extraPortMappings:
- containerPort: 32443
hostPort: 5443
listenAddress: "0.0.0.0"
protocol: tcp
- role: control-plane
若需執(zhí)行上面的 kind 配置文件猾担,按照下面步驟進行修改。
# 1. vim 打開創(chuàng)建集群的腳本
vim hack/create-cluster.sh
# 2. 搜索 kind create cluster 刺下,找到對應(yīng)行绑嘹,修改 --config 參數(shù)為你保存的配置文件地址即可肝匆。
開始部署娄涩。
# 下載 karmada 代碼
git clone https://github.com/karmada-io/karmada.git
# 進入 karmada 中
cd karmada
# 執(zhí)行創(chuàng)建集群的腳本
hack/create-cluster.sh host $HOME/.kube/host.config
# host 集群名稱
# $HOME/.kube/host.config 配置文件位置
部署 Karmada
安裝 Karmada 1.1.0,根據(jù)實際情況替換對應(yīng)的版本號屿衅。
kubectl karmada init \
--crds https://github.com/karmada-io/karmada/releases/download/v1.1.0/crds.tar.gz \
--cert-external-ip=10.115.92.94 \
--kubeconfig=$HOME/.kube/host.config \
--etcd-image=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 \
--karmada-apiserver-image=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.7 \
--karmada-kube-controller-manager-image=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.7
- –crds:指定crds壓縮包畅卓,也可以直接下載下來換成本地路徑擅腰。
- —cert-external-ip:需要外部訪問的時候,將本機IP地址加入證書中翁潘,允許可訪問趁冈。
- –kubeconfig:集群的連接文件。
- –etcd-image:指定 etcd 鏡像地址拜马,默認是 k8s.gcr.io 地址的鏡像渗勘,國內(nèi)訪問異常。
- –karmada-apiserver-image:指定 Kubernetes apiserver 鏡像地址俩莽,默認是 k8s.gcr.io 地址的鏡像旺坠,國內(nèi)訪問異常。
- –karmada-kube-controller-manager-image:指定 Kubernetes controller manager 鏡像地址豹绪,默認是 k8s.gcr.io 地址的鏡像价淌,國內(nèi)訪問異常。
看到以下內(nèi)容表示你已經(jīng)成功的將 karmada 部署到了瞒津,你剛創(chuàng)建 K8S 集群上蝉衣。
I0324 07:01:19.715559 124376 check.go:49] pod: karmada-aggregated-apiserver-77bf74f4d6-wb46z is ready. status: Running
------------------------------------------------------------------------------------------------------
█████ ████ █████████ ███████████ ██████ ██████ █████████ ██████████ █████████
??███ ███? ███?????███ ??███?????███ ??██████ ██████ ███?????███ ??███????███ ███?????███
?███ ███ ?███ ?███ ?███ ?███ ?███?█████?███ ?███ ?███ ?███ ??███ ?███ ?███
?███████ ?███████████ ?██████████ ?███??███ ?███ ?███████████ ?███ ?███ ?███████████
?███??███ ?███?????███ ?███?????███ ?███ ??? ?███ ?███?????███ ?███ ?███ ?███?????███
?███ ??███ ?███ ?███ ?███ ?███ ?███ ?███ ?███ ?███ ?███ ███ ?███ ?███
█████ ??████ █████ █████ █████ █████ █████ █████ █████ █████ ██████████ █████ █████
????? ???? ????? ????? ????? ????? ????? ????? ????? ????? ?????????? ????? ?????
------------------------------------------------------------------------------------------------------
Karmada is installed successfully.
kubectl master 命令別名
karmada 部署完成后,你直接執(zhí)行 kubectl get cluster
發(fā)現(xiàn)沒有找到對應(yīng) crd 資源巷蚪,那是因為 karmada apiserver 的配置文件沒有找對病毡。
因此我們來配置一個命令別名方便我們后續(xù)使用。
alias kmc="kubectl --kubeconfig=/etc/karmada/karmada-apiserver.config"
# --kubeconfig:Karmada apiserver 默認的配置文件路徑屁柏,若有變動啦膜,請修改有送。
下面我們就可以使用這個命令來查詢 Karmada 對應(yīng)的 crd 列表了。
[root@karmada karmada]# kmc get crds
NAME CREATED AT
clusteroverridepolicies.policy.karmada.io 2022-03-23T22:59:58Z
clusterpropagationpolicies.policy.karmada.io 2022-03-23T22:59:58Z
clusterresourcebindings.work.karmada.io 2022-03-23T22:59:58Z
federatedresourcequotas.policy.karmada.io 2022-03-23T22:59:58Z
multiclusteringresses.networking.karmada.io 2022-03-23T22:59:58Z
overridepolicies.policy.karmada.io 2022-03-23T22:59:58Z
propagationpolicies.policy.karmada.io 2022-03-23T22:59:58Z
resourcebindings.work.karmada.io 2022-03-23T22:59:58Z
resourceinterpreterwebhookconfigurations.config.karmada.io 2022-03-23T22:59:58Z
serviceexports.multicluster.x-k8s.io 2022-03-23T22:59:58Z
serviceimports.multicluster.x-k8s.io 2022-03-23T22:59:58Z
works.work.karmada.io 2022-03-23T22:59:59Z
現(xiàn)有集群加入到 Karmada
karmadactl 命令僧家,我沒有找到現(xiàn)成的二進制文件雀摘,通過源碼自行編譯了一個。
在源碼項目根路徑下執(zhí)行一下命令即可八拱。
make karmadactl
執(zhí)行下面命令將集群加入到 Karmada 中阵赠。
karmadactl join karmada-member1 --kubeconfig=/etc/karmada/karmada-apiserver.config --cluster-kubeconfig=/root/.kube/host.config --cluster-context=kind-karmada-member1
- –kubeconfig:Karmada apiserver 配置文件。
- –cluster-kubeconfig:需要注冊到 Karmada 中的集群肌稻。
- –cluster-context:若是配置文件中有多個集群信息清蚀,則需要指定 context 名稱。
輸出下面結(jié)果爹谭,則表示集群已經(jīng)順利加入了枷邪。
[root@karmada karmada]# kmc get cluster
NAME VERSION MODE READY AGE
karmada-member1 v1.23.4 Push True 3h46m
本文為原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載本站文章诺凡。
原文出處:蘭玉磊的個人博客
原文鏈接:https://www.fdevops.com/2022/03/26/kind-karmada-31039
版權(quán):本文采用「署名-非商業(yè)性使用-相同方式共享 4.0 國際」知識共享許可協(xié)議進行許可东揣。