FedState是Federation Stateful Service的意思,主要的设计目标是为了解决在多云,多集群,多数据中心的场景下,有状态服务的编排,调度,部署和自动化运维等能力。
FedState对需要部署在多云环境上的中间件,数据库等有状态的服务通过Karmada下发到各个成员集群,使其正常工作的同时并提供一些高级运维能力。
FedState自身包含以下组件:
- FedInfraScheduler: 中间件等服务多云环境调度器,包含一些与中间件服务运行时状态相关的调度策略。
- FedInfraOps:中间件等服务控制器主要负责这些服务的按需配置与通过Karmada分发。
在Karmada Host集群,部署FedInfraOps和调度器。在所有Karmada成员集群,部署InfraServer Operator。创建联邦中间件实例。
- Kubernetes v1.16+
- Karmada v1.4+
- 存储服务
- 集群VIP
- 准备不少于两个Kubernetes集群。
- 使用Keepalived,HAProxy等服务分别管理两个集群的VIP。
- 部署Karmada:https://karmada.io/docs/installation/。
- 在Karmada Host集群,检查所纳管的成员集群是否部署了estimator。
## 检查是否部署了karmada estimator组件。
kubectl get po -n karmada-system | grep estimator
## 如果没有部署,进行karmada estimator组件部署:
kubectl-karmada addons
## 检查estimator service的名称后缀必须为{*}-estimator-{clustername}
kubectl get svc -n karmada-system | grep estimator
- 在Karmada Host集群,部署自定义资源解释器。
kubectl apply -f customization.yaml
- 在Karmada Host集群,部署控制面服务 multicloud-mongo-operator。
cd pkg/install/config
kubectl create ns federation-mongo-operator
kubectl create secret generic kubeconfig --from-file=/root/.kube/config -n federation-mongo-operator
## 在kubeconfig查看Karmada ApiServer名称
kubectl config get-contexts
## 修改manager.yaml将其中的KARMADA_CONTEXT_NAME值改为karmada apiserver名称
vim manager/manager.yaml
kubectl apply -f config/webhook/secret.yaml -n federation-mongo-operator
kubectl apply -k config/deploy_contorlplane/.
- 在Karmada Host集群,部署webhook以及控制面的CRD。
kubectl label cluster <成员clsuter名称> vip=<成员集群对应的Vip>
kubectl apply -f config/webhook/external-svc.yaml
kubectl apply -f config/crd/bases/.
- 在Karmada Host集群,部署调度器。
cd install/scheduler/artifacts
## 在kubeconfig查看Karmada Host Apiserver的名称以及Karmada Apiserver的名称和karmada Host的Vip地址
vim ./deployment.yaml
## 修改以下启动参数为上面的值
- --karmada-context=karmada
- --host-context=10-29-14-21
- --host-vip-address=10.29.5.103
- 在所有的Karmada的成员集群上,部署数据面控制器mongo-operator。
cd insatll/config
kubectl apply -f config/crd/bases/mongodbs.yaml
kubectl apply -k config/deploy_dataplane/.
- 在Karmada Host集群,创建MiddleCloudMongoDB实例。
kubectl apply -f config/sample/samples.yaml