Что определяет имя хоста узла при добавлении нового узла с помощью microk8s?
Я создаю кластер машин, на которых установлена одна и та же настройка:
- Сервер Ubuntu 20.04.2
- во время установки я выбираю уникальное короткое имя хоста
- когда ОС установлена, я добавляю
microk8s 1.20/stable
с помощью Snap и добавьте разрешения, следуя этому руководству.
Я решил отключить HA, запустивmicrok8s disable ha-cluster
после установки.
я бегуmicrok8s add-node
на главной и первых двух машинах успешно соединяются, создавая кластер с тремя узлами, один из которых является главным.
Проблема возникает с 4-й машиной. Несмотря на то, что kubelet подключается нормально, он не использует «красивое» имя хоста, как определено в/etc/hostname
но внутренний IP моей машины. Все работает нормально, но в результате получается противоречивый и некрасивый список узлов.
Бегmicrok8s.kubectl edit node
на мастере я выбираю проблемную машину по ip192.168.0.134
(имя хоста) и одна из машин, которая подключилась к его имени хоста, как и предполагалось (rhombus
):
- 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
чтобы никакой разницы. Чтобы проверить каждый шаг на этом пути, я запускаю те же команды на одной из машин, которые подключаются со своим «красивым» именем хоста. В конце концов, он всегда сохранял «красивое» имя хоста.
Что мне следует изменить перед подключением узла к другому, чтобы отображалось правильное имя? Почему одни и те же шаги установки на разных машинах приводят к разному имени узла?
РЕДАКТИРОВАТЬ: Я переустановил ОС на машине, но проблема осталась.
ОБНОВЛЯТЬ:
Я забыл добавить имя хоста последнего узла в главный файл:
$ 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
меняет поведение.