OJF*_*ord 1 kubernetes kubeadm
没有设置 acontrolPlaneEndpoint就不可能加入主节点:
错误执行阶段预检:
不满足托管新控制平面实例的一个或多个条件。
无法在没有稳定 controlPlaneEndpoint 地址的集群中添加新的控制平面实例
请确保:
* 该集群具有稳定的 controlPlaneEndpoint 地址。
但是如果你改为加入一个工作节点(即没有--control-plane),那么它不仅知道集群中的其他节点,而且知道哪些是主节点。
这是因为该mark-control-plane阶段执行以下操作:
通过添加标签“node-role.kubernetes.io/master=''”将节点标记为控制平面 通过添加污点 [node-role.kubernetes.io/master:NoSchedule] 将节点标记为控制平面
那么主节点( --control-plane)不能加入集群并使用角色标签来发现其他控制平面节点吗?
是否有任何此类插件或其他方式来配置此行为以避免单独的基础架构用于负载平衡 API 服务器?
查看kubeadm 类型定义,我发现这个很好的描述清楚地解释了它:
ControlPlaneEndpoint 为控制平面设置一个稳定的 IP 地址或 DNS 名称;它可以是有效的 IP 地址或 RFC-1123 DNS 子域,两者都带有可选的 TCP 端口。如果未指定 ControlPlaneEndpoint,则使用 AdvertiseAddress + BindPort;如果指定了 ControlPlaneEndpoint 但没有 TCP 端口,则使用 BindPort。可能的用法是: 例如,在具有多个控制平面实例的集群中,该字段应分配控制平面实例前面的外部负载均衡器的地址。例如,在强制节点回收的环境中,ControlPlaneEndpoint 可用于为控制平面分配稳定的 DNS。
这也可能会影响 kubernetes 生成的 PKI,因为它需要知道一个通用名称/IP,您将通过它访问集群以包含在它为 api 节点生成的证书中,否则这些将无法正确匹配。
如果您真的不想使用负载均衡器,您可以使用所有控制平面节点的 IP 设置循环 dns 条目,并尝试将其指定为controlPlaneEndpoint值。然而,这对故障转移和冗余没有帮助,因为失败的节点不会从记录中删除,并且一些客户端可能会缓存地址而不尝试重新解析它,从而进一步延长任何中断。
希望这可以帮助。