Kubernetes:将Kops集群与本地Kubeadm集群组合

时间:2018-07-19 16:33:58

标签: kubernetes kubeadm kops

我们目前有2个Kubernetes集群:

  • 使用Kops在AWS上运行的一种设置

  • 使用我们自己的硬件运行Kubeadm的一种设置

我们希望将它们组合在一起,以便仅管理一个集群。

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

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

此问题提出了相同的问题,但未得到解答:https://github.com/kubernetes/kops/issues/5024

1 个答案:

答案 0 :(得分:2)

您可以手动加入节点,但这实际上不是推荐的处理方式。

如果您正在使用kubeadm,则可能已经在工作程序上安装了所有相关组件,以使它们以有效方式加入。我要说的过程是:

在有问题的本地运行kubeadm reset

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

systemctl cat kubelet

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

将relevent配置复制到本地节点。您需要删除对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员工并非旨在通过WAN连接。您可能会在某些时候看到网络延迟等问题
  • 如果您确实选择沿这条路线走,则需要确保在两个方向上均已为TLS配置 kubelet通信或VPN的TLS。