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 の変更内容
请参考以下整列的有关除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。