6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kubernetes 1.26: SIG-Network の変更内容

Last updated at Posted at 2022-12-23

Kubernetes 1.26 の SIG-Network の変更内容をまとめました。大きな変更はありませんが、着実に改善されています。

過去の SIG-Network の変更内容

以下は、Kubernetes v1.26 の Changelog を和訳したものです。:pencil: の部分は筆者の補足になります。

:pencil: Kubernetes 1.25 と 1.26 の API 差分

Kubernetes API (/api/, /apis/) から取得した情報を使って、Kubernetes 1.25 と 1.26 の API の差分を確認しました。差分は以下になります。flowschemas, prioritylevelconfigurations の v1beta3 が追加され、その v1beta2 が廃止予定 (deprecated) となり, v1beta1 が削除されました。

  • API の追加:
    • flowcontrol.apiserver.k8s.io/v1beta3/flowschemas
    • flowcontrol.apiserver.k8s.io/v1beta3/prioritylevelconfigurations
  • API の削除:
    • autoscaling/v2beta2/horizontalpodautoscalers
    • flowcontrol.apiserver.k8s.io/v1beta1/flowschemas
    • flowcontrol.apiserver.k8s.io/v1beta1/prioritylevelconfigurations
  • Deprecation の指定:
    • flowcontrol.apiserver.k8s.io/v1beta2/flowschemas
    • flowcontrol.apiserver.k8s.io/v1beta2/prioritylevelconfigurations

各 Kubernetes の API バージョン対応表も、Kubernetes 1.26 時点での情報に更新しました。

API Change (API の変更)

  • コンテナの httpGet を使った preStoppostStart ライフサイクルハンドラは、指定された schemeheaders フィールドを尊重するようになりました。これにより、カスタムヘッダと HTTPS へのスキーム変更が可能になり、startup/readiness/liveness probe と一貫性を持つようになります。scheme: HTTPS が設定されたライフサイクルハンドラが、エンドポイントが実際には HTTP であるというエラーに遭遇したときは、以前のリリースとの互換性のため、HTTP でリクエストするようフォールバックします。この問題が起きた時、LifecycleHTTPFallback イベントが Pod のネームスペースに記録され、kubelet の kubelet_lifecycle_handler_http_fallbacks_total メトリックが増加されます。クラスタ管理者は、kubelet の --feature-gates=ConsistentHTTPGetHandlers=false を設定することで、このライフサイクルの拡張を無効にできます。(#86139, @jasimmons)
  • API オブジェクトの metav1.LabelSelectors の指定は、エラーとなる無効なラベルの値が含まれていないことを検証するようになりました。既存の無効なオブジェクトの更新は可能ですが、新規のオブジェクトは有効なラベルセレクタを含む必要があります。(#113699, @liggitt)
  • 各フィーチャーゲートが有効かどうかを調べられるkubernetes_feature_enabled メトリックを追加しました。 (#112690, @logicalhan)
    • :pencil: コマンドで確認したい場合は、以下のように kubectl get--raw を使って直接 /metrics にアクセスすると便利です。
$ kubectl get --raw /metrics | grep ProxyTerminatingEndpoints
kubernetes_feature_enabled{name="ProxyTerminatingEndpoints",stage="BETA"} 1
  • ループバックアドレスでの NodePort サービスを無効化できる kube-proxy のフラグ(--iptables-localhost-nodeports, デフォルト true)が追加されました。注意: これは iptables モードで ipv4 のときのみ適用されます。(#108250, @cyclinder)
  • aggregated discovery がアルファとなり、AggregatedDiscoveryEndpoint フィーチャーフラグで切り替えられるようになりました (#113171, @Jefftree)
    • :pencil: API リソースのディスカバリは、何度も HTTP リクエストが発生し負荷と遅延が問題となっていました。この機能では APIGroupDiscovery というリソースが導入され、これを List で取得することで一度の HTTP でリソース一覧が取れるようになっているようです。
    • :pencil: 参考: KEP-3352: Aggregated Discovery
  • ServiceInternalTrafficPolicy 機能が GA となりました (#113496, @avoltz)
  • kube-proxy で "userspace" プロキシーモード (1 年以上 deprecated だった)が Linux、Windows どちらでもサポートされなくなりました。利用者は Linux では "iptables" または "ipvs"、Windows では "kernelspace" を使ってください。(#112133, @knabben)
  • MixedProtocolLBServiceA が beta から GA になりました。(#112895, @janosi)
  • EndpointSliceTerminatingCondition フィーチャーゲートが GA になりました。このゲートは固定されるようになり、v1.28 で削除されます。(#113351, @andrewsykim)

Feature (機能追加)

  • 大規模なクラスタで、kube-proxy の iptables バックエンドが service/endpoint の変更をより効率的に処理するようになりました。(#110268, @danwinship)
  • kubeconfig の cluster info の下に、DisableCompression という新しいフィールド(default = false)が追加されました。true に設定されたとき、その kubeconfig を使ったクライアントからの apiserver へのリクエストに対するレスポンスは圧縮が無効になります。これはクライアント・サーバー間の帯域が十分(>30MB/s)か、サーバーの CPU に制約がある場合に、list コールのレイテンシの大幅に改善します。(#112309, @shyamjvs)
  • アルファのメトリクススタビリティで、pod_status_sync_duration_seconds ヒストグラムが、Kubelet が Pod の状態変化を検出したときにそれを書き込むのにかかった時間を報告するようになりました。(#107896, @smarterclayton) [SIG Apps, Architecture, CLI, Cloud Provider, Cluster Lifecycle, Instrumentation, Network, Node, Release, Scheduling, Storage and Testing]
  • kubectl--disable-compression フラグ (default = false) が追加されました。これが true のとき、apiserver に対する全てのリクエストはレスポンスの圧縮が無効になります。これはクライアント・サーバー間の帯域が十分(>30MB/s)か、サーバーの CPU に制約がある場合に、list コールのレイテンシの大幅に改善します。(#112580, @shyamjvs)
  • API サーバートレーシングが、様々な span と span イベントを含むようになりました。(#113172, @dashpole) [SIG API Machinery, Architecture, Auth, Instrumentation, Network, Node and Scheduling]
  • TopologyAwareHints の有効・無効時にイベントが発行されるようになりました。(#113544, @LiorLieberman)
    • :pencil: TopologyAwareHintsEnabled, TopologyAwareHintsDisabled という Reason のイベントが発行されるようです
  • ServiceIPStaticSubrange 機能が GA になりました。(#112163, @aojea)
  • Kube-apiserver: gzip 圧縮がレベル 4 からレベル 1 に変更し、10~50% 帯域幅の利用が増えることと引き換えに、大きい list コールのレイテンシを改善しました。これにより、非常に大きいページ化されていないリストコールの呼び出しがタイムアウトの制限を超えるまでのヘッドルームが増加しました。(#112299, @shyamjvs)
  • ExpandedDNSConfig 機能がベータとなり、デフォルトで有効になりました。この機能はコンテナランタイムのサポートが必要な点に留意してください。(#112824, @gjkim42) [SIG Network and Testing]
    • :pencil: DNS のサーチパスの最大が 6 から 32, サーチパスの文字列長の最大が 256 から 2048 へ拡張されるものです。
    • :pencil: 参考: KEP-2595: Expanded DNS Configuration
  • ProxyTerminatingEndpoints 機能がベータとなり、デフォルトで有効になりました。これが有効の時、トラフィックポリシーが local でノード上に停止中 (terminating) 状態の pod しか存在しないときは、kube-proxy は停止中の pod にトラフィックを向けるようになります。(#113363, @andrewsykim)
  • ComponentSLIs フィーチャーゲートが有効の時、/metrics/sliskube-proxy で利用可能となり、ヘルスチェックのメトリクスを取得できるようになります。(#113057, @Richabanker)

Bug or Regression (バグまたはリグレッション)

  • コンテナの /etc/resolv.conf にホストの search .が伝播しないようにしました。(#112157, @dghubble)
    • :pencil: alpine など musl ベースの DNS 解決時に search . があることで失敗する問題があったようです
  • Service の appProtocol の変更がロードバランサの更新を引き起こさないバグを修正しました。(#112785, @MartinForReal) [SIG Cloud Provider and Network]
  • winkernel proxier がサービスバックエンドの変更のたびに、プロキシールールのリークを引き起こす問題を修正しました。(#112837, @daschott)
  • endpointslice コントローラのバックオフの遅延時間の最大値を増加し、Service を同期するときに期待される遅延時間の並び(sequence of delays)と一致させました。(#112353, @dgrisonnet)
    • :pencil: 遅延時間の並び(sequence of delays)は Exponential backoff におけるによる間隔の並びのことです。本 PR では 1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s, 512s, 1000s の並びに統一されました。
  • kube-proxy は ipvs モードを指定したときに適切にシステムが設定されていないとき、iptables モードにフォールバックしなくなりました。代わりに単にエラーで終了するようになりました。(#111806, @danwinship) [SIG Network]
  • kubeadm: ClusterConfiguration の networking フィールドを検証するときのバグを修正しました。(#112751, @SataQiu)
  • kubelet は、--node-ip の使用をやめたときに、Node の cloud node IP アノテーションを正しくクリーンアップするようになりました。この修正は、1.23 で external cloud provider で不要に --node-ip を指定したことで 1.24 で問題が発生し、kubelet の引数から不要な --node-ip を削除してもこのアノテーションが削除されず修正できなかった、という問題を修正します。(#112184, @danwinship) [SIG Network and Node]
  • kubelet: /etc/resolv.conf に複数の option 行があったとき、Default DNS ポリシーの Pod では全ての option を一行にマージするようになりました。(#112414, @pacoxu) [SIG Network and Node]
  • winkernel proxier が古い VIP を有効として扱ってしまう問題を解決しました。(#113521, @daschott)
  • ノードにアサインされた pod.Spec.PodCIDRs の変更を検知したときに、kube-proxy が再起動されるようになりました。(#111344, @aojea)

その他 (Cleanup or Flake)

  • test/e2e/framework をリファクタリングしコアフレームワークを小さくしました。リソースの監視、ログサイズの監視、メトリクスの収集、でデバッグ情報のダンプのようなオプショナルな機能は、個別の e2e テストスイートでインポートしなければなりません。今までのコアフレームワークの機能を再度有効する init パッケージが提供されます。この PR によってコードがコンパイルできない場合、コミットメッセージにあるスクリプトを使ってアップデートできます。(#112043, @pohly)
  • 既存の実装にばらつきがあるため、Kubernetes のネットワークプラグインのコンフォーマンスで、Service セッションアフィニティのタイムアウトのテストは必須でなくなりました。今後のリリースで、より良くコンフォーマンスを表現するコンフォーマンステストが開発される予定です。(#112806, @dcbw) [SIG Architecture, Network and Testing]

:pencil: 今後のトピックの紹介

SIG-Network で取り組まれているトピックで、個人的に気になったものを紹介します。

参考

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?