DNS は Kubernetes クラスターにおける重要なサービスです。クライアントの不適切な構成や大規模なクラスターなど、特定の条件下では、DNS の名前解決でタイムアウトや失敗が発生する可能性があります。このガイドでは、これらの問題を回避するためのベストプラクティスを説明します。
このトピックは、CoreDNS のマネージド版がインストールされているか、自動モードが有効になっている Container Service for Kubernetes (ACK) クラスターには適用されません。これらのクラスターは、手動での調整なしに負荷に基づいて自動的にスケーリングされます。
目次
DNS のベストプラクティスは、クライアントサイドとサーバーサイドの両方の最適化を対象としています:
クライアントサイド:DNS リクエストを最適化することで名前解決のレイテンシーを短縮し、適切なコンテナイメージ、ノードオペレーティングシステム、および NodeLocal DNSCache を使用して名前解決の失敗を最小限に抑えることができます。
サーバーサイド:CoreDNS の実行ステータスを監視することで、DNS の例外を特定し、その根本原因を迅速に突き止めることができます。デプロイメント構成を調整することで、CoreDNS の高可用性と秒間クエリ数 (QPS) のスループットを向上させることができます。
CoreDNS の詳細については、CoreDNS 公式ドキュメントをご参照ください。
DNS 名前解決リクエストの最適化
DNS 名前解決は、Kubernetes クラスターで最も頻繁に行われるネットワーク操作の 1 つです。多くの名前解決リクエストは、レイテンシーと DNS インフラストラクチャへの負荷を軽減するために最適化または回避できます:
(推奨) 接続プールの使用:コンテナ化されたアプリケーションが同じサービスに頻繁にリクエストする場合、接続プールを使用してアップストリームサービスへのアクティブな接続をメモリにキャッシュします。これにより、各リクエストでの DNS 名前解決と TCP ハンドシェイクのオーバーヘッドがなくなります。
非同期またはロングポーリングモードを使用して、ドメイン名に関連付けられた IP を取得します。
DNS キャッシュの使用:
(推奨) アプリケーションをリファクタリングして接続プールを使用できない場合は、アプリケーション側で DNS 名前解決の結果をキャッシュすることを検討してください。手順については、「NodeLocal DNSCache による安定性の向上」をご参照ください。
NodeLocal DNSCache を使用できない場合は、コンテナ内の組み込み Name Service Cache Daemon (NSCD) を使用してください。
resolv.conf ファイルの最適化:ndots および search パラメーターが名前解決の効率を決定します。詳細については、「DNS ポリシーの構成とドメイン名の名前解決」をご参照ください。
ドメイン構成の最適化:以下の原則に従ってドメイン名を設定し、名前解決の試行回数を最小限に抑え、レイテンシーを短縮します:
Pod が同じ名前空間内のサービスにアクセスする場合、
<service-name>を使用します。Pod が異なる名前空間内のサービスにアクセスする場合、
<service-name>.<namespace-name>を使用します。Pod がクラスター外のドメインにアクセスする場合、末尾にピリオド (.) を追加して完全修飾ドメイン名 (FQDN) を使用します。これにより、リゾルバーは名前を絶対名として扱い、内部クラスタードメインを通じた無効な検索をスキップします。たとえば、www.aliyun.com の代わりに www.aliyun.com. を使用します。
Kubernetes 1.33 以降を実行しているクラスターでは、
searchドメインを単一のピリオド (.) に設定します (「Issue 125883」をご参照ください)。これにより、すべての DNS リクエストが事実上 FQDN リクエストとなり、不要な検索ドメインの反復が防止されます。dnsConfigの設定例:dnsPolicy: None dnsConfig: nameservers: ["192.168.0.10"] ## ご利用の CoreDNS サービスの実際の ClusterIP に置き換えてください。 searches: - . - default.svc.cluster.local ## 'default' を実際の名前空間に置き換えてください。 - svc.cluster.local - cluster.local結果として生成される
/etc/resolv.conf:search . default.svc.cluster.local svc.cluster.local cluster.local nameserver 192.168.0.10.を最初の検索ドメインとして使用すると、システムはリクエストを即座に FQDN として認識し、自己解決を優先して無効な再帰検索を排除します。重要上記の設定を有効にするには、
dnsPolicyをNoneに設定する必要があります。
コンテナ内の DNS 構成に関する注意事項
DNS リゾルバーが異なると、その基盤となる実装により、動作に微妙な違いが生じることがあります。
dig <domain>は成功するのにping <domain>は失敗するケースに遭遇する可能性があります。Alpine イメージの回避:Alpine Linux の代わりに、Debian や CentOS などのベースイメージを使用することを強く推奨します。Alpine で使用されている
musl libcライブラリは、標準のglibcと比べていくつかの実装上の違いがあり、以下のような問題を引き起こします:TCP フォールバック: Alpine v3.18 以前は、切り捨て (TC) ビットによる TCP へのフォールバックをサポートしていません。
検索ドメイン: Alpine v3.3 以前は search パラメーターをサポートしていないため、クラスター内のサービスディスカバリが機能しません。
最適化の競合: Alpine は
/etc/resolv.confにリストされているすべての DNS サーバーに同時にリクエストを送信するため、NodeLocal DNSCache の最適化をバイパスし、無効にする可能性があります。Conntrack の競合状態: 同じソケットを使用して A レコードと AAAA レコードを同時にリクエストすると、古い Linux カーネルでソースポートの競合が発生し、パケット損失や名前解決のタイムアウトを引き起こす可能性があります。
その他の問題については、musl libc ドキュメントをご参照ください。
Go アプリケーションを使用する場合、
CGOとPure Goの DNS リゾルバーの違いに注意してください。
IPVS モードにおける断続的な DNS タイムアウトの緩和策
ACK クラスターが kube-proxy の負荷分散モードとして IPVS を使用している場合、CoreDNS Pod のスケーリングまたは再起動中に、断続的な DNS 名前解決のタイムアウトが発生することがあります。これは、既知の Linux カーネルの不具合が原因です。「IPVS commit」をご参照ください。
この IPVS の欠陥による影響を緩和するには、以下のいずれかの方法を使用します:
NodeLocal DNSCache による安定性の向上
CoreDNS は、時折以下の問題に遭遇することがあります:
A レコードと AAAA レコードの同時クエリによる稀なパケット損失が、DNS の失敗につながる。
ノードの
conntrackテーブルが満杯になり、パケット損失と DNS の失敗を引き起こす。
DNS の安定性とパフォーマンスを向上させるには、NodeLocal DNSCache をインストールします。このアドオンは、各クラスターノードで DNS キャッシュを実行し、DNS トラフィックをローカルで処理します。
NodeLocal DNSCache をインストールした後、ワークロードに対してインジェクションを有効にする必要があります。次のコマンドを実行して名前空間にラベルを付けます。この名前空間で作成された新しい Pod は、自動的に DNS キャッシュ構成を使用します。
kubectl label namespace default node-local-dns-injection=enabled詳細な手順とその他のインジェクション方法については、「NodeLocal DNSCache の使用」をご参照ください。
CoreDNS バージョンのメンテナンス
CoreDNS は Kubernetes との強力な下位互換性を維持しています。しかし、CoreDNS を安定したバージョンに更新し続けることが重要です。[アドオン] ページから CoreDNS を管理、アップグレード、構成します。
ACK コンソールで CoreDNS の利用可能なアップグレードが表示された場合は、オフピーク時にできるだけ早くアップグレードを計画してください。
アップグレード手順については、「非マネージド CoreDNS の自動アップグレード」をご参照ください。
CoreDNS のリリースノートについては、「CoreDNS」をご参照ください。
1.7.0 未満の CoreDNS バージョンのリスク
ロギングによるクラッシュ: API サーバーへの接続が中断された場合 (API サーバーの再起動、移行、ネットワークジッターなど)、CoreDNS はエラーログの書き込みに失敗するため再起動します。「Set klog's logtostderr flag」をご参照ください。
OOM の問題: CoreDNS は起動時に余分なメモリを消費します。デフォルトのメモリ制限では、大規模クラスターでメモリ不足 (OOM) の問題が発生する可能性があります。深刻な場合、再起動ループに陥ることがあります。「CoreDNS uses a lot of memory during initialization phase」をご参照ください。
同期の失敗: CoreDNS には、ヘッドレスサービスのドメイン名や外部ドメイン名の名前解決に影響を与える可能性のあるいくつかの問題があります。詳細については、「plugin/kubernetes: handle tombstones in default processor」および「Data is not synced when CoreDNS reconnects to kubernetes api server after protracted disconnection」をご参照ください。
クラスターノードが異常になった場合、一部の古い CoreDNS バージョンのデフォルトの Toleration ポリシーにより、CoreDNS Pod が異常なノードにスケジュールされることがあります。これらの Pod は自動的に退避できず、ドメイン名の名前解決が異常になる原因となります。
推奨される最小 CoreDNS バージョン
クラスターバージョン | 推奨される最小 CoreDNS バージョン |
1.14.8 未満 | 1.6.2 (サポート終了) |
1.14.8 から 1.20.4 | 1.7.0.0-f59c03d-aliyun |
1.20.4 から 1.21.0 | 1.8.4.1-3a376cc-aliyun |
1.21.0 以上 | 1.11.3.2-f57ea7ed6-aliyun |
CoreDNS の実行ステータスの監視
メトリックとダッシュボード
CoreDNS は、CoreDNS およびアップストリーム DNS サーバーの例外を検出するために、標準の Prometheus インターフェイスを通じてヘルスおよびパフォーマンスメトリックを公開します。
ACK マネージドクラスター:Managed Service for Prometheus は、CoreDNS 用の組み込みメトリック監視ダッシュボードとアラートルールを提供します。ACK コンソールで Prometheus とダッシュボード機能を有効にできます。「CoreDNS コンポーネントの監視」をご参照ください。
セルフマネージド Prometheus:CoreDNS メトリックをスクレイピングし、重要な指標に対するアラートを設定します。「CoreDNS Prometheus 公式ドキュメント」をご参照ください。
ログ分析
DNS の例外が発生した場合、CoreDNS のログは根本原因の診断に不可欠です。DNS 名前解決のロギングと Simple Log Service (SLS) の収集を有効にすることを推奨します。詳細については、「CoreDNS ログの分析と監視」をご参照ください。
Kubernetes イベントの配信
CoreDNS v1.9.3.6-32932850-aliyun 以降では、k8s_event プラグインを使用して、重要なログを Kubernetes イベントとしてイベントセンターに送信できます。「k8s_event」をご参照ください。
新しくデプロイされた CoreDNS は、デフォルトでこの機能を有効にします。以前のバージョンから v1.9.3.6-32932850-aliyun 以降にアップグレードする場合は、手動で構成ファイルを変更して有効にする必要があります。
CoreDNS の ConfigMap を編集します。
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 を監視し、高可用性 (HA) 戦略を実装する方法について説明します。
CoreDNS の負荷評価
DNSPerf などのオープンソースツールを使用して、DNS パフォーマンスをベンチマークします。カスタマイズされた評価を実行できない場合は、以下のベースライン推奨事項に従ってください:
最小レプリカ数:冗長性のために、常に少なくとも 2 つの Pod を維持します。
リソース制限:Pod ごとに少なくとも 1 CPU コアと 1 GiB メモリ のリソース制限を設定します。
パフォーマンスのスケーリング:CoreDNS のパフォーマンスは CPU と線形にスケーリングします。NodeLocal DNSCache が有効な場合、1 つの CPU コアで通常 10,000 QPS 以上を処理できます。
レプリカ比率:ピーク時の CPU 使用量を監視できない場合は、保守的な 1:8 の Pod 対ノード比率 を使用します (クラスターノード 8 つごとに CoreDNS Pod を 1 つ追加します)。
CoreDNS Pod のスケーリング
CoreDNS Pod の数は、利用可能なコンピューティングリソースを決定します。評価結果に基づいて Pod 数を調整します。
UDP には再送機能がないため、IPVS UDP のバグがクラスターノードでパケット損失のリスクを引き起こす場合、CoreDNS Pod のスケールインまたは再起動により、クラスター全体で最大 5 分間の DNS タイムアウトが発生する可能性があります。緩和策については、「DNS 名前解決エラーのトラブルシューティング」をご参照ください。
推奨ポリシーに基づく自動スケーリング
dns-autoscalerをデプロイして、推奨ポリシー (クラスターノード 8 つごとに Pod 1 つ) に基づいて CoreDNS のレプリカを自動的に調整します。式:
replicas = max(ceil(cores × 1/coresPerReplica), ceil(nodes × 1/nodesPerReplica))これにより、クラスターが成長しても 1:8 の比率が維持されます。
手動調整
次のコマンドを実行して、CoreDNS Pod の数を手動で調整します:
kubectl scale --replicas={target} deployment/coredns -n kube-system # {target} を目的の Pod 数に置き換えますHPA または CronHPA を使用しない
ワークロードの自動スケーリングメカニズム (HPA や CronHPA など) は Pod 数を自動的に調整できますが、頻繁なスケーリング操作を実行します。Pod のスケールインによって引き起こされる名前解決の例外 (前述の IPVS UDP の問題) のため、ワークロードの自動スケーリングを使用して CoreDNS の Pod 数を制御しないでください。
CoreDNS Pod 仕様の最適化
CoreDNS のリソースを調整するもう 1 つの方法は、Pod の仕様を変更することです。ACK マネージド Pro 版クラスターでは、CoreDNS Pod のデフォルトのメモリ制限は 2 GiB で、CPU 制限はありません。一貫したパフォーマンスを確保するために、CPU 制限を 4096m (最小 1024m) に設定します。これらのリソースリクエストと制限はコンソールで調整できます。
CoreDNS Pod のスケジューリング
適切なスケジューリングと構成は、CoreDNS の安定性にとって非常に重要です。不適切な設定は DNS 名前解決の失敗につながり、クラスター全体のサービス停止を引き起こす可能性があります。この操作を実行する前に、スケジューリングの仕組みをよく理解していることを確認してください。
推奨構成
マルチゾーンデプロイメント:単一障害点を防ぐために、CoreDNS レプリカを常に異なるアベイラビリティゾーンとノードにデプロイします。
アンチアフィニティ:1.8.4.3 より前の CoreDNS バージョンは、デフォルトで「優先」(ソフト) ノードアンチアフィニティを使用します。ノードリソースが不足している場合、複数の Pod が同じノードにスケジュールされる可能性があります。この場合、アドオンをアップグレードするか、手動で Pod を削除して再スケジュールをトリガーします。
ライフサイクル管理:1.8 未満の CoreDNS バージョンはサポート終了 (EOL) です。できるだけ早く最新バージョンにアップグレードしてください。
リソース枯渇の回避:CoreDNS を実行しているノードが飽和状態 (CPU/メモリ使用量が高い) にならないようにしてください。このような飽和状態は DNS クエリのレイテンシーと QPS に直接影響します。
専用ノード: 大規模クラスターでは、最大限の安定性を確保するため、カスタムスケジューリングパラメーター (
tolerations/nodeAffinity) を使用して専用ノードで CoreDNS をホストすることを検討してください。
CoreDNS 構成の最適化
ACK はデフォルトの CoreDNS 構成を提供します。ただし、ビジネス要件に基づいてこれらのパラメーターを調整する必要があります。CoreDNS の構成は非常に柔軟です。詳細については、「DNS ポリシーとドメイン名の名前解決」および「CoreDNS 公式ドキュメント」をご参照ください。
レガシーバージョンの推奨最適化
古いクラスターを実行している場合は、以下のリスクを確認してください:
または、コンテナインテリジェンスサービスの検査および診断機能を使用して CoreDNS 構成ファイルを確認します。検査で CoreDNS ConfigMap が異常であると示された場合は、上記の項目を確認してください。
CoreDNS は構成をリフレッシュする際に余分なメモリを消費する可能性があります。CoreDNS の設定を変更した後、Pod のステータスを監視してください。構成変更後に Pod が OOM で強制終了される場合は、CoreDNS デプロイメントのメモリ制限を増やしてください (推奨:2 GiB)。
kube-dns サービスのアフィニティ構成の無効化
アフィニティ構成は、CoreDNS レプリカ間で大幅な負荷の不均衡を引き起こす可能性があります。以下の手順に従って無効にしてください:
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
名前空間
kube-systemで、kube-dns サービスの [YAML を編集] をクリックします。sessionAffinity フィールドの値が
Noneの場合、以下の手順を実行する必要はありません。sessionAffinity フィールドの値が
ClientIPの場合、以下の手順を実行します。
sessionAffinity と sessionAffinityConfig フィールドおよびそのすべてのサブキーを削除します。その後、[OK] をクリックします。
# 以下を削除 sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800[kube-dns] サービスの右側にある [YAML の編集] を再度クリックし、sessionAffinity フィールドが
Noneであることを確認します。そうであれば、kube-dnsサービスは変更されています。
CLI
次のコマンドを実行して、
kube-dnsサービスの構成を表示します。kubectl -n kube-system get svc kube-dns -o yamlsessionAffinity フィールドの値が
Noneの場合、以下の手順を実行する必要はありません。sessionAffinity フィールドの値が
ClientIPの場合、以下の手順を実行します。
次のコマンドを実行して、
kube-dnsサービスを開いて編集します。kubectl -n kube-system edit service kube-dnssessionAffinity 関連の設定 (sessionAffinity、sessionAffinityConfig、およびそのすべてのサブキー) を削除し、保存して終了します。
# 以下を削除 sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800変更後、再度次のコマンドを実行して、sessionAffinity フィールドの値が
Noneであることを確認します。そうであれば、kube-dnsサービスは更新されています。kubectl -n kube-system get svc kube-dns -o yaml
autopath プラグインの無効化
一部の初期の CoreDNS バージョンでは autopath プラグインが有効になっており、特定のまれなケースで名前解決エラーを引き起こす可能性があります。有効になっているかどうかを確認し、構成ファイルを編集して無効にします。詳細については、「Autopath issue #3765」をご参照ください。
autopath を無効にすると、クライアントサイドの QPS と名前解決のレイテンシーが最大 3 倍 増加する可能性があります。CoreDNS の負荷とサービスへの影響を監視してください。
kubectl -n kube-system edit configmap corednsコマンドを実行して、CoreDNS 構成ファイルを開きます。autopath @kubernetesの行を削除し、変更を保存します。CoreDNS Pod の実行ステータスとログを確認します。ログに
reloadという単語が含まれていれば、変更は成功です。
グレースフルシャットダウンの構成
lameduck メカニズムは、CoreDNS プロセスが終了しようとするとき (更新または再起動中)、終了する前に既存のリクエストを処理することを保証します。
CoreDNS プロセスが終了しようとすると、
lameduckモードに入ります。lameduckモードでは、CoreDNS は指定された期間、すでに受信したリクエストの処理を続けながら、システムに新しいリクエストの送信を停止するよう信号を送ります。
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
kube-system名前空間で、coredns ConfigMap の [YAML の編集] をクリックします。以下の CoreDNS ConfigMap で、health プラグインが有効になっていることを確認し、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 のイベントとログを参照して根本原因を特定してください。
CLI
次のコマンドを実行して、CoreDNS 構成ファイルを開きます。
以下の Corefile を参照し、
healthプラグインが有効になっていることを確認し、lameduck パラメーターを15sに設定します。CoreDNS 構成ファイルを変更した後、変更を保存します。
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
}
# 他のプラグインは変更する必要がなく、ここでは省略します。
}アップストリームプロトコル (prefer_udp) の最適化
NodeLocal DNSCache を使用する場合、通信チェーンは アプリケーション -> NodeLocal DNSCache (TCP) -> CoreDNS (TCP) となります。デフォルトでは、CoreDNS はその後、TCP を介してアップストリームの VPC DNS (100.100.2.136/138) に到達しようとします。
問題:VPC DNS は TCP のサポートが限定的です。
解決策:
forwardプラグインを変更してprefer_udpを使用します。これにより、受信リクエストが TCP であっても、CoreDNS は UDP を介してアップストリームの VPC DNS と通信するようになります。詳細については、「ConfigMap の管理」をご参照ください。
# 変更前
forward . /etc/resolv.conf
# 変更後
forward . /etc/resolv.conf {
prefer_udp
}readiness プローブ用の ready プラグインの構成
CoreDNS v1.5.0 以降では、readiness プローブが機能するために ready プラグインが必須です。
次のコマンドを実行して、CoreDNS ConfigMap を開きます。
kubectl -n kube-system edit configmap/corednsファイルに
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という単語が含まれていれば、変更は成功です。
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 リソース制限、および利用可能なクラスターリソースに合わせて調整します。例:
ピーク消費が 4 コア で、利用可能なコアが 8 コア の場合、
NUM_SOCKETSを 2 に設定します。ピーク消費が 8 コア で、利用可能なコアが 64 コア の場合、
NUM_SOCKETSを 8 に設定します。
最適な構成を決定するには、さまざまな設定で QPS と負荷をテストしてください。
デフォルト:指定しない場合、デフォルトは GOMAXPROCS となり、これは CoreDNS Pod の CPU 制限に等しくなります。Pod の CPU 制限が設定されていない場合、Pod が存在するノードの CPU コア数に等しくなります。

