Kubernetes 1.37 の SIG-Network の変更内容をまとめました。
過去の SIG-Network の変更内容
- Kubernetes 1.36: SIG-Network の変更内容
- Kubernetes 1.35: SIG-Network の変更内容
- Kubernetes 1.34: SIG-Network の変更内容
- Kubernetes 1.33: SIG-Network の変更内容
- Kubernetes 1.32: SIG-Network の変更内容
- Kubernetes 1.31: SIG-Network の変更内容
- Kubernetes 1.29: SIG-Network の変更内容
- Kubernetes 1.28: SIG-Network の変更内容
- Kubernetes 1.27: SIG-Network の変更内容
- Kubernetes 1.26: SIG-Network の変更内容
- Kubernetes 1.25: SIG-Network の変更内容
- Kubernetes 1.24: SIG-Network の変更内容
- Kubernetes 1.23: SIG-Network の変更内容
- Kubernetes 1.22: SIG-Network の変更内容
- Kubernetes 1.21: SIG-Network の変更内容
- Kubernetes 1.20: SIG-Network の変更内容
- Kubernetes 1.19: SIG-Network の変更内容
- Kubernetes 1.18: SIG-Network の変更内容
- Kubernetes 1.17: SIG-Network の変更内容
- Kubernetes 1.16: SIG-Network の変更内容
- Kubernetes 1.15: SIG-Network の変更内容
- Kubernetes 1.14: SIG-Network の変更内容
以下は、Kubernetes v1.37 の Changelog の中からSIG-Networkに関連した内容を和訳したものです。
の部分は筆者の補足になります。
Urgent Upgrade Notes
(No, really, you MUST read this before you upgrade)
- なし
Changes by Kind
Dependency
-
google.golang.org/grpcをv1.82.1に更新しました。これにより、HTTP/2 制御フレームのフラッディングに対するサーバー側の制限が追加されます。また、GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING環境変数が削除されるため、strict path checking は常に有効になります。 (#140740, @dims) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Network, Node and Scheduling] -
kubeletに組み込まれているcAdvisorを、より軽量なgithub.com/google/cadvisor/libモジュールに移行しました。この変更に伴い、次の古い機能が削除されます。- 非推奨の cAdvisor フラグは受け付けられなくなり、設定されていると
kubeletの起動に失敗します(引き続き使えるのは--housekeeping-intervalのみです)。次のフラグを設定から削除してください:--application-metrics-count-limit、--boot-id-file、--container-hints、--containerd、--containerd-namespace、--enable-load-reader、--event-storage-age-limit、--event-storage-event-limit、--global-housekeeping-interval、--log-cadvisor-usage、--machine-id-file、--storage-driver-user、--storage-driver-password、--storage-driver-host、--storage-driver-db、--storage-driver-table、--storage-driver-secure、--storage-driver-buffer-duration。 - cAdvisor のアプリケーション/カスタムメトリクスは収集されなくなります。対象には
/stats/summaryのuserDefinedMetricsフィールドと、/metrics/cadvisorのcontainer_application_*メトリクスが含まれます。 -
/metrics/cadvisorのcontainer_cpu_load_average_10s、container_cpu_load_d_average_10s、container_tasks_stateメトリクスは出力されなくなります。 (#139870, @dims) [SIG API Machinery, Auth, Instrumentation, Network, Node and Testing]
- 非推奨の cAdvisor フラグは受け付けられなくなり、設定されていると
- etcd クライアントライブラリを
v3.6.10に更新しました。 (#138393, @humblec) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Instrumentation, Network, Node, Scheduling and Storage]
API Change
-
workloadbuilderライブラリおよび Workload ビルディングブロック API との統合により、Job コントローラーに Workload-aware scheduling (WAS) のサポートを追加しました。 (#140188, @helayoty) [SIG API Machinery, Apps, Auth, Network, Node, Scheduling, Storage and Testing] - nftables
kube-proxyバックエンドにオプトインのユーザースペース TCP プロキシを追加し、IPv4 および IPv6 で localhost の NodePort Service を提供できるようにしました。 (#138427, @AustinAbro321) [SIG Instrumentation, Network and Testing]-
nftablesモードへの移行の制約として書かれていたlocalhostによるNodePortの対応が実装されたようです
-
-
SchedulerPreQueueingHintsフィーチャーゲート (Alpha、デフォルトで無効) を追加しました。有効にすると、スケジューラープラグインがPreQueueingHintFnを提供できるようになり、クラスターイベント時に評価する Pod の範囲を絞り込んでスケジューリングのスループットを向上させます。DRA プラグインはこれを実装し、ResourceClaimTemplate ベースのワークロードを最適化します。 (#138916, @geetasg) [SIG API Machinery, Apps, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network, Node, Scheduling, Storage, Testing and Windows] -
kube-apiserverの CBOR エンコーダーを変更し、コレクションを一括ではなく 1 項目ずつエンコードするようにしました。 (#138808, @chenk008) [SIG API Machinery, Apps, Auth, Autoscaling, CLI, Cloud Provider, Cluster Lifecycle, Contributor Experience, Instrumentation, Network, Node, Release, Scalability, Scheduling, Storage, Testing and Windows] - 1 つのリクエストで複数のデバイスを割り当てる際、DRA の consumable capacity で
DistinctAttribute制約が各デバイスに正しく適用されないバグを修正しました。 (#140600, @GunaKKIBM) [SIG API Machinery, Apps, CLI, Etcd, Network, Node, Release, Scheduling and Testing] - API Go 型のインライン化された
TypeMetaフィールドの JSON タグを",inline"から""に変更しました。inlineは JSON シリアライザーが認識するオプションではなく、marshal や unmarshal の動作を変更するものではありませんでした。 (#138260, @liggitt) [SIG API Machinery, Apps, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Instrumentation, Network, Node, Scheduling, Storage and Testing] -
client-go: 呼び出し元が context を渡す API を導入し、ほぼすべてのcontext.TODO呼び出しを削除しました。ログ呼び出しでは、利用可能な場合は呼び出し元が提供するロガーを使用します。 (#129125, @pohly) [SIG API Machinery, Apps, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network, Node, Storage and Testing]
Feature
- Windows の kube-proxy (winkernel) におけるロードバランサー操作の失敗を監視する Prometheus メトリクスを追加しました:
kubeproxy_sync_proxy_rules_winkernel_lb_create_failures_total、kubeproxy_sync_proxy_rules_winkernel_lb_update_failures_total、kubeproxy_sync_proxy_rules_winkernel_lb_delete_failures_total。各メトリクスにはip_family、lb_type、errorラベルが含まれます。 (#137767, @princepereira) [SIG Instrumentation, Network and Windows] - 安全な sysctl の許可リストに
net.ipv4.tcp_slow_start_after_idleとnet.ipv4.tcp_notsent_lowatを追加しました。 (#138389, @gheffern) [SIG Auth, Network and Node]-
以下のkernelのバージョンでそれぞれnamespacedなパラメータとなっています
-
net.ipv4.tcp_slow_start_after_idle: 4.15 -
net.ipv4.tcp_notsent_lowat: 4.6
-
-
- プロキシモード (
iptables、ipvs、nftablesなど) を明示せずにkube-proxyを起動した場合に警告を表示するようにしました。Linux では、将来のリリースでデフォルトモードがiptablesからnftablesに切り替わる予定です。 (#139957, @danwinship) [SIG Network]-
nftablesのデフォルト化が着々と進んでいますね
-
-
EtcdRangeStreamベータ版のフィーチャーゲートを追加しました。有効時、watch キャッシュはページ分割されたRangeリクエストではなく、単一のRangeStreamRPC で etcd からオブジェクトをストリーミングして初期化します。 (#136915, @Jefftree) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Etcd, Instrumentation, Network, Node, Scheduling, Storage and Testing] -
kube-proxyのipvsモードを無効化し、その後削除する準備として、KubeProxyIPVSフィーチャーゲートを追加しました。 (#139397, @adrianmoisey) [SIG Network]-
ipvs無効化のためのphase 2であるipvs機能の有効・無効を制御するためのfeature gateの追加です。 -
予定通りであれば以下の通りの計画で廃止が進みます。
- 1.40: KubeProxyIPVS のデフォルトを false に変更。何もしなければ IPVS は使えなくなるが、feature gate を明示的に有効化すればまだ使える。
- 1.43: IPVS を完全に利用不可にし、実装も削除
- 1.46: feature gateの削除
-
- スケジューラーメトリクス
queued_entitiesとqueue_incoming_entities_totalを追加しました。queued_entitiesはスケジューラーキュー内のスケジューリングエンティティ (Pod または PodGroup) の現在数を、queue_incoming_entities_totalはキューに追加されたエンティティの累計を報告します。 (#139840, @iomarsayed) [SIG Instrumentation, Network and Scheduling] -
RelaxedServiceNameValidationフィーチャーゲートを GA に昇格しました。 (#139282, @adrianmoisey) [SIG Apps and Network]-
RelaxedServiceNameValidationがfalseにできなくなります。
-
- オブジェクトの走査に遅延評価型のリフレクションベースユーティリティを採用して CEL アドミッションポリシーの評価を最適化し、リクエスト処理中の CPU 使用量とガベージコレクションのオーバーヘッドを削減しました。 (#138771, @lalitc375) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Network, Node, Scheduling and Storage]
Documentation
-
kube-proxyの--metrics-bind-addressフラグのドキュメントから、フラグを空文字列に設定するとメトリクスサーバーが無効になるという誤った記述を削除しました。 (#138940, @kairosci) [SIG Network]-
空値を設定すると、デフォルト値である127.0.0.1:10249にセットされます
-
Bug or Regression
- 大規模クラスターモード (Endpoint が 1000 を超える場合) では、
kube-proxyが full-sync 操作をスキップするようにしました。 (#138571, @aojea) [SIG Network]-
Endpoint が 1000 以上になると、定期的な念のためのiptablesのルールのfull syncが実行されなくなるようです。
-
-
kube-proxyが nftables の service マップを書き込む前にコメントをカーネルの 128 バイト制限に切り詰めるようにし、長い Service 名による同期失敗を回避しました。 (#139516, @Vinayak9769) [SIG Network] -
kube-proxyの nftables モードで netlink サポートをデフォルトで有効にしました。kube-proxyは netlink を直接使ってルールとチェーンを一覧表示するため、nftコマンドの実行と出力解析を避け、パフォーマンスを向上できます。NFTablesNetlinkフィーチャーゲート (Beta、デフォルトで有効) を無効にすると、以前の動作に戻せます。 (#137536, @aojea) [SIG Network and Testing] - UDP Service に提供中のエンドポイントがなくなった場合 (たとえばゼロにスケールした後) に、
kube-proxyが古い conntrack エントリを削除するように修正しました。これにより、以前に確立された単方向の UDP フローが、削除済み Pod IP に対して無期限にブラックホール化されるのを防ぎます。 (#139629, @Bafff) [SIG Network]-
NodePortについては今回の修正からは対象外になっています
-
-
kube-proxyの IPVS モードにおけるパフォーマンスバグを修正しました。多数の Service があるクラスターで、GetAllLocalAddressesExceptがインターフェースごとに完全な netlink アドレス一覧を取得していたため、syncProxyRulesに数十秒かかることがありました。アドレスファミリーごとに 1 回だけ一覧を取得するようにし、大規模クラスターでのレイテンシーを大幅に削減します。 (#138927, @ytcisme) [SIG Network] - Windows 上の
kube-proxyで、再起動またはリカバリー中の一時的な HNS ダウンタイムにより LoadBalancer の状態調整が誤り、Cannot create a file when that file already exists. (0xb7)エラーで重複作成に失敗する問題を修正しました。 (#139503, @princepereira) [SIG Network and Windows] - 空の
IPFamiliesフィールドを持つ Service (デュアルスタック導入前に作られ、その後 spec が更新されていない Service) の処理で、エンドポイントコントローラーが panic する可能性があるv1.33のリグレッションを修正しました。 (#138736, @rahulbabu95) [SIG Apps and Network]-
GET/LIST経由とWatchではdefaultingの挙動が異なり、WATCH経由ではdefaultingが機能していなかったようで、古いSpecのServiceがetcd上に保持されていた場合に、defaultingで存在すると期待していたIPFamilies[0]にアクセスし、panicを引き起こしてしまっていたようです。
- こちらの修正はWatchのdefaultingの挙動の修正ではなく暫定の対応のようで、WATCHのdefaultingに対する対応は https://github.com/kubernetes/kubernetes/issues/138735 で議論されているようです
-
- Server-Side Apply のリグレッションを修正しました。コンテナーの型 (list または map) にパッチを適用したとき、以前は成功していた apply リクエストで
422 requiredエラーが返されることがありました。 (#140294, @jpbetz) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Scheduling, Storage and Testing] - L2Bridge ネットワークで Pod IP がノード間で再利用された際に、Windows 上で古いリモート HNS エンドポイントが残り、トラフィックが誤ったノードにルーティングされて DNS タイムアウトが発生する問題を修正しました。 (#138000, @princepereira) [SIG Network and Windows]
-
test/images/glibc-dns-testingのビルドを修正しました。 (#138877, @BenTheElder) [SIG Network and Testing] - 無効な Service CIDR が設定されている場合に、エラー理由を表示するようにしました。 (#139182, @PseudoResonance) [SIG Network]
- watch している Node の IP が変更された場合、または Node オブジェクトが削除された場合に
kube-proxyを終了するようにしました。これにより、更新されたノードネットワーク状態で再起動できます。 (#138183, @abishekgiri) [SIG Network]
Other (Cleanup or Flake)
-
kube-apiserverのservice/proxyサブリソースを変更し、Service へのプロキシ時に Endpoints ではなく EndpointSlices を使うようにしました。この変更は、Service 用の Endpoints を手動で作成し、EndpointSlice ミラーリングを無効にしているクラスターにのみ影響します。 (#134860, @danwinship) [SIG API Machinery and Network] -
kube-proxyが必要としない.metadata.managedFieldsフィールドを削除し、メモリ使用量を改善しました。 (#140056, @adrianmoisey) [SIG Network] -
kube-proxyの nftables モードで、エンドポイントが 1 つだけの Service にマップを使わないようにし、nftables の書き込みを高速化しました。 (#140723, @adrianmoisey) [SIG Network]