4. Federation 安装与配置:Helm 安装 KubeFed、配置成员集群、验证联邦状态

本章进入实战环节,目标是在多集群环境中部署 KubeFed 控制平面,并将两个独立的 Kubernetes 集群注册为成员集群。通过 Helm 完成安装后,我们将验证联邦 API 资源的可用性以及集群间的状态同步。

4.1 环境准备与 Helm 仓库配置

在安装 KubeFed 之前,确保满足以下前提条件:

  • Kubernetes 集群:至少两个集群(如 cluster-1 和 cluster-2),版本 ≥ 1.21。
  • kubectl 上下文:已配置好两个集群的 kubeconfig 上下文,并能通过 kubectl config use-context 切换。
  • Helm 3:已安装并初始化。
  • CoreDNS:集群内 DNS 正常工作。

首先添加 KubeFed 官方 Helm 仓库:

helm repo add kubefed https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
helm repo update
提示:如果网络受限,可提前将 charts 下载到本地,使用 helm install --chart-path 离线安装。

4.2 Helm 安装 KubeFed 控制平面

KubeFed 控制平面以一组 CRD 和控制器的方式部署在 host 集群(即联邦控制面所在集群)中。我们选择 cluster-1 作为 host 集群。

执行以下命令安装 KubeFed:

kubectl config use-context cluster-1

helm install kubefed kubefed/kubefed \
  --namespace kube-federation-system \
  --create-namespace \
  --version 0.10.0 \
  --set controllermanager.replicas=1 \
  --set controllermanager.featureGates.PushReconciler=true \
  --set controllermanager.featureGates.SchedulerPreferences=true

安装完成后,检查 Pod 状态:

kubectl get pods -n kube-federation-system

预期输出类似:

NAME                                                    READY   STATUS    RESTARTS   AGE
kubefed-controller-manager-7d8f9c6b9f-abcde             1/1     Running   0          2m
kubefed-controller-manager-7d8f9c6b9f-fghij             1/1     Running   0          2m
关键参数说明:PushReconciler 启用推送模式,使联邦控制器主动将资源推送到成员集群;SchedulerPreferences 允许基于调度偏好分发工作负载。

4.3 配置成员集群

成员集群通过 KubeFedCluster 和 KubeFedConfig 资源注册。KubeFed 提供了 kubefedctl 命令行工具简化此过程。

4.3.1 安装 kubefedctl

# Linux amd64
curl -LO https://github.com/kubernetes-sigs/kubefed/releases/download/v0.10.0/kubefedctl-0.10.0-linux-amd64.tgz
tar -xzf kubefedctl-0.10.0-linux-amd64.tgz
sudo mv kubefedctl /usr/local/bin/

4.3.2 加入成员集群

将 cluster-2 注册为成员集群:

kubefedctl join cluster-2 \
  --host-cluster-context cluster-1 \
  --cluster-context cluster-2 \
  --host-cluster kubefed \
  --v=2

参数含义:

参数 说明
--host-cluster-context Host 集群的 kubeconfig 上下文名称
--cluster-context 成员集群的 kubeconfig 上下文名称
--host-cluster KubeFed 控制面所在的命名空间(通常为 kubefed)

执行成功后,KubeFed 会在 host 集群中创建 KubeFedCluster 资源,并自动生成用于访问成员集群的 Secret。

4.4 验证联邦状态

验证分为三个层面:CRD 可用性、集群健康状态、联邦资源同步。

4.4.1 检查联邦 CRD

kubectl get crd | grep kubefed

应看到类似以下 CRD:

  • kubefedclusters.core.kubefed.io
  • kubefedconfigs.core.kubefed.io
  • federateddeployments.types.kubefed.io
  • federatednamespaces.types.kubefed.io
  • clusterpropagatedversions.core.kubefed.io

4.4.2 查看成员集群状态

kubectl get kubefedclusters -n kube-federation-system

输出示例:

NAME        AGE   READY
cluster-2   1m    True

如果 READY 列为 True,表示 host 集群与成员集群之间的连接正常。

4.4.3 验证联邦资源分发

创建一个简单的 FederatedNamespace 测试:

cat <<EOF | kubectl apply -f -
apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
  name: test-ns
  namespace: test-ns
spec:
  placement:
    clusters:
      - name: cluster-2
EOF

检查 namespace 是否在成员集群中创建:

kubectl config use-context cluster-2
kubectl get ns test-ns

若返回 test-ns 且状态为 Active,则联邦同步成功。

常见问题:如果成员集群状态显示 False,请检查 host 集群中生成的 Secret 是否正确,以及成员集群的 API Server 是否可达。可使用 kubectl describe kubefedcluster cluster-2 -n kube-federation-system 查看详细错误。

4.5 联邦架构与数据流

下图展示了 KubeFed 安装后的核心组件与数据流向:

KubeFed 联邦架构与数据流 Host 集群 (cluster-1) KubeFed 控制平面 Controller Manager CRD: FederatedDeployment CRD: FederatedNamespace ClusterPropagatedVersion 联邦 API 资源 KubeFedCluster / KubeFedConfig 成员集群 (cluster-2) 同步的资源 Namespace: test-ns Deployment: my-app Service: my-svc ConfigMap: app-config 推送同步 状态回写 数据流说明 1. 用户在 Host 集群创建 Federated 资源 → 2. KubeFed 控制器解析 Placement 策略 3. 通过 PushReconciler 将资源同步到成员集群 → 4. 成员集群状态通过 ClusterPropagatedVersion 回写

4.6 安装后检查清单

使用下表快速确认安装配置是否完整:

检查项 命令 预期结果
控制面 Pod kubectl get pods -n kube-federation-system 2 个 controller-manager 均为 Running
联邦 CRD kubectl get crd | grep kubefed 至少 10 个 CRD
成员集群注册 kubectl get kubefedclusters -n kube-federation-system READY 列为 True
资源同步 kubectl --context cluster-2 get ns test-ns Namespace 存在且 Active
最佳实践:建议将 KubeFed 控制面部署在独立的 host 集群中,避免与业务负载竞争资源。同时,为每个成员集群配置独立的 ServiceAccount 和 RBAC 权限,遵循最小权限原则。

至此,KubeFed 的安装与配置已完成。下一阶段我们将基于此联邦环境,引入 Kyverno 策略引擎,实现对版本漂移的联合治理。