1.背景:
最近在ubuntu804上適配k8s的時候,部署到業務pod的時候,出現了伺服器卡死,top檢視發現負載很高,進行CPU排序發現如下資訊,可知是CoreDNS服務導致。
2. 分析排查:
1.分析CoreDNS問題
根據coredns狀態是CrashLoopBackOff
# kubectl get pod -n kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE coredns-76b74f549-99331 0/1 CrashLoopBackOff 5 4m45s
檢視coredns對應的pod日誌有如下錯誤:
# kubectl -n kube-system logs coredns-76b74f549-99bxd .:53 2021/06/03 06:20:28 [INFO] CoreDNS-1.1.3 2021/06/03 06:20:28 [INFO] linux/amd64, go1.10.1, b0fd575c 2021/06/03 06:20:28 [INFO] plugin/reload: Running configuration MD5 = d23dc615bc772457a380ba5d5c2690b7 CoreDNS-1.1.3 [FATAL] plugin/loop: Loop (127.0.0.1:60429 -> :53) detected for zone ".", see https://coredns.io/plugins/loop#troubleshooting. Query: "HINFO 6292641803451309721.7599235642583168995."
再根據日誌報錯,可以獲取到如下文件內容:
由以上資訊可知:
Kubernetes叢集中轉發迴圈的一個常見原因是與主機節點上的本地DNS快取的互動(例如systemd)。例如,在某些配置中,systemd resolved將把環回地址127.0.0.53作為名稱伺服器放入/etc/resolv.conf。預設情況下,Kubernetes(通過kubelet)將使用預設dnsPolicy將這個/etc/resolv.conf檔案傳遞給所有pod,使它們無法進行DNS查詢(包括CoreDNS pod)。
簡而言之:DNS迴環了。
出現這個問題的關鍵原因是ubuntu1804中 /etc/resolv.conf檔案預設nameserver為127.0.0.53,所以需要調整kubelet的啟動檔案中DNS配置檔案路徑到/run/systemd/resolve/resolv.conf。
ansibel部署的時候kubelet-config.yaml檔案可以做如下修改做判斷:
{% if ansible_distribution == "Ubuntu" and ansible_distribution_major_version|int > 16 %} resolvConf: /run/systemd/resolve/resolv.conf {% else %} resolvConf: /etc/resolv.conf {% endif %}
修改kubelet啟動檔案,再重新部署k8s,問題解決。
root@ubuntu1804:~# kubectl get pod -n kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE coredns-5757945748-mh8mp 1/1 Running 0 23h coredns-5757945748-p2scc 1/1 Running 0 23h coredns-5757945748-vfmkz 1/1 Running 0 23h
2.CoreDNS升級
在檢視CoreDNS Github的時候,獲取到CoreDNS從1.2.1版本開始新增的loop外掛用於防止迴環問題。
再檢視自己正在使用的CoreDNS版本,竟然還為1.1.3。
# kubectl -n kube-system logs -f coredns-8f9b4c9f5-9rvjq .:53 2021/06/03 06:20:28 [INFO] CoreDNS-1.1.3g
果斷升級CoreDNS版本,
到此CoreDNS問題全部解決。
3.參考文件
https://coredns.io/plugins/loop/#troubleshooting
https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-debugging-resolution/
https://github.com/coredns/coredns/tree/v1.2.1/plugin/loop
原文連結:https://www.cnblogs.com/yaohong/p/14845377.html