使用 microk8s 添加新节点时,什么决定节点的主机名?

使用 microk8s 添加新节点时,什么决定节点的主机名?

我正在构建一个运行相同设置的机器集群:

  • Ubuntu 服务器 20.04.2
  • 在安装过程中我选择一个唯一的短主机名
  • 安装操作系统后,我microk8s 1.20/stable通过 snap 添加并添加以下权限教程

microk8s disable ha-cluster我决定在安装后通过运行关闭 HA 。

microk8s add-node在主服务器上运行,前两台机器成功连接,创建一个有三个节点的集群,其中一个是主节点。

问题出现在第四台机器上。虽然连接正常,但 kubelet 并没有使用/etc/hostname我机器的内部 IP 中定义的“漂亮”主机名。一切正常,但这会导致节点列表不一致且丑陋。

在主服务器上运行时,我根据 ip (主机名)microk8s.kubectl edit node挑选出有问题的机器,并按照预期使用其主机名进行连接的其中一台机器():192.168.0.134zebrarhombus

- apiVersion: v1
  kind: Node
  metadata:
    annotations:
      node.alpha.kubernetes.io/ttl: "0"
      volumes.kubernetes.io/controller-managed-attach-detach: "true"
    creationTimestamp: "2021-04-04T18:08:15Z"
    labels:
      beta.kubernetes.io/arch: amd64
      beta.kubernetes.io/os: linux
      kubernetes.io/arch: amd64
      kubernetes.io/hostname: 192.168.0.134
      kubernetes.io/os: linux
      microk8s.io/cluster: "true"
    name: 192.168.0.134
    resourceVersion: "27486"
    selfLink: /api/v1/nodes/192.168.0.134
    uid: 09c01d87-1ae4-452f-8908-6dcb85a5999a
  spec: {}
  status:
    addresses:
    - address: 192.168.0.134
      type: InternalIP
    - address: 192.168.0.134
      type: Hostname

  ...

- apiVersion: v1
  kind: Node
  metadata:
    annotations:
      node.alpha.kubernetes.io/ttl: "0"
      volumes.kubernetes.io/controller-managed-attach-detach: "true"
    creationTimestamp: "2021-04-04T13:59:21Z"
    labels:
      beta.kubernetes.io/arch: amd64
      beta.kubernetes.io/os: linux
      kubernetes.io/arch: amd64
      kubernetes.io/hostname: rhombus
      kubernetes.io/os: linux
      microk8s.io/cluster: "true"
    name: rhombus
    resourceVersion: "27244"
    selfLink: /api/v1/nodes/rhombus
    uid: f125573a-0efb-444c-849b-f0521fe3b813
  spec: {}
  status:
    addresses:
    - address: 192.168.0.105
      type: InternalIP
    - address: rhombus
      type: Hostname

我发现这个--hostname-override论点引起了我的头痛:

$ sudo grep -rlw "192.168.0.134" /var/snap/microk8s/2094/args
/var/snap/microk8s/2094/args/kube-proxy
/var/snap/microk8s/2094/args/kubelet
/var/snap/microk8s/2094/args/kubelet.backup
$ cat /var/snap/microk8s/2094/kubelet

...

--cluster-domain=cluster.local
--cluster-dns=10.152.183.10
--hostname-override 192.168.0.134

如果我将该文件与没有此问题的机器上的相同文件进行比较,最后一行是多余的。 同样如此/var/snap/microk8s/current/...,我不知道它们之间有什么区别。

如果我尝试删除该行或将 IP 更改为zebra,设置将被忽略并覆盖(以某种方式)。在相关问题的答案中建议这样做这里。其他答案建议重置,我使用microk8s reset时没有区别。为了验证沿途的每个步骤,我在连接到其“漂亮”主机名的其中一台机器上运行相同的命令。最后,它始终保留了“漂亮”主机名。

在连接节点之前我应该​​做哪些更改才能显示正确的名称?为什么在不同的机器上执行相同的安装步骤会导致不同的节点名称?

编辑:我在机器上重新安装了操作系统,但问题仍然存在。


更新:

我忘记将最后一个节点主机名添加到主/etc/hosts文件中:

$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 masterhost
192.168.0.x nodehost1
192.168.0.y nodehost2 
192.168.0.z nodehost3                  <--- missing 

现在一切都使用主机名而不是 IP。我仍然不明白为什么条目/etc/hosts会改变行为。

相关内容