クラスタDNS:CoreDNS vs Kube-DNS

CoreDNSとKube-DNSのリソース要件の比較

数週間前、CoreDNSのリソースデプロイメントガイドのデータをまとめる際に、同じテスト環境を使用してkube-dnsのデータも収集しました。CoreDNSとKube-dnsは最終的には同じタスクを実行しますが、実装にはいくつかの重要な違いがあり、リソース消費とパフォーマンスに影響します。概要としては、これらの違いには次のようなものがあります。

  • CoreDNSはインスタンスごとに1つのコンテナですが、kube-dnsは3つのコンテナを使用します。
  • Kube-dnsはキャッシングにdnsmasqを使用します。これはシングルスレッドのC言語で記述されています。CoreDNSはマルチスレッドのGo言語で記述されています。
  • CoreDNSはデフォルトのデプロイメントでネガティブキャッシングを有効にします。Kube-dnsは有効にしません。

これらの違いは、さまざまな形でパフォーマンスに影響します。 kube-dnsでは、インスタンスあたりのコンテナ数が多いほど、基本メモリ要件が増加し、パフォーマンスのオーバーヘッドも増加します(リクエスト/レスポンスをコンテナ間でやり取りする必要があるため)。 kube-dnsの場合、dnsmasqはC言語で高度に最適化されている可能性がありますが、シングルスレッドであるため、インスタンスごとに1つのコアしか使用できません。 CoreDNSはネガティブキャッシングを有効にしており、外部名検索の処理に役立ちます。

メモリ

CoreDNSとkube-dnsはどちらも、クラスター内のすべてのサービスとエンドポイントのローカルキャッシュを保持します。そのため、サービスとエンドポイントの数が増加するにつれて、各DNS Podのメモリ要件も増加します。デフォルト設定では、CoreDNSはkube-dnsよりも少ないメモリを使用することが想定されます。これは、kube-dnsで使用される3つのコンテナのオーバーヘッドに対して、CoreDNSでは1つのコンテナのみであることが原因の一部です。

以下のチャートは、サービスとエンドポイントの数に基づいて、CoreDNSまたはKube-dnsの単一インスタンスを実行するために必要な推定メモリを示しています。

CoreDNS vs Kube-DNS estimated memory at scale

上記のデータソースは、Kubernetesのe2eスケールテストと、小規模クラスターのQPS負荷テストを組み合わせたものです。 Kubernetesのe2eスケールテストは、非常に大規模なクラスターでテストを提供しますが、QPS負荷は適用しません。 QPS負荷を処理する際に必要な追加メモリを考慮するために、チャートには、CPUテスト(下記)中に最大QPS負荷を適用したときに観測されたメモリの差分が追加されています。これはkube-dnsで約58Mi、CoreDNSで約5Miでした。

CPU

CPUパフォーマンスの面では、CoreDNSは外部名(例: `infoblox.com`)の方がはるかに優れており、内部名(例: `kubernetes`)の方がわずかに劣っています。

DNSサーバー クエリタイプ QPS 平均レイテンシ(ms)
CoreDNS 外部 6733 12.02
CoreDNS 内部 33669 2.608
Kube-dns 外部 2227 41.585
Kube-dns 内部 36648 2.639

要点

  • Kube-dnsは内部名で約10%優れたパフォーマンスを発揮しました。これはおそらく、dnsmasqがCoreDNSの組み込みキャッシングよりも最適化されているためです。
  • CoreDNSは外部名で約3倍優れたパフォーマンスを発揮しました。これは、kube-dnsのデプロイメントではネガティブレスポンスがキャッシュされないことが原因の一部です。ただし、kube-dnsデプロイメントでネガティブキャッシュを有効にしても結果は大きく変わらなかったため、パフォーマンスの大幅な向上は他の場所にあります。
DNSサーバー クエリタイプ QPS 平均レイテンシ(ms)
Kube-dns + ネガティブキャッシュ 外部 2552 36.665
Kube-dns + ネガティブキャッシュ 内部 28971 3.385

詳細

これらのテストで使用されたkube-dnsのバージョンとデフォルト設定は、Kubernetes 1.12でリリースされたものです。

テスト環境の詳細については、[KubernetesクラスターでのCoreDNSのスケーリング](https://github.com/coredns/deployment/blob/master/kubernetes/Scaling_CoreDNS.md))を参照してください。

Chris O'Haver
公開日: タグ: デプロイメント, ディスカバリ, DNS, ドキュメント, Kubernetes and サービス 単語数: 503語.