為了提升ACK叢集內網域名稱解析服務的穩定性,建議您升級叢集的CoreDNS至最新版本。本文介紹如何升級CoreDNS的版本。
背景資訊
低於1.7.0版本的CoreDNS存在以下問題,可能會影響ACK叢集內網域名稱解析服務的穩定性:
- CoreDNS與APIServer連通性異常(例如APIServer重啟、APIServer遷移、網路抖動)時,CoreDNS會因錯誤記錄檔寫入失敗導致容器重啟。更多資訊,請參見Set klog's logtostderr flag。
- CoreDNS啟動時會佔用額外記憶體,預設採用的Memory Limit在較大規模叢集下可能觸發OOM(OutOfMemory)問題,嚴重時可能導致CoreDNS Pod反覆重啟無法自動回復。更多資訊,請參見CoreDNS uses a lot memory during initialization phase。
- CoreDNS存在若干可能影響Headless Service網域名稱、叢集外部網域名稱解析的問題。更多資訊,請參見plugin/kubernetes: handle tombstones in default processor和Data is not synced when CoreDNS reconnects to kubernetes api server after protracted disconnection。
- 在叢集節點異常情況下,部分舊版本CoreDNS預設採用的容忍策略可能會導致CoreDNS Pod無法被驅逐,繼而導致網域名稱解析異常。
- 關於升級流程的具體說明和業務影響,請參見升級方式。
升級方式
升級CoreDNS前,請仔細閱讀Core DNS變更記錄和Core DNS社區介紹,瞭解不同版本間的差異和注意事項。
CoreDNS支援兩種方式升級:自動升級和手動升級,具體的使用情境如下:
- 自動升級CoreDNS:如果您在ACK控制台的組件管理頁面CoreDNS組件上可以看到升級按鈕,說明該版本的CoreDNS組件支援自動升級。具體操作,請參見CoreDNS自動升級。
- 手動升級CoreDNS:如果您在ACK控制台的組件管理頁面CoreDNS組件上無法看到升級按鈕,且當前組件版本較低,說明您的Kubernetes叢集版本過低,已不再維護。由於過低版本的Kubernetes叢集不支援升級到最新的CoreDNS,針對這種情況,您需要手動升級CoreDNS至1.6.2版本後,再升級Kubernetes叢集版本,然後按照自動升級方案將CoreDNS升級到最新版本。關於手動升級的具體操作,請參見CoreDNS手動升級。