【K8s任務】使用 CoreDNS 進行服務發現


參考:https://kubernetes.io/zh/docs/tasks/administer-cluster/coredns/

關於 CoreDNS

CoreDNS 是一個靈活可擴展的 DNS 服務器,可以作為 Kubernetes 集群 DNS。 與 Kubernetes 一樣,CoreDNS 項目由 CNCF 托管。

通過在現有的集群中替換 kube-dns,可以在集群中使用 CoreDNS 代替 kube-dns 部署, 或者使用 kubeadm 等工具來為你部署和升級集群。

升級 CoreDNS

從 v1.9 起,Kubernetes 提供了 CoreDNS。 你可以在此處(https://github.com/coredns/deployment/blob/master/kubernetes/CoreDNS-k8s_version.md) 查看 Kubernetes 隨附的 CoreDNS 版本以及對 CoreDNS 所做的更改。

如果你只想升級 CoreDNS 或使用自己的自定義鏡像,則可以手動升級 CoreDNS。 參看指南和演練(https://github.com/coredns/deployment/blob/master/kubernetes/Upgrading_CoreDNS.md) 文檔了解如何平滑升級。

升級 Kubernetes 集群時,在升級 CoreDNS 組件時應該注意一些問題,以避免向后不兼容的配置失敗。 在較高級別,您需要查看 CoreDNS 發行說明以查看新版本是否引入了向后不兼容或棄用,並在升級 CoreDNS 之前根據需要調整您的 Corefile。

要確定可能的向后不兼容,您需要查看 CoreDNS 發行說明。 CoreDNS 發行說明位於 CoreDNS 博客中 。 CoreDNS 棄用政策是這樣的,我們只會在 xx0 和 xx1 版本中引入向后不兼容。 因此,例如,如果您要從 1.1.5 升級到 1.3.1,您應該查看 1.2.0、1.2.1、1.3.0 和 1.3.1 的發行說明以了解任何棄用/向后不兼容通知。

如果您發現任何向后不兼容的通知,您應該檢查您的 Corefile 以查看您是否受到影響。

手動升級 CoreDNS

    1.在升級之前識別並解決您的 Corefile 中與新 CoreDNS 版本向后不兼容的任何配置。
    2.如果您想降低 CoreDNS 停機的風險,請確保您的 CoreDNS 部署設置為處理滾動更新。 它應該有 > 1 個副本、一個 RollingUpdate 策略和一個指向 healthCoreDNS 中的插件。 例如……

        readinessProbe:
          httpGet:
            path: /health
            port: 8080

    3.更新部署中的 CoreDNS 版本。 此步驟可與步驟 2 同時完成。
    4.使用第 2 步和第 3 步更新 Deployment 后,監控 Pod 狀態
        kubectl -n kube-system get pods
    5.如果您看到 Pod 崩潰,請查看日志以查看任何錯誤,然后在必要時調整配置或回滾。
        kubectl -n kube-system logs

使用 Kubeadm 升級 CoreDNS

作為 Kubernetes 集群升級的一部分,Kubeadm 將為您更新 CoreDNS。 這樣做時,它將替換/重置對 CoreDNS 部署的任何自定義更改。 例如,如果您增加了部署中的副本數量,升級后將重置為默認值 (2)。 但是,Kubeadm 不會更改您的 CoreDNS 配置映射。 如果您的 CoreDNS Corefile 包含任何向后不兼容的配置,您需要在更新之前手動修復它們。

CoreDNS 調優

當資源利用方面有問題時,優化 CoreDNS 的配置可能是有用的。 有關詳細信息,請參閱有關擴縮 CoreDNS 的文檔(https://github.com/coredns/deployment/blob/master/kubernetes/Scaling_CoreDNS.md)。

在大型 Kubernetes 集群中,CoreDNS 的內存使用主要受集群中 Pod 和服務數量的影響。 其他因素包括填充的 DNS 應答緩存的大小,以及每個 CoreDNS 實例的接收查詢率 (QPS)。

使用默認 CoreDNS 設置

要估計 CoreDNS 實例所需的內存量(使用默認設置),您可以使用以下公式:

需要 MB(默認設置)=(Pods + 服務)/ 1000 + 54

該公式包含以下內容:

  • 30 MB 用於緩存。 默認緩存大小為 10000 個條目,完全填滿時使用大約 30 MB。
  • 5 MB 操作緩沖區,用於處理查詢。 在測試中,這是單個 CoreDNS 副本在 ~30K QPS 負載下使用的數量。

使用 autopath 插件

自動 路徑 是一種可選優化,可提高集群外部名稱查詢的性能(例如 infoblox.com)。 但是,啟用自動 路徑 插件需要 CoreDNS 使用更多的內存來存儲有關 Pod 的信息。 啟用自動 路徑 插件也會給 Kubernetes API 帶來額外的負載,因為它必須監控對 Pod 的所有更改。

要估計 CoreDNS 實例所需的內存量(使用 autopath 插件),您可以使用以下公式:

需要 MB(帶自動路徑)=(Pods + 服務)/ 250 + 56

該公式包含以下內容:

  • 30 MB 用於緩存。 默認緩存大小為 10000 個條目,完全填滿時使用大約 30 MB。
  • 5 MB 操作緩沖區,用於處理查詢。 在測試中,這是單個 CoreDNS 副本在 ~30K QPS 負載下使用的數量。

您可以使用上面的公式來估計集群中 CoreDNS 所需的內存量,並相應地調整 CoreDNS 部署中的資源內存請求/限制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM