使用资源指标跨集群弹性扩缩容
在 Karmada 中,为了自动扩展工作负载以满足需求,FederatedHPA 会跨多个集群扩/缩容工作负载。
当负载增加时,如果 Pod 数量低于配置的最大值,FederatedHPA 会扩容工作负载(Deployment、StatefulSet 或其他类似资源)的副本。当负载减少时,如果 Pod 数量高于配置的最小值,FederatedHPA 会缩容工作负载的副本。
本文档将引导您完成这样一个案例:启用 FederatedHPA 来自动扩缩容跨集群部署的 nginx。
演示案例将执行以下操作:

member1集群中存在一个 Deployment 的 Pod。- Service 部署在
member1和member2集群。 - 请求多集群 Service 来提高 Pod 的 CPU 使用率。
- Pod 副本将在
member1和member2集群中扩容。
前提条件
Karmada 已安装
您可以参考快速入门安装 Karmada,或直接运行 hack/local-up-karmada.sh 脚本,该脚本也用于运行 E2E 测试。
成员集群网络
确保至少已有两个集群加入 Karmada,并且成员集群之间的容器网络已连通。
- 如果您使用
hack/local-up-karmada.sh脚本部署 Karmada,Karmada 中会有 3 个成员集群,并且集群member1和member2间的容器网络已连通。 - 您可以使用
Submariner或其他相关开源项目来连接成员集群之间的网络。
注意:为了防止路由冲突,集群中 Pod 和 Service 的 CIDR 必须互不重叠。
ServiceExport 和 ServiceImport 自定义资源已安装
我们需要在成员集群中安装 ServiceExport 和 ServiceImport 以启用多集群 Service。
在 Karmada 控制平面 上安装了 ServiceExport 和 ServiceImport 后,我们就可以创建 ClusterPropagationPolicy,将以下两个 CRD 分发到成员集群。
# propagate ServiceExport CRD
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
name: serviceexport-policy
spec:
resourceSelectors:
- apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
name: serviceexports.multicluster.x-k8s.io
placement:
clusterAffinity:
clusterNames:
- member1
- member2
---
# propagate ServiceImport CRD
apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
name: serviceimport-policy
spec:
resourceSelectors:
- apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
name: serviceimports.multicluster.x-k8s.io
placement:
clusterAffinity:
clusterNames:
- member1
- member2
成员集群中已安装 metrics-server
我们需要为成员集群安装 metrics-server 以提供 metrics API,通过运行以下命令来安装:
hack/deploy-k8s-metrics-server.sh ${member_cluster_kubeconfig} ${member_cluster_context_name}
如果您使用 hack/local-up-karmada.sh 脚本部署 Karmada,则可以运行以下命令在三个成员集群中部署 metrics-server:
hack/deploy-k8s-metrics-server.sh $HOME/.kube/members.config member1
hack/deploy-k8s-metrics-server.sh $HOME/.kube/members.config member2
hack/deploy-k8s-metrics-server.sh $HOME/.kube/members.config member3
Karmada 控制平面已安装 karmada-metrics-adapter
我们需要在 Karmada 控制平面中安装 karmada-metrics-adapter 以提供 metrics API,通过运行以下命令来安装:
hack/deploy-metrics-adapter.sh ${host_cluster_kubeconfig} ${host_cluster_context} ${karmada_apiserver_kubeconfig} ${karmada_apiserver_context_name}
如果您使用 hack/local-up-karmada.sh 脚本部署 Karmada,将默认安装 karmada-metrics-adapter。