我们目前有2个Kubernetes集群:
使用Kops在AWS上运行的一种设置
使用我们自己的硬件运行Kubeadm的一种设置
我们希望将它们组合在一起,以便仅管理一个集群。
主服务器最终可能位于AWS或我们的服务器上,两者都很好。
我们找不到将配置了一个集群的节点添加到另一个集群的方法。
kubeadm
在使用Kops设置的节点上不可用,因此我们无法执行例如kubeadm token create --print-join-command
Kops似乎没有实用程序可让我们添加任意节点,请参见how to add an node to my kops cluster? (node in here is my external instance)
此问题提出了相同的问题,但未得到解答:https://github.com/kubernetes/kops/issues/5024
答案 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。在执行此过程时,您可能必须进行一些调试。
我确实不建议这样做,原因如下: