Kubernetes 中斷可能由 kube-dns 引起

Kubernetes 中斷可能由 kube-dns 引起

我們有一個生產 kubernetes 集群,該集群定期發生約 1-5 分鐘的中斷。我們正在嘗試排除故障,但遇到了各種資訊/知識差距,希望得到一些幫助。

我們所有的自訂程式碼和軟體都具有高可用性,並部署在至少 2 個副本中,並且它們的高可用性已經過負載測試。

Kubernetes 集群運行競價實例,當競價實例僅包含我們的 Pod 時,一切都會繼續順利運行,不會出現任何中斷。然而,我們注意到,當節點去包含kube-dns它時,我們確實傾向於 - 但並非總是 - 這些中斷。

我們在 GKE 上運行 1.25,因此限制使用kube-dns.我們每 3 個節點運行 1 個kube-dns副本(我們通常運行 9 個節點),已透過 configmap 指定至少 3 個kube-dns節點kube-dns-autoscaler。由於各種原因,我們也在運行 Istio 1.17.1,但是不是對於 mTLS。我們還有一個 PDB,kube-dns只允許 1 次中斷。

我們看到的是,我們的大多數服務將開始在相互請求中逾時(istio-proxy存取日誌往往會記錄504 UT錯誤),而某些服務實際上會記錄EAI_AGAIN錯誤,這表示 DNS 逾時。我們還運行了一個單獨的應用程序,它可以直接 ping 混合服務名稱以及服務的 IP 位址(開始這樣做是為了排除故障),我們可以看到,在EAI_AGAIN發生錯誤時, IP 位址ping 成功,但服務名稱請求未成功- 進一步表明kube-dns與該問題相關。

我們也針對有或沒有 sidecar 的 pod 檢查了這些服務與 IP ping istio-proxy,並且可以看到相同的行為,這意味著問題是不是由於istio

我們開始考慮做的唯一一件事就是實施,NodeLocal DNSCache以便所有節點都有 DNS 緩存,並且可能解決任何間歇性kube-dns問題。然而,我們不確定這是否有幫助,並擔心這會掩蓋更大的問題。

我們還可以看到相同的問題在我們的非生產環境中運行,但尚未能夠在任何地方重現此問題。它就這樣發生了。即使重新啟動/刪除節點似乎也不會導致這種情況發生。

我也無法提高日誌記錄級別,kube-dns因為 GKE 已鎖定部署資源並恢復日誌記錄級別...

我們希望就如何進一步排除故障和解決此問題提供一些建議。謝謝

相關內容