Kubernetes 1.27: SIG-Apps更改内容

首先

这个页面总结了Kubernetes v1.27 中与SIG-Apps相关的变更内容。

    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.27.md

由于SIG-Apps主要处理Kubernetes工作负载的变更等事项,所以与其他SIG相关的变更较多。

    • 直近での過去の変更内容は以下になります。

Kubernetes 1.26: SIG-Apps の変更内容
Kubernetes 1.25: SIG-Apps の変更内容
Kubernetes 1.24: SIG-Apps の変更内容

Kubernetes基礎_-_Google_Slides.png

请参考以下整列的有关除SIG-Apps之外SIG的变更事项。

    Kubernetes 1.27: 変更点まとめ(What’s new!)とアップグレード時の注意事項

聚焦点的变化

以下是与Sig-Apps相关的在Feature Gates中此次更改为Stage的功能。

    • Pod

PDBUnhealthyPodEvictionPolicy:Beta https://github.com/kubernetes/enhancements/issues/3017

ReadWriteOncePod:Beta https://github.com/kubernetes/enhancements/issues/2485

Job

CronJobTimeZone:GA https://github.com/kubernetes/enhancements/issues/3140

StatefulSet

StatefulSetStartOrdinal:Beta https://github.com/kubernetes/enhancements/issues/3335

StatefulSetAutoDeletePVC:Beta https://github.com/kubernetes/enhancements/issues/1847

本次在Sig-Apps中新增的功能是没有的。由于状态正常地更新为Beta,因此在Alpha阶段添加的功能将默认启用并可以使用。

版本1.27发布说明

以下是有关 SIG-Apps 的 v1.27 发布说明的中文翻译。

以下是一段附加说明,不是CHANGELOG官方内容,而是作者补充的。

不再推荐

无特别事项

API的更改

API: resource.k8s.io/v1alpha1.PodScheduling が resource.k8s.io/v1alpha2.PodSchedulingContext にリネームされました。 (#116556, @pohly) [SIG API Machinery, Apps, Auth, CLI, Node, Scheduling and Testing]

新しい IPAddress object が追加されました。

新しい ClusterIP allocator が追加されました。新しい ClusterIP allocator では以前の IPv4 に関する ervice CIDR block size の制限がなくなり、 IPv6 size の制限が /64 になりました。(#115075, @aojea) [SIG API Machinery, Apps, Auth, CLI, Cluster Lifecycle, Network and Testing]

これは Multiple Service CIDRs に関する変更になります。詳細はこちらの KEP を参照ください

名前が有効でない DNS labels の workload resources (Pods, ReplicaSets, Deployments, Jobs, CronJobs, or ReplicationControllers) に関する警告が追加されました。(#114412, @thockin)

名前に.とかをつけた場合に警告が出るようになりました。

API: PodSpec のバリデーションで ResourceClaim と ResourceClaimTemplate の名前が正しくない場合に拒否されるようになりました。pod で ResourceClaim を作成する際も同じバリデーションが適応されます。(#116576, @pohly)

StatefulSetStartOrdinal feature gate が Beta となり、デフォルトで有効化されます。 (#115260, @pwschuurman)

topologySpreadConstraints の labelSelector を指定していない場合に matchLabelKeys が無効化されるようになりました。(#116535, @denkensk)

GCE では LoadBalancer Services で TCP や UDP 等の異なるプロトコルの port でのサポートを提供していません。 (#115966, @aojea) [SIG Apps and Cloud Provider]

これは機能追加ではなく、利用者向けの警告メッセージがソースコード上に追加されただけですね。

現在 GA となっている GRPCContainerProbe feature gate は v1.29 で削除予定になります。該当の feature gate を設定している利用者は削除するようにしてください。(#116233, @SergeyKanzhelev)

AllocationResult の構造体の resource.k8s.io API に破壊的な変更が入りました。この変更により kubelet plugin の DynamicResourceAllocation 機能で、複数の resource driver controllers からの割り当てができるようになります。 s(#116332, @klueska)

Kubelet: MemoryThrottlingFactor のデフォルト値を 0.9 に変更し memory.high を計算する式を追加しました。 (#115371, @pacoxu)

DaemonSet controller (within kube-controller-manager) で contextual logging を使用するようにマイグレーションされました。(#113622, @249043822)

service.kubernetes.io/topology-aware-hints のアノテーションの代わりに service.kubernetes.io/topology-mode が新しいアノテーションとして導入されました。

service.kubernetes.io/topology-aware-hints は非推奨になります。
kube-proxy はこれらのアノテーションに対して無効でない値を受け入れるようになります。これにより、custom implementation-specific や built-in heuristics を有効化できるようになります。(#116522, @robscott) [SIG Apps, Network and Testing]

Job がオーナーになっている Pod には新しくbatch.kubernetes.io/job-name と batch.kubernetes.io/controller-uid が付与されるようになります。
互換性を保つために古い job-name と controller-uid のラベルについてもまだ付与されています。 (#114930, @kannon92)

CronJobTimeZone が GA になりました。 (#115904, @soltysh)

API validation が緩和されて gated pods に対する pod と node の selector の変更が許容されるようになりました。(追加のみが対象で、削除と変更は対象外です)。 (#116161, @danielvegamyhre)

これは Pod Mutable Scheduling Directives に関する変更になります。詳細はこちらの KEP を参照ください

references から kubernetes.io/grpc standard appProtocol が削除されました。(#116866, @LiorLieberman) [SIG API Machinery and Apps]

これはソースコード上のコメントの変更のみで、機能としては特に変更はありません。

非推奨となっていた –enable-taint-manager と –pod-eviction-timeout のフラグが削除されました。 (#115840, @atosatto)

PodDisruptionBudget が Beta となりデフォルトで有効化となります。それに伴い spec.unhealthyPodEvictionPolicy フィールドが利用できるようになります。 機能が有効になっているサーバーではこのフィールドに AlwaysAllow を設定することにより、PodDisruptionBudget によって unhealthy pods が常に evict できるようになります。(#115363, @ravisantoshgudimetla) [SIG Apps, Auth and Node]

kubelet の DownwardAPIHugePages が GA になりました。 (#115721, @saschagrunert) [SIG Apps and Node]

1.26.0 から導入された alpha の resourceClaims フィールドの list-type が set から map に変更されました。これにより CustomResourceDefinitions に関する server-side apply に関する非互換が解消されました。 (#114585, @JoelSpeed)

これはソースコード上のコメントの変更のみで、機能としては特に変更はありません。

API reference の Requests に対して limits を超えてはならない旨を追記しました。(#115434, @ehashman)

更新:AppProtocol field の Redefine の説明を更新して新しい standard values を追加しました。(#115433, @LiorLieberman) [SIG API Machinery, Apps and Network]

これもみた感じソースコード上のコメントが変更されているだけで、機能としては変更がなさそうです。

/metrics/slis が control plane components で使用できるようになり health check metrics がスクレプできるようになります。 (#114997, @Richabanker)

PodSchedulingReadiness が Beta になりました。 (#115815, @Huang-Wei)

PodSpec.Container.Resources で複数の CPU と memory のリソースタイプ設定できるようなりました。

PodSpec.Container.ResizePolicy (new object) により利用者は containers でリサイズをコントロールできるようになりました。

PodStatus.Resize ステータスは Pod resize のリクエストの状態を示します。

PodStatus.ResourcesAllocated は Pod に割り当てられるノードリソースを示す。

PodStatus.Resources は CRI で管理される running 中のコンテナに割り当てるノードリソースを示します。

UpdateContainerResources CRI API は Linux と Windows の両方をサポートします。 (#102884, @vinaykul)

これは In-place Update of Pod Resources に関する機能になります。詳細はこちらの KEP を参照ください・

StatefulSetAutoDeletePVC が Beta になりました。 (#116501, @mattcary)

StatefulSet names は subdomains ではなく DNS labels である必要があります。 StatefulSet に関する subdomain のバリデーション(名前に . を含むかどうか)の結果、機能しません。それは StatefulSetName が pod.spec.hostname に設定されて DNS label として検証されるからです。(#114172, @thockin)

resource.k8s.io/v1alpha1 は resource.k8s.io/v1alpha2 にリプレイスされました。 クラスタをアップグレードする前に全ての resource.k8s.io/v1alpha1 に関するオブジェクトを削除する必要があります。(ResourceClaim, ResourceClaimTemplate,
ResourceClass, PodScheduling) この変更は内部的なものであり、YAML files については新しい apiVersion への変更以外の対応は必要ありません。 (#116299, @pohly)

volumes: 効果がないため、inline PVC template を利用して作成か更新中の PVC の resource.claims はクリアされるようになりました。(#115928, @pohly)

新增特性

API validation が緩和されて Indexed Jobs の parallelism と completions を同時に変更できることが可能になり(parallelism == completions の範囲内で) スケールアップ/ダウンができるようになります。(#115236, @danielvegamyhre) [SIG Apps and Testing]

Indexed Jobs で spec.Completions の変更条件が緩和された話になります。

kubelet のUserNamespacesStatelessPodsSupport feature gate が有効化することで別の user namespace で stateless pod を起動させることができるようになります。 (#116377, @giuseppe) [SIG Apps, Node and Storage]

これは Support User Namespaces in stateless pods に関する変更になります。詳細はこちらの KEP を参照ください

HPA controller は kube-controller-manager から以下のメトリクスを出力するようになります。

metric_computation_duration_seconds: computations の数

metric_computation_total: HPA controller が 1 metric の計算にかかる時間 (#116326, @sanposhiho) [SIG Apps, Autoscaling and Instrumentation]

HPA controller は kube-controller-manager から以下のメトリクスを出力します。

reconciliations_total: HPA controller の reconciliation の数

reconciliation_duration_seconds: HPA controller が1回の reconcile にかかる時間 (#116010, @sanposhiho)

controller helper functions が contextual logging を使用するようにマイグレーションしました。 (#115049, @fatsheep9146)

ResourceQuota controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113315, @ncdc) [SIG API Machinery, Apps and Testing]

StatefulSet controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113840, @249043822)

ClusterRole aggregation controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113910, @mengjiao-liu)

Deployment controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#113525, @249043822)

ReplicaSet controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#114871, @Namanl2001)

bootstrap signer controller と token cleaner controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113464, @mengjiao-liu) [SIG API Machinery, Apps and Instrumentation]

defaultbinder scheduler plugin が contextual logging を使用するようにマイグレーションしました。(#116571, @mengjiao-liu) [SIG Instrumentation and Scheduling]

kube-controller-manager binary が contextual logging を使用するようにマイグレーションしました。(#116529, @pohly)

namespace controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113443, @yangjunmyfm192085)

service-account controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#114918, @Namanl2001) [SIG API Machinery, Apps, Auth, Instrumentation and Testing]

volume attach/detach controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。

PersistentVolumeClaim protection controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。

PersistentVolume protection controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#113584, @yangjunmyfm192085)

TTL after finished controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113916, @songxiao-wang87)

CronJob controllerが contextual logging を使用するようにマイグレーションしました。(#113428, @mengjiao-liu)

ipam controller が cidrset_cidrs_max_total と multicidrset_cidrs_max_total のメトリクスを出力するようになります。CIDRs の割り当てが最大になる前に知ることができるようになります。 (#112260, @aryan9600)

一度も起動していない suspended の Job の Pod template schedulingGates を変更できるようになりました。 (#115940, @ahg-g) [SIG Apps]

これは Allow updating scheduling directives of jobs に関する変更になります。詳細はこちらの KEP を参照ください

通常だと request の値見てスケジュールできなかったら Pending のステータスになるところを Pod を suspend の状態で作成して実行開始を制御したいみたいケースで使う機能が拡充されたようです。

Pods の spec.terminationGracePeriodSeconds が無効な負の値が指定されていた場合に terminationGracePeriodSeconds が 1 になるようになりました。(#115606, @wzshiming)

Pod の .spec.schedulingGates[*].nameフィールドは修飾名(like example.com/mygate)を要求するようになり、.spec.readinessGates[*].nameの名前でバリデーションするようになります。1.27 より前のバージョンで alpha の scheduling gate feature を使用していた場合は、バリデーションを通るように名前を変更するか削除する必要があります。 (#115821, @lianghao208) [SIG Apps and Scheduling]

JobMutableNodeSchedulingDirectives 機能が GA になりました (#116116, @ahg-g) [SIG Apps, Scheduling and Testing]

ReadWriteOncePod 機能が beta になりました。(#114494, @chrishenzie)

Indexed Jobs で新しい index が完了した時しかステータスが更新されないバグを修正しました。[0, .spec.completions> range の範囲の index が完了した場合も .status.completedIndexes が更新されるようになりました。 (#115349, @danielvegamyhre)

job controller は back-off の仕組みが workqueue から切り離されました。parallelism > 1 の場合、 リコンサイルの中で新しく複数の失敗が発生した場合は、全ての失敗を考慮して back-off が計算されます。以前は全ての障害でこの back-off が考慮されていましたが、これにより Pod の障害だけに絞ることができます。back-off の制限を超えると、job はすぐに失敗として記録されます。この変更前では job の失敗は次の back-off の時に失敗と記録されていました。 (#114768, @sathyanarays) [SIG Apps and Testing]

サポートされていない PodDisruptionBudget の設定を見つけた際に、イベントログに設定ミスがあることが通知されるようになります。 (#115861, @JayKayy) [SIG Apps]

kubernetes.io/tls の Secret は cert が private key と一致することを検証するようになりました。(#113581, @aimuz)

StorageVersionGC (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#113986, @songxiao-wang87)

文档改善

没有特别要求

改进(功能优化)

没有特别的事情

漏洞或回归 huò

DaemonSet の Pod が作成に失敗した時にステータスが更新されな不具合を修正しました。 (#113787, @gjkim42)

OwnerReferencesPermissionEnforcement admission plugin が有効な場合の StatefulSetAutoDeletePVC の機能が修正されました。 (#114116, @jsafrane)

PVC を削除する時に権限がなくて失敗するので、その修正になります。

parallelism = 1 の Job が管理する Pod が失敗した際に、job controller が backoff delay を尊重するため再び Pod を再生成する不具合を修正しました。jobs が parallelism > 1 の場合 backoff delay を尊重することなく作成することがあります。(#114516, @nikhita)

rate-limiter が queue をチェックして古い pod disruption conditions をクリーニングする機能を修正しました。このバグにより PDB の同期の更新が遅れたり、pod disruption に時間がかかっていた可能性があります。(#114770, @mimowo)

PodDisruptionConditions(default in 1.26)の導入で発生していた2つの不具合を修正しました。:

pod eviction API が偽の前提条件に基づくエラーを返すため、成功させるためには2回の evict API の呼び出しが必要だった
dry-run で eviction API 呼んだ時に、DisruptionTarget condition に退避される Pod の状態を含んでいた (#116554, @atiratree)

これ以降、HPAContainerMetrics を無効化した場合は HPA controller は container resource metrics を返さなくなります。その結果 HPA は container resource metric によるスケールダウンをしなくなります。(#116043, @sanposhiho)

利用者が ephemeral container を static pod に追加しようとした時に、validation error が表示されるようになります。(#114086, @xmcqueen)

DisruptionTarget のメッセージのコンディションから以前の Pod の metadata が入らなくなります。 (#114914, @mimowo)

PVC が見つからずに Pod が pending になっている場合に、PVC を自動で再作成するようになります。 (#113270, @rrangith) [SIG Apps and Testing]

PersistentVolume API objects は NodeAffinities で OS, architecture, zone, region,instance type で beta の Kubernetes labels を使用している場合に stable の Kubernetes labels に更新できるようになります。 (#115391, @haoruan)

key encipherment 使用時のバリデーションが緩和されて kubelet で要求されて使用方法になります。 (#111660, @pacoxu)

Pod の GC が実行される時に kube-controller-manager は Evicted pods を最初に削除するようになります。 (#116167, @borgerli)

topologySpreadConstraints で指定されて LabelSelectors が検証されて Pod が期待通りにスケジュールされるようになりました。 無効な LabelSelectors をもつ Pod は更新できましたが、有効な LabelSelectors を持つ Pod の場合は再作成が必要でした。(#111802, @maaoBit)

PodGC で terminal phase になった Pod がはDisruptionTarget condition に追加されません。 (#115056, @mimowo)

ExternalName の Service は Endpoint を作成しなくなります。 (#114814, @panslava)

空でない schedulingGates を設定する時に nodeName の設定が必要になりました。(#115569, @Huang-Wei)

statefulset status で一貫した API errors を出力するようになりました。(#113834, @atiratree)

DaemonSet の pods が Succeeded phase で完了した場合は再作成されるようになります。(#117073, @mimowo) [SIG Apps and Testing]

其他 (其它修改)

由于修复了 HPA 控制的 Pod 在接收不到指标时可能产生误导的消息。

pkg/controller/nodeipam/ipam/cloud_cidr_allocator.go, pkg/controller/nodeipam/ipam/multi_cidr_range_allocator.go pkg/controller/nodeipam/ipam/range_allocator.go pkg/controller/nodelifecycle/node_lifecycle_controller.go が structured logging に以降しました。(#112670, @yangjunmyfm192085)

Kubernetes object garbage collector (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113471, @ncdc)

ttlafterfinished controller (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#115332, @obaranov1) [SIG Apps]

sample-controllerが contextual logging を使用するようにマイグレーションしました。 (#113879, @pchan) [SIG API Machinery and Instrumentation]

API server の identity Lease labels の名前が変更されて apiserver.kubernetes.io/identity を使うようになります。(#114586, @andrewsykim) [SIG API Machinery, Apps, Cloud Provider and Testing]

感受到的感觉
(suǒ de

这次的变更点数量本身比平时稍微多了一点,但并没有进行大规模的新增功能等重大改变。相反,进行了大量细微的错误修复和需求调整,看起来是一个相对稳定的发布版本,Alpha 的功能正常地过渡到了 Beta。

广告
将在 10 秒后关闭
bannerAds