Kubernetes:将Kops集群合并到本地Kubeadm集群

Kubernetes:将Kops集群合并到本地Kubeadm集群,kubernetes,kubeadm,kops,Kubernetes,Kubeadm,Kops,我们目前有2个Kubernetes集群: 一个在AWS上运行Kops的设置 一个在我们自己的硬件上运行Kubeadm的设置 我们希望将它们结合起来,只需要管理一个集群 主服务器可能会出现在AWS或我们的服务器上,两者都很好 我们无法找到将配置了一个群集的节点添加到另一个群集的方法 kubeadm在使用KOP设置的节点上不可用,因此我们无法执行例如kubeadm令牌创建--print join命令 Kops似乎没有让我们添加任意节点的实用程序,请参阅 这个问题提出了同样的问题,但没有得到回

我们目前有2个Kubernetes集群:

  • 一个在AWS上运行Kops的设置

  • 一个在我们自己的硬件上运行Kubeadm的设置

我们希望将它们结合起来,只需要管理一个集群

主服务器可能会出现在AWS或我们的服务器上,两者都很好

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

  • kubeadm
    在使用KOP设置的节点上不可用,因此我们无法执行例如
    kubeadm令牌创建--print join命令

  • Kops似乎没有让我们添加任意节点的实用程序,请参阅


这个问题提出了同样的问题,但没有得到回答:

您可以手动加入节点,但这确实不是一种推荐的做法

如果您使用的是kubeadm,那么您可能已经在workers上安装了所有相关组件,以便它们以有效的方式加入。我想说的是,接下来的过程是:

在有问题的on prem上运行
kubeadm reset

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

systemctl cat kubelet

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

将相关配置复制到on prem节点。您需要删除对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"
DAEMON_参数=“--allow privileged=true--cgroup root=/--cluster dns=100.64.0.10--cluster domain=cluster.local--enable debug handlers=true--feature gates=expericalCriticalPodAnnotation=true--hostname override=--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/cni-conf dir=/etc/cni/net.d/“
HOME=“/root”
此外,请检查kubelet-kubeconfig配置(应位于
/var/lib/kubelet/kubeconfig
)。此配置告诉kubelet要注册哪个API服务器。请确保on prem节点上存在此配置

这将使您的节点加入API。在完成此过程时,您可能需要进行一些调试

但我确实不建议这样做,原因如下:

  • 除非您以合理的方式使用节点标签,否则在配置云元素时将出现问题。kubelet将定期与AWS API交互,因此如果您尝试使用LoadBalancer类型的服务或任何云卷,则需要将工作负载固定到特定节点。您需要大量使用
  • Kubernetes工作人员的设计不是通过WAN进行连接。您可能会在某个时候看到网络延迟等问题
  • 如果您选择走这条路线,则需要确保在两个方向上都配置了TLS,用于API kubelet通信或VPN

感谢您快速给出的答案!您必须意识到这样做不是一个好主意。几个月前我看到了这个回复,我不知道我会遇到多少问题。主要问题是:cloud provider=aws。您必须编辑主节点上的静态清单并删除aws云提供商,以防止从kop中删除本地节点s AWS群集,但如果您这样做…您将失去AWS集成(如创建EBS卷、负载平衡器到服务等)。此更改无法从kops完成,因此在升级/缩放/更改群集后,您必须反复编辑这些清单。。。