Kubernetes:将 Kops 集群与本地 Kubeadm 集群相结合

Kubernetes: Combining a Kops cluster to an on-premise Kubeadm cluster

我们目前有 2 个 Kubernetes 集群:

我们想将它们组合起来,只管理一个集群。

master 最终可能在 AWS 或我们的服务器上,两者都很好。

我们找不到将配置有一个集群的节点添加到另一个集群的方法。

这个问题提出了同样的问题但没有得到回答:https://github.com/kubernetes/kops/issues/5024

您可以手动加入节点,但这确实不是推荐的做事方式。

如果您使用的是 kubeadm,您可能已经在 worker 上安装了所有相关组件,以便他们以有效的方式加入。我要说的流程是:

运行 kubeadm reset 在有问题的本地

登录kops节点,检查kubelet配置:

systemctl cat kubelet

在这里,您会看到在 /etc/sysconfig/kubelet 处指定了 kubelet 配置。您需要复制该文件并确保本地节点在其 systemd 启动配置中包含它

将相关配置复制到本地节点。您需要删除对 AWS 云提供商内容的任何引用,并确保主机名有效。这是我从 kops 节点复制并修改的示例配置:

DAEMON_ARGS="--allow-privileged=true --cgroup-root=/ --cluster-dns=100.64.0.10 --cluster-domain=cluster.local --enable-debugging-handlers=true - --feature-gates=ExperimentalCriticalPodAnnotation=true --hostname-override=<my_dns_name> --kubeconfig=/var/lib/kubelet/kubeconfig --network-plugin=cni --node-labels=kops.k8s.io/instancegroup=onpremnodes,kubernetes.io/role=node,node-role.kubernetes.io/node= --non-masquerade-cidr=100.64.0.0/10 --pod-infra-container-image=gcr.io/google_containers/pause-amd64:3.0 --pod-manifest-path=/etc/kubernetes/manifests --register-schedulable=true --v=2 --cni-bin-dir=/opt/cni/bin/ --cni-conf-dir=/etc/cni/net.d/"
HOME="/root"

此外,检查 kubelet kubeconfig 配置(它应该在 /var/lib/kubelet/kubeconfig)。这是告诉 kubelet 要注册到哪个 API 服务器的配置。确保存在于本地节点

这应该让您的节点加入 API。在这个过程中,您可能需要进行一些调试。

我真的不建议这样做,原因如下:

  • 除非您以合理的方式使用节点标签,否则您将在配置云元素时遇到问题。 kubelet 将定期与 AWS API 交互,因此如果您尝试使用 LoadBalancer 类型的服务或任何云卷,您需要将工作负载固定到特定节点。您需要大量使用 taints and tolerations.
  • Kubernetes worker 并非设计用于通过 WAN 连接。您可能会在某个时候看到网络延迟等问题
  • 如果您确实选择沿着这条路线走下去,则需要确保为 API <-> kubelet 通信或 VPN 双向配置 TLS。