kubernetes 多主服务器设置设计

kubernetes 多主服务器设置设计

我可以安装 k8s(1.17.3) 单主环境,现在计划按照以下步骤部署 MultiMaster关联使用 kubeadm(堆叠控制平面和 etcd 节点)

它需要提供--control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"

为什么 kubeadm 需要负载均衡器信息?因为

  • 每个主服务器都运行自己的 API 服务器。
  • 系统中只有一个主节点有资格工作,这可以避免在管理容器时来自不同守护进程的冲突指令。为了实现此设置,我们启用了 --leader-elect 标志。只有获得租约的那个才能承担职责。
  • 因此,在集群级别,事情是通过选举领导者来决定的,那么我们为什么需要负载均衡器呢?
  • 我想将负载均衡器信息保留在集群之外,这样我就可以随时更改负载均衡器 IP,而不会干扰集群,因为每个主服务器都在监听

     - 10.10.10.1:6443
     - 10.10.10.2:6443
     - 10.10.10.3:6443
    
  • 如果集群内的任何组件想要通信,则使用端点解析器,如果我说得正确的话?

通过提供控制平面端点,我们的 LB 信息与集群配置紧密结合。我可以在没有指定控制平面端点的情况下实现多主吗?

更新1:

回应@mdaniel 如果我们在--control-plane-endpoint中提供其中一个Master的IP,它将成为添加新控制平面的单点故障。

假设我将 10.10.10.1:6443 作为控制平面端点,之后这个主节点宕机了,我想添加另一个控制平面,但不会成功,我尝试了以下方法

kubeadm join 10.10.10.2:6443 --token ... --discovery-token-ca-cert-hash sha256:... --control-plane --certificate-key ...

它给出了以下错误

[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to get config map: Get https://10.10.10.1:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s: dial tcp 10.10.10.1:6443: connect: connection refused

重点是,如果我明确提到不同的 CP,它应该考虑这一点,而不是仍然从旧 CP 中挑选 CM。

是的,我可以通过更改条目来解决

  1. kubectl edit cm 集群信息-n kube-public
  2. kubectl 编辑 cm kubeadm-conf -n kube-system

附言:我知道我应该使用 LB,但我有特定的场景,稍后我会在我的数据中心引入 LB。

答案1

为什么 kubeadm 需要负载均衡器信息?

因为您不想在主 IP 滚动时更新宇宙中的每个 kubeconfig。欢迎您使用 CNAME 记录、具有多个答案的 A 记录、复杂的共享 IP 系统或任何适合您的需求和专业知识的 HA 解决方案,但在 99.99% 的情况下,在 api 服务器前面安装负载均衡器是尽可能减少麻烦的解决方案。

这显然不是 100% 的情况,因为我曾多次遇到负载均衡器健康检查失败的情况,导致 API 服务器与集群的其余部分隔离,从而导致小火灾演变成核爆炸,但一般来说这是最不痛苦的。

为了清楚起见,您问题的其余部分--control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"只是帮助文本中的措辞,并非必需。您可以将 10.10.10.1:6443 插入该参数(或其中任何一个参数),只要运行的机器kubeadm能够通过该端口联系该 IP,并且您的 api 服务器的 IP 地址在其证书的 SAN 列表中。

相关内容