我正在 CentOS 8 Hyper-V 虚拟机上安装 k8s 集群。我使用路由器 DHCP 服务器为它们提供静态 IP 地址,但没有 DNS。
当我准备设置 Kubernetes 时,我运行了 sudo kubeadm init
我收到以下警告
[WARNING Hostname]: hostname "k8s-master" could not be reached
[WARNING Hostname]: hostname "k8s-master": lookup k8s-master on 192.168.0.1:53: no such host
希望这不会有什么问题,我可以使用静态 IP 地址,于是我继续设置 k8s 仪表板。仪表板上没有提供任何信息,可能是由于度量服务器中出现以下错误
E0914 19:22:32.513517 1 manager.go:111] unable to fully collect
metrics: [unable to fully scrape metrics from source kubelet_summary:k8s-
worker1: unable to fetch metrics from Kubelet k8s-worker1 (k8s-worker1): Get
https://k8s-worker1:10250/stats/summary?only_cpu_and_memory=true: dial tcp:
lookup k8s-worker1 on 10.96.0.10:53: no such host, unable to fully scrape
metrics from source kubelet_summary:k8s-master: unable to fetch metrics from
Kubelet k8s-master (k8s-master): Get https://k8s-master:10250/stats
/summary?only_cpu_and_memory=true: dial tcp: lookup k8s-master on
10.96.0.10:53: no such host]
我决定编辑 /etc/hosts 文件并添加以下条目
192.168.0.151 k8s-master
192.168.0.161 k8s-worker1
这并没有解决我的问题。我的虚拟机可以通过主机名互相 ping 通,但 nslookup 不起作用。
我不知道 k8s 用于解析主机名的机制,以及我还能做些什么让 k8s 在没有外部 dns 的情况下工作。任何帮助都非常感谢。
注意:我已通过在 metrics-server 部署中添加以下参数解决了我的问题。
--kubelet-preferred-address-types=[InternalDNS,InternalIP,Hostname,ExternalDNS,ExternalIP]
--kubelet-insecure-tls
不过,我仍然想知道是否可以使用主机名修复此问题,以及主机名解析在 kubernetes 中的工作方式。
答案1
参考@msdaniel 的评论,我使用 Raspberry Pi 作为 DNS 服务器,这为我解决了很多问题。我不再需要使用 Samba 通过 netbios 传递主机名,也不需要编辑我的 hosts 文件,当然我可以使用默认的 k8s 首选地址类型。
所以答案是,只需为您的网络使用 DNS,即使它是像 Pi-hole 这样的简单 DNS。它可以避免很多麻烦。