karmada 快速入门
Karmada 在 k8s 集群之上抽象了一个 k8s 集群,被抽象出来的集群中的节点就是部署在各个地方的 k8s 集群,通过创建调度策略,来指定每个资源运行在哪个 k8s 集群中。
Karmada(Kubernetes Armada)是一个 Kubernetes 管理系统,使您能够在多个 Kubernetes 集群和云中运行云原生应用程序,而无需更改应用程序。通过使用 Kubernetes 原生 API 并提供先进的调度功能,Karmada 实现了真正的开放式、多云 Kubernetes。
Karmada 旨在为多云和混合云场景下的多集群应用程序管理提供即插即用的自动化,具有集中式多云管理、高可用性、故障恢复和流量调度等关键功能。
本文是 Karmada 的快速入门,将介绍如何安装、怎么添加集群和怎么部署一个 deployment。
安装
准备 k8s 集群
在安装 Karmada 之前需要先准备两个 k8s 集群,建议使用 kubekey 快速安装,点击此链接进行参考。
准备 CSI
搭建好集群之后,需要准备 CSI ,在两个 k8s 集群中执行下面命令可以安装 openebs 的 CSI:
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
安装 karmada
安装完成 CSI 之后在任意一个 k8s 集群中可以安装 karmada-server,将介绍使用 operator 和 karmadactl 两种安装方式。
operator 安装
在执行以下命令使用 helm 安装 karmada-operator:
wget https://github.com/karmada-io/karmada/releases/download/v1.9.5/karmada-operator-chart-v1.9.5.tgz
tar xvf karmada-operator-chart-v1.9.5.tgz
cd karmada-operator
helm install karmada-operator . -n karmada-system --create-namespace --set operator.image.tag=v1.9.5
安装完成之后执行 kubectl get pod -n karmada-system
命令查看 operator 安装是否完成。
在确认 operator 安装完成之后,将下面的文件保存为 karmada.yaml
文件,执行 kubectl apply -f karmada.yaml
命令,即可创建 karmada-server 服务。
apiVersion: operator.karmada.io/v1alpha1
kind: Karmada
metadata:
name: karmada-demo
namespace: karmada-system
spec:
components:
etcd:
local:
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers/etcd
imageTag: 3.5.13-0
replicas: 1
volumeData:
# hostPath:
# type: DirectoryOrCreate
# path: /var/lib/karmada/etcd/karmada-demo
volumeClaim:
metadata:
name: etcd-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
storageClassName: openebs-hostpath
karmadaAPIServer:
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver
imageTag: v1.29.6
replicas: 1
serviceType: NodePort
serviceSubnet: 10.96.0.0/12
karmadaAggregatedAPIServer:
imageRepository: docker.io/karmada/karmada-aggregated-apiserver
imageTag: v1.8.0
replicas: 1
karmadaControllerManager:
imageRepository: docker.io/karmada/karmada-controller-manager
imageTag: v1.8.0
replicas: 1
karmadaScheduler:
imageRepository: docker.io/karmada/karmada-scheduler
imageTag: v1.8.0
replicas: 1
karmadaWebhook:
imageRepository: docker.io/karmada/karmada-webhook
imageTag: v1.8.0
replicas: 1
kubeControllerManager:
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager
imageTag: v1.29.6
replicas: 1
karmadaMetricsAdapter:
imageRepository: docker.io/karmada/karmada-metrics-adapter
imageTag: v1.8.0
replicas: 2
# karmadaSearch: # the component `Karmadasearch` is not installed by default, if you need to install it, uncomment it and note the formatting
# imageRepository: docker.io/karmada/karmada-search
# imageTag: v1.8.0
# replicas: 1
# karmadaDescheduler: # the component `KarmadaDescheduler` is not installed by default, if you need to install it, uncomment it and note the formatting
# imageRepository: docker.io/karmada/karmada-descheduler
# imageTag: v1.8.0
# replicas: 1
hostCluster:
networking:
dnsDomain: cluster.local
使用 karmadactl 命令安装
点击链接下载所需要的 karamdactl 的版本,下载完成之后执行以下命令进行 karmada-server 的安装:
./karmadactl init --kube-image-mirror-country='cn'
添加集群
准备 karmada-apiserver.config 文件
在注册集群之前,需要先找到 karmada-apiserver.config 文件。使用 operator 创建的 karmada-server ,执行以下命令获取文件:
kubectl get secret -n karmada-system karmada-demo-admin-config -o jsonpath={.data.kubeconfig} | base64 -d > ~/.kube/karmada-apiserver.config
使用 karmadactl 命令创建的 karmada-server 文件存放在 /etc/karmada 文件下面。
注册集群
将准备好的 karmada-kubeconfig 文件,传送到另一台服务器上,然后执行以下命令进行集群注册:
./karmadactl --kubeconfig /root/.kube/karmada-apiserver.config join test --cluster-kubeconfig=$HOME/.kube/config ## test为名字,可以自定义,第一个 kubeconfig 是 karmada-apiserver.config 的位置,第二个 --cluster-kubeconfig 是集群本身 kubeconfig 文件的位置
在任意一台服务器上执行以下命令即可看到已经添加成功的集群:
[root@node1 ~]# kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters
NAME VERSION MODE READY AGE
test v1.23.10 Push True 4d18h
如何部署一个 deployment
在部署 deployment 前,要先创建一个调度策略,用于声明 nginx 的 deployment 在哪个集群中运行。
将下面 yaml 文件保存为 policy.yaml ,执行命令 kubectl --kubeconfig /etc/karmada/karmada-apiserver.config apply -f policy.yaml
创建策略。
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: example-policy # The default namespace is `default`.
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx # If no namespace is specified, the namespace is inherited from the parent object scope.
placement:
clusterAffinity:
clusterNames:
- test
在策略完成之后执行命令 kubectl --kubeconfig /etc/karmada/karmada-apiserver.config create deployment nginx --image nginx
,在 test 集群中以下命令就可以查看到正在运行的 nginx pod:
[root@node2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-6wqpx 1/1 Running 0 6m5s
总结
Karmada 在 k8s 集群之上抽象了一个 k8s 集群,被抽象出来的集群中的节点就是部署在各个地方的 k8s 集群,通过创建调度策略,来指定每个资源运行在哪个 k8s 集群中。
更多推荐
所有评论(0)