はじめに
このページではKubernetes v1.27 における SIG-Apps に関連する変更内容をまとめています。
SIG-AppsはKubernetesのワークロードの扱いなどの変更を主に扱っているため、他のSIGと関係する変更が多くなっております。
- 直近での過去の変更内容は以下になります。
SIG / SIG-Apps とは?
-
SIGとは?
- Special Interest Groups の略称
- 各 SIG には Subproject が与えられていて、 Subproject に対して独立して開発できるようになっています。
- Kubernetes は巨大なプロジェクトなので、各SIG 毎に担当(Subproject)が割り当てられていて、各SIG は独立して開発をしています。
- SIG 間を跨って話し合いをする必要が生じた場合は Working Groups が一時的に作られ、その枠組みの中で話し合うことになります。
-
SIG-Appsとは?
- Apps Special Interest Group の略称
- Kubernetes に対して、application を deploy したりすることに関することが対象。具体的には Pod, ReplicaSet, Deployments, DaemonSet, StatefulSet, Jobs, CronJob が対象。
- 詳細について知りたい方はこちらをご参照ください。
SIG-Apps 以外の SIG に関する変更は以下にまとめてありますので、合わせてご参照下さい。
注目の変更
Feature Gatesの中で今回Stageに変更のあったSig-Appsに関連する機能は以下になります。
- 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 で追加されていた機能がデフォルトで有効化されて使用できるようになっています。
v1.27 Release Notes
v1.27 Release Notes の中で SIG-Apps に関するものについて以下に和訳したものを記載します。
がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。
Deprecation(非推奨)
特になし
API Changes(変更)
-
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 が追加されました。
-
名前が有効でない 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 (withinkube-controller-manager
) で contextual logging を使用するようにマイグレーションされました。(#113622, @249043822) -
service.kubernetes.io/topology-aware-hints
のアノテーションの代わりにservice.kubernetes.io/topology-mode
が新しいアノテーションとして導入されました。 -
Job がオーナーになっている Pod には新しく
batch.kubernetes.io/job-name
とbatch.kubernetes.io/controller-uid
が付与されるようになります。
互換性を保つために古いjob-name
とcontroller-uid
のラベルについてもまだ付与されています。 (#114930, @kannon92) -
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)
Feature(機能追加)
-
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 (withinkube-controller-manager
) が contextual logging を使用するようにマイグレーションしました。(#113910, @mengjiao-liu) -
Deployment
controller (withinkube-controller-manager
) が contextual logging を使用するようにマイグレーションしました。 (#113525, @249043822) -
ReplicaSet
controller (withinkube-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 (withinkube-controller-manager
) が contextual logging を使用するようにマイグレーションしました。 -
PersistentVolume
protection controller (withinkube-controller-manager
) が contextual logging を使用するようにマイグレーションしました。 (#113584, @yangjunmyfm192085)
-
-
TTL after finished
controller (withinkube-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
フィールドは修飾名(likeexample.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
(withinkube-controller-manager
) が contextual logging を使用するようにマイグレーションしました。 (#113986, @songxiao-wang87)
Documentation(ドキュメント改善)
特になし
ENHANCEMENT(機能改善)
特になし
Bug or Regression(バグ修正)
-
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]
Other (その他の修正)
HPA
がコントロールする Pod から受け取るメトリクスが存在しない時のメッセージがミスリードを招くようになっていたので修正しました。(#114740, @kushagra98)
-
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
(withinkube-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]
所感
今回は変更点の件数自体はいつもより少し多かったんですが、新規機能の追加等の大きな変更はありませんでした。細かいバグとか仕様の調整が多数なされて、順当に Alpha の機能が Beta に移行した、比較的安定したリリースの印象でした。