Ubuntu1804下k8s-CoreDNS佔CPU高問題排查

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章