Domain-Name-System
kubernetes coredns 處於 CrashLoopBackOff 狀態,出現“未找到名稱伺服器”錯誤
我曾嘗試在我的裸機伺服器上使用 kubeadm 建構 kubernetes,並將 containerd 作為 cri,但似乎 coredns 在安裝 cni(weave-net)後無法啟動。
兩個 coredns 容器現在處於“CrashLoopBackOff”狀態,它們的日誌是:
plugin/forward: no nameservers found
而“kubectl describe pod”的描述如下:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 4m52s (x9 over 13m) default-scheduler 0/1 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate. Normal Scheduled 4m7s default-scheduler Successfully assigned kube-system/coredns-58cf647449-8pq7k to k8s Normal Pulled 3m13s (x4 over 4m6s) kubelet Container image "localhost:5000/coredns:v1.8.4" already present on machine Normal Created 3m13s (x4 over 4m6s) kubelet Created container coredns Normal Started 3m13s (x4 over 4m6s) kubelet Started container coredns Warning Unhealthy 3m13s kubelet Readiness probe failed: Get "http://10.32.0.3:8181/ready": dial tcp 10.32.0.3:8181: connect: connection refused Warning BackOff 2m54s (x12 over 4m5s) kubelet Back-off restarting failed container
如果我在 /etc/resolv.conf 上添加一些設置,例如“nameserver 8.8.8.8”,coredns pods 就會開始執行。但是,目前我根本不使用任何外部 dns,並且使用 Docker 作為 cri,雖然 /etc/resolv.conf 上沒有設置,但 coredns 執行良好。
是否可以在不在 resolv.conf 上設置一些上游 dns 伺服器的情況下處理這個問題?
伺服器資訊:
OS: RedHat Enterprise Linux 8.4 cri: containerd 1.4.11 cni: weave-net 1.16 tools: kubeadm, kubectl, kubelet 1.22.1
我也嘗試過使用 calico 作為 cni,但結果是一樣的。
原因是 coredns 預設在其 ConfigMap 上有一個轉發設置。儘管 /etc/resolv.conf 上沒有 DNS 設置,但它試圖將請求轉發到上游 DNS 伺服器。
# kubectl edit configmap coredns -n kube-system
刪除以下部分後,它開始並正常工作。
forward . /etc/resolv.conf { max_concurrent 1000 }