Kubernetes 1.26: SIG-Network 的变更内容

我总结了Kubernetes 1.26版本SIG-Network的变化内容。虽然没有很大的变动,但仍然在稳步改进。

Kubernetes1.25:SIG-Network過去的更改
Kubernetes1.24:SIG-Network過去的更改
Kubernetes1.23:SIG-Network過去的更改
Kubernetes1.22:SIG-Network過去的更改
Kubernetes1.21:SIG-Network過去的更改
Kubernetes1.20:SIG-Network過去的更改
Kubernetes1.19:SIG-Network過去的更改
Kubernetes1.18:SIG-Network過去的更改
Kubernetes1.17:SIG-Network過去的更改
Kubernetes1.16:SIG-Network過去的更改
Kubernetes1.15:SIG-Network過去的更改
Kubernetes1.14:SIG-Network過去的更改

以下是对Kubernetes v1.26更新日志的本地化翻译。 “の部分是作者的补充说明。”

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 1.26 版本的各个 API 版本兼容表。

 

API变动

    • コンテナの httpGet を使った preStop と postStart ライフサイクルハンドラは、指定された scheme と headers フィールドを尊重するようになりました。これにより、カスタムヘッダと 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)

コマンドで確認したい場合は、以下のように 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)

API リソースのディスカバリは、何度も HTTP リクエストが発生し負荷と遅延が問題となっていました。この機能では APIGroupDiscovery というリソースが導入され、これを List で取得することで一度の HTTP でリソース一覧が取れるようになっているようです。

参考: 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)

特征增加

    • 大規模なクラスタで、kube-proxy の iptables バックエンドが service/endpoint の変更をより効率的に処理するようになりました。(#110268, @danwinship)

見た限り MinimizeIPTablesRestore というフィーチャーゲート(デフォルト false)を有効にしたときに動くロジックのようです。

参考: KEP-3453: Minimizing iptables-restore input size

kubeconfig の cluster info の下に、DisableCompression という新しいフィールド(default = false)が追加されました。true に設定されたとき、その kubeconfig を使ったクライアントからの apiserver へのリクエストに対するレスポンスは圧縮が無効になります。これはクライアント・サーバー間の帯域が十分(>30MB/s)か、サーバーの CPU に制約がある場合に、list コールのレイテンシの大幅に改善します。(#112309, @shyamjvs)

フィールド名が EnableCompression ではなく否定形を使っているのは、RestConfig のフィールドや Go の httpライブラリに合わせたからとissue のコメントにありました。

アルファのメトリクススタビリティで、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)

TopologyAwareHintsEnabled, TopologyAwareHintsDisabled という Reason のイベントが発行されるようです

ServiceIPStaticSubrange 機能が GA になりました。(#112163, @aojea)

v1.24 でアルファとして導入され 1.26 で無事 GA となりました

参考: https://qiita.com/tkusumi/items/da474798c5c9be88d9c5

Kube-apiserver: gzip 圧縮がレベル 4 からレベル 1 に変更し、10~50% 帯域幅の利用が増えることと引き換えに、大きい list コールのレイテンシを改善しました。これにより、非常に大きいページ化されていないリストコールの呼び出しがタイムアウトの制限を超えるまでのヘッドルームが増加しました。(#112299, @shyamjvs)

ExpandedDNSConfig 機能がベータとなり、デフォルトで有効になりました。この機能はコンテナランタイムのサポートが必要な点に留意してください。(#112824, @gjkim42) [SIG Network and Testing]

DNS のサーチパスの最大が 6 から 32, サーチパスの文字列長の最大が 256 から 2048 へ拡張されるものです。

参考: KEP-2595: Expanded DNS Configuration

ProxyTerminatingEndpoints 機能がベータとなり、デフォルトで有効になりました。これが有効の時、トラフィックポリシーが local でノード上に停止中 (terminating) 状態の pod しか存在しないときは、kube-proxy は停止中の pod にトラフィックを向けるようになります。(#113363, @andrewsykim)

ComponentSLIs フィーチャーゲートが有効の時、/metrics/slis が kube-proxy で利用可能となり、ヘルスチェックのメトリクスを取得できるようになります。(#113057, @Richabanker)

错误或回归

    • コンテナの /etc/resolv.conf にホストの search .が伝播しないようにしました。(#112157, @dghubble)

alpine など musl ベースの DNS 解決時に search . があることで失敗する問題があったようです

Service の appProtocol の変更がロードバランサの更新を引き起こさないバグを修正しました。(#112785, @MartinForReal) [SIG Cloud Provider and Network]

winkernel proxier がサービスバックエンドの変更のたびに、プロキシールールのリークを引き起こす問題を修正しました。(#112837, @daschott)
endpointslice コントローラのバックオフの遅延時間の最大値を増加し、Service を同期するときに期待される遅延時間の並び(sequence of delays)と一致させました。(#112353, @dgrisonnet)

遅延時間の並び(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]

以前までは複数の options 行があった場合は最後の一行のみが採用される実装だったようです。

winkernel proxier が古い VIP を有効として扱ってしまう問題を解決しました。(#113521, @daschott)
ノードにアサインされた pod.Spec.PodCIDRs の変更を検知したときに、kube-proxy が再起動されるようになりました。(#111344, @aojea)

其他 (清理或剥落)

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

介绍未来的主题

我将介绍一下在SIG-Network讨论的话题中,我个人特别关注的内容。

reworking the kube-proxy’s architecture #2104

kube-proxy の大幅な刷新 (v2) に関する取り組みです
2020 年 10 月から PR がレビュー中 のままですが、v1.27 のマイルストーン入ったようです
実装は Kubernetes Proxy NG (KPNG) というレポジトリで実装が進められています
特徴の一つは Kubernetes に関する処理を行うコントローラーと、iptables, ipvs などのバックエンドが gRPC で分離できることで、独自のバックエンドが簡単に実装できる点です

AdminNetworkPolicy support #2091

クラスタスコープの NetworkPolicy である AdminNetworkPolicy のサポートです
クラスタ管理者がクラスタレベルでのネットワークのポリシーをできるようにする機能です
まだ API の CRD がマージされただけですが NetworkPolicy の不足をカバーしてくれる機能です

pod LifecycleHandler should support a sleep option #114465

Kubernetes で安全に Pod を終了するときに必要な sleep を LifecycleHandler に組み込むという提案です

sleep の必要性は @superbrothers さんの https://qiita.com/superbrothers/items/3ac78daba3560ea406b2 が参考になります

この issue に気づかず自分も似た提案を SIG-Network の ML にポストしましたが、この issue が先にあったので撤回しました

sig/network のラベルは付いていませんが関係ありそうなので紹介します

请参考

注意:这里的翻译仅供参考,可能有多种表达方式。

SIG-Network KEPs SIG-Network の KEP が管理されているダッシュボード
SIG-Network の議事録
sig/network ラベル付きの open な issue

广告
将在 10 秒后关闭
bannerAds