DNS は重要な Kubernetes インフラストラクチャサービスです。不適切なクライアント設定や大規模なクラスターにより、名前解決のタイムアウトや失敗が発生する可能性があります。これらのベストプラクティスを活用し、クライアントとサーバーの構成を最適化してください。
注意事項
マネージド CoreDNS、またはオートモードが有効な ACK クラスターには適用されません。マネージド CoreDNS はワークロードに応じて自動スケーリングされるため、手動調整は不要です。
目次
DNS のベストプラクティスは、クライアント側とサーバー側の両方を扱います:
-
クライアント側では、ドメイン名解決リクエストを最適化して解決レイテンシーを短縮します。適切なコンテナイメージ、適切なノードオペレーティングシステム、および NodeLocal DNSCache を使用して、解決の異常を最小限に抑えます。
-
CoreDNS サーバー側では、ランタイムステータスを監視して DNS の異常を検出し、根本原因を特定します。Deployment の設定を調整して、CoreDNS の高可用性と秒間クエリ数 (QPS) のスループットを向上させます。
「CoreDNS 公式ドキュメント」をご参照ください。
ドメイン名解決リクエストの最適化
DNS 解決は、Kubernetes で最も頻繁に行われるネットワークアクティビティの 1 つです。多くのリクエストは、最適化または回避できます:
-
(推奨) コネクションプールを使用します。コンテナ化されたアプリケーションが別のサービスに頻繁にアクセスする場合、アップストリーム接続をメモリにキャッシュして、各アクセスでの DNS 解決と TCP セットアップを回避します。
-
非同期またはロングポーリングを使用して、DNS ドメイン名の IP アドレスを取得します。
-
DNS キャッシュを使用します:
-
(推奨) アプリケーションがコネクションプールを使用できない場合は、アプリケーション側で DNS 解決の結果をキャッシュするか、NodeLocal DNSCache を使用します。
-
NodeLocal DNSCache が利用できない場合は、Name Service Cache Daemon (NSCD) を使用してコンテナ内で DNS クエリをキャッシュします。詳細については、「Kubernetes クラスターでの NSCD の使用」をご参照ください。
-
-
resolv.conf ファイルの最適化: ndots と search は、コンテナ設定でのドメイン名の記述方法に基づいて、名前解決の効率に影響します。ndots と search の詳細については、「DNS ポリシー設定とドメイン名の名前解決」をご参照ください。
-
ドメイン名設定を最適化して、解決の試行を最小限に抑え、解決時間を短縮します:
-
同一名前空間内のサービスにアクセスする場合、
<service-name>を使用します。service-nameはサービス名です。 -
名前空間をまたいだ Service アクセスには、
<service-name>.<namespace-name>を使用します。ここで、namespace-nameは Service の名前空間です。 -
外部ドメインには、完全修飾ドメイン名 (FQDN) を使用します。末尾にドット (.) を付加して絶対アドレスを指定し、不正な
searchドメインの連結を回避します。たとえば、www.aliyun.com の代わりに www.aliyun.com. を使用します。-
バージョン 1.31 以降のクラスターでは、
searchドメインを単一の "." に設定すると (詳細については、「125883」をご参照ください)、同様の効果が得られます:dnsPolicy: None dnsConfig: nameservers: ["192.168.0.10"] ## 192.168.0.10 を実際の CoreDNS サービスの clusterIP に置き換えます searches: - . - default.svc.cluster.local ## "default" をご自身の名前空間名に置き換えます - svc.cluster.local - cluster.localこの設定を適用すると、Pod 内の /etc/resolv.conf は次のようになります:
search . default.svc.cluster.local svc.cluster.local cluster.local nameserver 192.168.0.10最初の
searchドメインとして "." を指定すると、すべてのドメインリクエストが FQDN として扱われ、不要な検索試行なしで直接解決されます。重要この設定を有効にするには、
dnsPolicyをNoneに設定する必要があります。
-
-
コンテナにおける DNS 設定
-
DNS リゾルバーによって動作が異なる場合があります。
dig <domain>は成功するのにping <domain>は失敗する、といった状況が見られることがあります。 -
Alpine ベースイメージの使用は避けてください。 代わりに Debian や CentOS などの他のベースイメージを使用してください。 Alpine の musl libc は glibc とは異なり、次のような問題を引き起こす可能性があります。
-
Alpine 3.18 以前のバージョンでは、DNS クエリでの TCP へのフォールバックをサポートしていません。
-
Alpine 3.3 以前のバージョンでは、search パラメーターや search ドメインをサポートしていないため、サービスディスカバリーがブロックされます。
-
/etc/resolv.conf 内の複数の DNS サーバーへの同時クエリは、NodeLocal DNSCache の最適化を無効にする可能性があります。
-
同一ソケット上での A および AAAA の同時クエリは、古いカーネルで conntrack の送信元ポートの競合を引き起こし、パケット損失の原因となることがあります。
musl libc をご参照ください。
-
-
Go アプリケーションでは、CGO と Pure Go の DNS リゾルバー実装の違いを理解してください。
IPVS の欠陥による確率的な DNS 名前解決タイムアウトの回避
IPVS を kube-proxy の負荷分散モードとして使用すると、Linux カーネルの不具合により、CoreDNS のスケールインまたは再起動中に、断続的な DNS 名前解決のタイムアウトが発生する可能性があります。「IPVS」をご参照ください。
カーネルをアップグレードできない場合は、次のいずれかの方法を使用して IPVS の欠陥による影響を軽減できます:
-
NodeLocal DNSCache を使用します。
-
kube-proxy の IPVS UDP セッション維持タイムアウトを変更します。詳細については、「kube-proxy の IPVS UDP セッション維持タイムアウトを変更する方法」をご参照ください。
NodeLocal DNSCache の使用
一部のシナリオでは、CoreDNS で次のような問題が発生することがあります:
-
A および AAAA クエリの同時実行により、まれにパケット損失や DNS 名前解決の失敗が発生することがあります。
-
ノードの conntrack テーブルがいっぱいになると、パケット損失や DNS 名前解決の失敗が発生することがあります。
DNS の安定性とパフォーマンスを向上させるために、NodeLocal DNSCache アドオンをインストールしてください。このアドオンは、各ノードで DNS キャッシュを実行します。ACK クラスターへのデプロイについては、「NodeLocal DNSCache コンポーネントの使用」をご参照ください。
NodeLocal DNSCache をインストールしたら、DNS キャッシュ構成を Pod にインジェクトしてください。名前空間にラベルを付けると、新しい Pod に DNS キャッシュ構成が自動的にインジェクトされます:
kubectl label namespace default node-local-dns-injection=enabled
適切な CoreDNS バージョンの使用
CoreDNS は、Kubernetes のバージョン間で優れた下位互換性を維持しています。 CoreDNS は、最新の安定バージョンに保つことを推奨します。 Container Service for Kubernetes (ACK) コンソールの [コンポーネント管理] ページでは、インストール、アップグレード、設定の各機能を利用できます。 コンポーネントのステータスを監視し、アップデートが利用可能になった場合は、オフピーク時間中に CoreDNS をアップグレードしてください。
-
アップグレード手順については、「非マネージド CoreDNS の自動アップグレード」をご参照ください。
-
CoreDNS のリリースノートをご参照ください。
v1.7.0 より前の CoreDNS バージョンには、以下のような既知のリスクなどがあります。
-
API サーバーの再起動、移行、またはネットワークジッター中に CoreDNS と API サーバー間の接続性に障害が発生した場合、エラーログの書き込みに失敗するため、CoreDNS が再起動する可能性があります。 詳細については、「klog の logtostderr フラグの設定」をご参照ください。
-
CoreDNS は起動中に余分なメモリを消費します。 大規模なクラスターでは、デフォルトのメモリ制限が原因でメモリ不足 (OOM) が発生し、CoreDNS の Pod が回復しないまま繰り返し再起動することがあります。 詳細については、「CoreDNS は初期化フェーズで多くのメモリを使用する」をご参照ください。
-
CoreDNS には、Headless Service のドメインおよび外部ドメインの名前解決に影響を与える既知の問題があります。 詳細については、「plugin/kubernetes: デフォルトプロセッサーでトゥームストーンを処理する」および「長時間の切断後に CoreDNS が Kubernetes API サーバーに再接続した際にデータが同期されない」をご参照ください。
-
ノードが異常な場合、古い CoreDNS バージョンはデフォルトの Toleration ポリシーにより、異常なノードに Pod をデプロイする可能性があります。 これらの Pod は自動で退去されず、ドメインの名前解決に失敗する可能性があります。
推奨される最小 CoreDNS バージョンは、Kubernetes のクラスターバージョンによって異なります。
|
クラスターバージョン |
推奨される最小 CoreDNS バージョン |
|
1.14.8 未満 |
v1.6.2 (メンテナンス終了) |
|
1.14.8 以降、1.20.4 未満 |
v1.7.0.0-f59c03d-aliyun |
|
1.20.4 以降、1.21.0 未満 |
v1.8.4.1-3a376cc-aliyun |
|
1.21.0 以降 |
v1.11.3.2-f57ea7ed6-aliyun |
CoreDNS ランタイムステータスの監視
監視メトリクス
CoreDNS は、標準の Prometheus インターフェイスを介して名前解決の結果などのヘルスメトリクスを公開し、CoreDNS またはアップストリーム DNS サーバーの異常を検出するのに役立ちます。
Prometheus for ACK には、組み込みの CoreDNS 監視メトリクスとアラートルールが含まれています。Container Service for Kubernetes (ACK) コンソール で Prometheus とダッシュボードを有効にします。詳細については、「CoreDNS コンポーネントの監視」をご参照ください。
セルフマネージド Prometheus インスタンスでは、関連するメトリクスを監視し、重要なものについてはアラートを設定します。詳細については、「CoreDNS の Prometheus 公式ドキュメント」をご参照ください。
運用ログ
DNS の異常が発生した場合、CoreDNS ログを使用して根本原因を診断します。ドメイン解決ログと SLS ログ収集を有効にします。詳細については、「CoreDNS ログの分析と監視」をご参照ください。
Kubernetes イベント配信
CoreDNS v1.9.3.6-32932850-aliyun 以降では、k8s_event プラグインを有効にすると、重要な CoreDNS ログを Kubernetes イベントとしてイベントハブに配信できます。詳細については、「k8s_event プラグインのドキュメント」をご参照ください。
新しくデプロイされた CoreDNS インスタンスでは、この機能はデフォルトで有効になっています。古いバージョンからアップグレードする場合は、設定ファイルを手動で変更して有効にする必要があります。
-
CoreDNS の設定ファイルを開きます:
kubectl -n kube-system edit ConfigMap/coredns -
kubeAPIおよびk8s_eventプラグインを追加します。apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 15s } // 追加開始 (他の相違点は無視してください) kubeapi k8s_event { level info error warning // info、error、または warning レベルの重要なログを配信します } // 追加終了 kubernetes cluster.local in-addr.arpa ip6.arpa { pods verified fallthrough in-addr.arpa ip6.arpa } // 以下省略 } -
CoreDNS の Pod のステータスとログを確認します。ログに
reloadが含まれている場合、変更は成功です。
CoreDNS の高可用性の確保
CoreDNS はクラスターの権威 DNS です。CoreDNS の障害は、内部 Service へのアクセスとビジネスの大部分を中断させる可能性があります。これらの対策により、CoreDNS の高可用性を確保してください:
CoreDNS コンポーネントの負荷評価
DNS ストレステストを実行して、CoreDNS アドオンの負荷を評価してください。DNSPerf などのオープンソースツールが役立ちます。DNS の負荷を正確に評価できない場合は、次の推奨事項に従ってください:
-
少なくとも 2 つの CoreDNS Pod をデプロイし、それぞれに少なくとも 1 CPU コアと 1 GB のメモリのリソース制限を設定してください。
-
CoreDNS の QPS 容量は CPU 使用率と相関します。NodeLocal DNSCache を使用すると、各 CPU コアは 10,000 QPS 以上をサポートします。ビジネスワークロードの DNS QPS は大幅に異なります。CoreDNS Pod ごとのピーク時の CPU 使用率を監視し、ピーク時に使用率が 1 コアを超えた場合はレプリカをスケールアウトしてください。ピーク時の使用率が不明な場合は、保守的な対策として、クラスターノード 8 つにつき 1 つの CoreDNS Pod をデプロイしてください。
CoreDNS Pod 数の調整
CoreDNS Pod の数は、利用可能なコンピューティングリソースを直接決定します。評価に基づいて調整してください。
UDP には再送機能がないため、クラスターノードに IPVS UDP の欠陥が存在する場合、CoreDNS Pod のスケールインまたは再起動により、クラスター全体で最大 5 分間続く DNS 解決のタイムアウトが発生する可能性があります。IPVS 関連の解決策については、「DNS 解決の異常のトラブルシューティング」をご参照ください。
-
推奨ポリシーに基づいた Pod 数の自動調整
次の
dns-autoscalerをデプロイしてください。これは、クラスターノード 8 つにつき 1 Pod の比率で CoreDNS Pod 数をリアルタイムに調整します。レプリカ数:replicas = max(ceil(cores × 1/coresPerReplica), ceil(nodes × 1/nodesPerReplica))で、maxとminの制限を受けます。 -
手動調整
CoreDNS Pod 数を手動で調整してください:
kubectl scale --replicas={target} deployment/coredns -n kube-system # {target} を目的の Pod 数に置き換えます。 -
ワークロードの自動スケーリングを使用しない
Horizontal Pod Autoscaling (HPA) や CronHPA などのワークロード自動スケーリングメカニズムは、頻繁なスケーリング操作をトリガーします。Pod のスケールイン中の解決異常のため、CoreDNS Pod にはワークロードの自動スケーリングを使用しないでください。
CoreDNS Pod の仕様の調整
Pod の仕様を変更して、CoreDNS のリソースを調整してください。ACK managed clusters Pro では、CoreDNS Pod のデフォルトのメモリ制限は 2Gi で、CPU 制限はありません。CPU 制限を 4096m に設定し、最小値は 1024m とします。コンソールで CoreDNS Pod の設定を調整してください。
CoreDNS Pod のスケジューリング
スケジューリング設定が正しくないと、CoreDNS Pod のデプロイが妨げられ、CoreDNS が失敗する可能性があります。続行する前に、「スケジューリング」を完全に理解してください。
単一ノードまたは単一ゾーンの障害を回避するために、CoreDNS Pod をゾーンやノードに分散してデプロイしてください。v1.8.4.3 より前の CoreDNS バージョンでは、デフォルトで弱いノードアンチアフィニティが使用されるため、リソースが不足している場合にすべての Pod が同じノードに配置される可能性があります。Pod を削除して再スケジューリングをトリガーするか、最新のコンポーネントバージョンにアップグレードしてください。v1.8 より前の CoreDNS バージョンはサポートが終了しています。できるだけ早くアップグレードしてください。
CPU またはメモリ使用率がフルのノードに CoreDNS をデプロイすることは避けてください。これは DNS QPS と応答レイテンシに影響を及ぼします。カスタムパラメーターを使用して専用ノードに CoreDNS をスケジュールし、安定したドメイン名前解決を実現してください。
CoreDNS 設定の最適化
Container Service for Kubernetes (ACK) は、デフォルトの CoreDNS 設定のみを提供します。すべてのパラメーターを確認し、アプリケーションコンテナに合わせて最適化してください。CoreDNS の設定は非常に柔軟です。詳細については、「DNS ポリシー設定とドメイン名解決」および「CoreDNS 公式ドキュメント」をご参照ください。
古い Kubernetes バージョンのデフォルトの CoreDNS 設定には、リスクがある可能性があります。次のように確認し、最適化してください:
Container Intelligence Operations の定期的な検査と故障診断を使用して、CoreDNS の設定ファイルを確認してください。Container Intelligence Operations が CoreDNS の ConfigMap の異常を報告した場合は、上記の項目を確認してください。
CoreDNS は設定をリロードする際に余分なメモリを消費することがあります。設定項目を変更した後は、Pod のステータスを監視してください。Pod でメモリ不足が発生した場合は、CoreDNS の Deployment でメモリ制限を増やしてください。メモリを 2 GB に設定してください。
kube-dns Service のアフィニティ設定の無効化
アフィニティ設定は、CoreDNS レプリカ間で大幅な負荷の不均衡を引き起こす可能性があります。次のいずれかの方法を使用して無効にしてください:
コンソールでの方法
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
kube-system 名前空間で、kube-dns Service の右側にある YAML の編集 をクリックします。
-
sessionAffinity が
Noneの場合、残りの手順はスキップしてください。 -
sessionAffinity が
ClientIPの場合、残りの手順を続行してください。
-
-
sessionAffinity と sessionAffinityConfig フィールドおよびそのすべてのサブキーを削除し、その後、更新 をクリックしてください。
# 以下のすべての内容を削除します。 sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 -
kube-dns Service の YAML の編集 を再度クリックし、sessionAffinity が
Noneであることを確認してください。そうであれば、kube-dns Service の更新は成功です。
コマンドラインでの方法
-
kube-dns Service の設定を表示します:
kubectl -n kube-system get svc kube-dns -o yaml-
sessionAffinity が
Noneの場合、残りの手順はスキップしてください。 -
sessionAffinity が
ClientIPの場合、残りの手順を続行してください。
-
-
kube-dns Service を開いて編集します:
kubectl -n kube-system edit service kube-dns -
sessionAffinity 関連のすべての設定 (sessionAffinity、sessionAffinityConfig、およびすべてのサブキー) を削除し、変更を保存して終了してください。
# 以下のすべての内容を削除します。 sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 -
変更後、sessionAffinity が
Noneであることを確認してください。そうであれば、kube-dns Service の更新は成功です。kubectl -n kube-system get svc kube-dns -o yaml
Autopath プラグインの無効化
一部の古い CoreDNS バージョンでは Autopath プラグインが有効になっており、極端なシナリオで誤った名前解決の結果を生成する可能性があります。プラグインが有効になっているかどうかを確認し、設定ファイルを編集して無効にしてください。詳細については、「Autopath」をご参照ください。
Autopath プラグインを無効にすると、クライアント側の DNS クエリ QPS が最大 3 倍に増加し、単一ドメインの名前解決時間が最大 3 倍に増加する可能性があります。CoreDNS の負荷とビジネスへの影響を監視してください。
-
kubectl -n kube-system edit configmap corednsで CoreDNS の設定ファイルを開きます。 -
autopath @kubernetesの行を削除し、変更を保存してください。 -
CoreDNS の Pod のステータスとログを確認してください。ログに
reloadという単語が含まれている場合、変更は成功です。
CoreDNS のグレースフルシャットダウンの設定
CoreDNS の lameduck メカニズムにより、グレースフルシャットダウンが可能になります。CoreDNS が停止または再起動するとき、進行中のリクエストは突然中断されるのではなく、正常に完了します。lameduck メカニズムは次のように機能します:
-
CoreDNS が終了すると、Lameduck モードに入ります。
-
lameduckモードでは、CoreDNS は新しいリクエストの受け入れを停止しますが、既存のリクエストが完了するか、lameduckのタイムアウトが切れるまで処理を続行します。
コンソールでの方法
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
kube-system 名前空間で、coredns 設定項目の右側にあるYAML の編集をクリックします。
-
ヘルスプラグインを有効にし、次の設定に従って lameduck タイムアウトを
15sに設定します。その後、OK をクリックします。
.:53 {
errors
# health プラグインは、さまざまな CoreDNS バージョンで異なるデフォルト設定を持つ場合があります。
# ケース 1:health プラグインがデフォルトで無効になっている場合。
# ケース 2:health プラグインはデフォルトで有効になっているが、lameduck 時間が設定されていない場合。
# health
# ケース 3:health プラグインはデフォルトで有効になっており、lameduck 時間が 5s に設定されている場合。
# health {
# lameduck 5s
# }
# 3 つのケースすべてについて、以下のように一様に変更して lameduck を 15s に設定します。
health {
lameduck 15s
}
# 他のプラグインは変更しないでください。ここでは省略します。
}
CoreDNS の Pod が正常に実行されている場合、グレースフルシャットダウンの設定は更新されます。Pod が異常になった場合は、Pod イベントとログを確認して原因を特定してください。
コマンドラインでの方法
-
CoreDNS 設定ファイルを開きます:
-
次の Corefile に従って、
healthプラグインを有効にし、lameduck を15sに設定します: -
CoreDNS 設定ファイルを変更した後、保存して終了してください。
-
CoreDNS が正常に実行されている場合、グレースフルシャットダウンの設定は更新されます。Pod が異常になった場合は、Pod イベントとログを確認して原因を特定してください。
kubectl -n kube-system edit configmap/coredns
.:53 {
errors
# health プラグインは、さまざまな CoreDNS バージョンで異なるデフォルト設定を持つ場合があります。
# ケース 1:health プラグインがデフォルトで無効になっている場合。
# ケース 2:health プラグインはデフォルトで有効になっているが、lameduck 時間が設定されていない場合。
# health
# ケース 3:health プラグインはデフォルトで有効になっており、lameduck 時間が 5s に設定されている場合。
# health {
# lameduck 5s
# }
# 3 つのケースすべてについて、以下のように一様に変更して lameduck を 15s に設定します。
health {
lameduck 15s
}
# 他のプラグインは変更しないでください。ここでは省略します。
}
アップストリーム VPC DNS サーバーと通信するための Forward プラグインのデフォルトプロトコルの設定
NodeLocal DNSCache は TCP を使用して CoreDNS と通信します。CoreDNS は、アップストリーム DNS サーバーと通信する際に、受信リクエストと同じプロトコルを使用します。デフォルトでは、アプリケーションコンテナからの外部ドメイン解決リクエストは、NodeLocal DNSCache と CoreDNS を経由し、TCP 経由で VPC DNS サーバー (100.100.2.136 および 100.100.2.138) に到達します。
VPC DNS サーバーは、TCP サポートに制限があります。NodeLocal DNSCache では、CoreDNS 設定を変更してアップストリーム DNS 通信で UDP を優先し、名前解決の異常を回避します。coredns ConfigMap を kube-system 名前空間で変更します。詳細については、「ConfigMap の管理」をご参照ください。forward プラグインで、アップストリームプロトコルとして prefer_udp を指定します。この変更後、CoreDNS はアップストリーム通信に UDP を優先して使用します:
# 変更前
forward . /etc/resolv.conf
# 変更後
forward . /etc/resolv.conf {
prefer_udp
}
readiness プローブ用の ready プラグインの設定
CoreDNS バージョン 1.5.0 以降では、readiness プローブを有効にするために ready プラグインが必要です。
-
CoreDNS 設定ファイルを開きます:
kubectl -n kube-system edit configmap/coredns -
readyの行を確認してください。見つからない場合はreadyを追加してください。Esc を押し、:wq!と入力してから Enter を押して、変更を保存して終了してください。apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 15s } ready # 見つからない場合はこの行を追加し、Kubernetes とのインデントを一致させてください。 kubernetes cluster.local in-addr.arpa ip6.arpa { pods verified fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 prefer_udp } cache 30 loop log reload loadbalance } -
CoreDNS の Pod のステータスとログを確認してください。ログに
reloadという単語が含まれている場合、変更は成功です。
CoreDNS の名前解決パフォーマンスを向上させるための multisocket プラグインの設定
CoreDNS v1.12.1 では multisocket プラグインが導入されました。有効にすると、CoreDNS は複数のソケットを使用して同じポートでリッスンし、CPU 使用率が高いシナリオでのパフォーマンスを向上させることができます。詳細については、「コミュニティのドキュメント」をご参照ください。
coredns ConfigMap で multisocket を有効にしてください:
.:53 {
...
prometheus :9153
multisocket [NUM_SOCKETS]
forward . /etc/resolv.conf
...
}
NUM_SOCKETS は、同じポートでリッスンするソケットの数を指定します。
NUM_SOCKETS を、推定 CPU 使用率、CPU リソース制限、および利用可能なクラスターリソースに合わせて調整してください。例:
-
CoreDNS がピーク時に 4 コアを消費し、8 コアが利用可能な場合、
NUM_SOCKETSを 2 に設定してください。 -
CoreDNS がピーク時に 8 コアを消費し、64 コアが利用可能な場合、
NUM_SOCKETSを 8 に設定してください。
さまざまな設定をテストし、QPS と負荷を測定して最適な設定を決定してください。
NUM_SOCKETS を指定しない場合、CoreDNS はデフォルトで GOMAXPROCS を使用します。これは、CoreDNS Pod の CPU 制限、または制限が設定されていない場合はノードの CPU コア数と同じです。