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

2023-12-03

我们目前有 2 个 Kubernetes 集群:

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

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

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

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

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

  • kubeadm在使用 Kops 设置的节点上不可用,所以我们不能这样做kubeadm token create --print-join-command

  • Kops 似乎没有实用程序让我们添加任意节点,请参阅如何向我的 kops 集群添加节点? (这里的节点是我的外部实例)

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


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

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

run kubeadm reset在相关的本地部署上

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

systemctl cat kubelet

在这里,您将看到 kubelet 配置指定于/etc/sysconfig/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 类型的服务或任何云卷,则需要将工作负载固定到特定节点。你需要大量使用污点和容忍。
  • Kubernetes 工作线程并非设计用于通过 WAN 连接。您可能会在某个时候看到网络延迟等问题
  • 如果您确实选择走这条路线,则需要确保为 API kubelet 通信或 VPN 双向配置了 TLS。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes:将 Kops 集群与本地 Kubeadm 集群相结合 的相关文章

随机推荐

  • youtube-dl 给了我一个关于 ssl 的错误

    以下是 youtube dl 给我的错误 另一个工具you get给了我一个类似的错误 我应该怎么做才能从 youtube 下载视频 youtube dl f 137 https youtu be 0Ef9GudbxXY 17 27 23
  • 类型错误:get() 需要 1 个位置参数,但给出了 3 个

    此代码将通过以下方式运行基本数据输入窗口tkinter这将保存用户的输入 当我运行代码并用鼠标单击 提交 按钮时 出现错误 print Informaci n Adicional format self entry name get 1 0
  • OpenStreetMap 经常发送网关超时错误

    我在程序中使用传单地图 代码如下
  • 是否有“git merge -s ours”的“他们的”版本?

    将主题分支 B 合并到 A 时使用git merge 我遇到一些冲突 我知道所有的冲突都可以使用 B 中的版本来解决 我知道git merge s ours 但我想要的是类似的东西git merge s theirs 为什么它不存在 与现有
  • Rails 3 有条件包含 Javascript 文件

    我正在尝试找出将以下内容包含在 Rails 3 中的最佳方法 正如你所看到的 我只是希望 IE 可以使用该 javascript 文件 所以也许我根本不应该这样做 我愿意接受建议 我用它来指定要包含的默认 javascript 文件 con
  • Xcode 8.2.1 / Swift 3 - 从 Plist 字典数组加载 TableView

    我有一个 plist 我将其复制到我的项目中以在 TableView 中使用它 plist 加载 我通过将内容和行数打印到控制台来进行验证 当我构建项目时 我得到一个没有数据的空白 TableView 我已经搜索并尝试了几天 但仍然无法让它
  • Modelica 类图

    我正在寻找一种可以 自动 从 Modelica 代码创建类图的工具 https trac modelica org Modelica attachment ticket 85 classDiagramModelicaMedia png我需要
  • 更新标记生成器后,LineByLineTextDataset 继续加载

    更新标记生成器后 当我运行此行时 数据集 LineByLineTextDataset tokenizer bert tokenizer file path some file txt 块大小 128 它会永远加载 这是完整的代码 from
  • 在 bash 补全上下文中,关于 ${array[*]} 与 ${array[@]} 的混淆

    我第一次尝试编写 bash 补全 我对取消引用 bash 数组的两种方法有点困惑 array and array 这是相关的代码块 它有效 但我想更好地理解它 switch local cur perls local ROOT PERLBR
  • 打开文件对话框并使用 WPF 控件和 C# 选择文件

    我有一个TextBox named textbox1 and a Button named button1 当我点击button1我想浏览我的文件以仅搜索图像文件 类型 jpg png bmp 当我选择一个图像文件并在文件对话框中单击 确定
  • Matlab:用曲线绘制频率分布

    我必须在一张图上绘制 10 个频率分布 为了保持整洁 我想避免制作带有箱的直方图 并且更喜欢让线条沿着每个直方图的轮廓 我尝试了以下方法 counts bins hist data plot bins counts 但这给了我一条非常不精确
  • PostgreSQL 是否会持久加载其 pl* 解释器?

    如果我在 plperlu 中写了一些东西 那么该模块什么时候会被重新加载 每次函数运行时 第一次跑的时候 如果 Perl DLL 一段时间没有使用 是否会被卸载 然后又会重新加载另一个模块 我认为在该会话中第一次使用该语言时 该模块将为每个
  • VideoOutput QML 的自定义源属性

    到底需要做什么才能提供自定义框架源VideoOutputQML 对象 Does VideoOuput本身提供了一个实例QAbstractVideoSurface类到 源 Qt5 文档说明了有关此问题的以下内容 如果您正在扩展自己的 C 类以
  • 表被指定两次,既作为“UPDATE”的目标又作为单独的数据源

    我正在尝试更新一列中的多行 但是当我执行查询时出现错误 有人指导我哪里错了 提前致谢 UPDATE TestTaker SET TestTaker Email Replaced WHERE TestTaker Id IN SELECT Te
  • 将字符串分解两次

    我有一个这样组成的字符串 87 1 nuovo 88 4 209 89 41 1 5 3 1 116 20 13 3 148 模式是 Id1 Mq1 Q ta1 Tipo1 Id2 Mq2 Q ta2 Tipo2 Id3 Mq3 Q ta3
  • ProxySelector 将 URL 的方案从 https:// 更改为 socket://

    我需要访问 Facebook 但所有传出通信都在我们的服务器上被阻止 因此我必须使用代理 我用以下方法初始化代理 ProxySelector setDefault new ConfigurableProxySelector mapping
  • Java 8 Streams:列表到具有映射值的映射

    我正在尝试创建一个Map from a List using Streams The key应该是原始项目的名称 The value应该是一些衍生数据 After map 该流由以下部分组成Integers 并在当时 collect 我无法
  • 测试一个数据帧是否是另一个数据帧的排序版本

    测试某个数据帧是否只是另一个数据帧的排序版本是否可行 例如 如果我有两个数据框a and b 有什么方法可以轻松确定是否a只是一个重新排序的版本b 或相反亦然 这是一个简单的例子 a lt data frame x1 1 10 x2 11
  • 在滚动过程中改变背景颜色

    我的应用程序有一个入门部分 有 4 个页面 用户可以水平滚动以了解如何使用该应用程序 标准 我希望当用户从一个页面滚动到另一个页面时背景颜色会发生变化 我有 4 个想要使用的 RGB 值 241 170 170 170 201 241 18
  • Kubernetes:将 Kops 集群与本地 Kubeadm 集群相结合

    我们目前有 2 个 Kubernetes 集群 在 AWS 上运行 Kops 的一种设置 在我们自己的硬件上运行 Kubeadm 的一种设置 我们希望将它们组合起来 只需要管理一个集群 主服务器最终可能位于 AWS 或我们的服务器上 两者都