はじめに
このページでは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:Betahttps://github.com/kubernetes/enhancements/issues/3017 -
ReadWriteOncePod:Betahttps://github.com/kubernetes/enhancements/issues/2485
-
- Job
-
CronJobTimeZone:GAhttps://github.com/kubernetes/enhancements/issues/3140
-
- StatefulSet
-
StatefulSetStartOrdinal:Betahttps://github.com/kubernetes/enhancements/issues/3335 -
StatefulSetAutoDeletePVC:Betahttps://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) -
StatefulSetStartOrdinalfeature gate が Beta となり、デフォルトで有効化されます。 (#115260, @pwschuurman) -
topologySpreadConstraints の labelSelector を指定していない場合に matchLabelKeys が無効化されるようになりました。(#116535, @denkensk)
-
GCE では LoadBalancer Services で TCP や UDP 等の異なるプロトコルの port でのサポートを提供していません。 (#115966, @aojea) [SIG Apps and Cloud Provider]
-
これは機能追加ではなく、利用者向けの警告メッセージがソースコード上に追加されただけですね。
-
-
現在 GA となっている
GRPCContainerProbefeature gate は v1.29 で削除予定になります。該当の feature gate を設定している利用者は削除するようにしてください。(#116233, @SergeyKanzhelev) -
AllocationResultの構造体のresource.k8s.ioAPI に破壊的な変更が入りました。この変更により kubelet plugin のDynamicResourceAllocation機能で、複数の resource driver controllers からの割り当てができるようになります。 s(#116332, @klueska) -
Kubelet:
MemoryThrottlingFactorのデフォルト値を0.9に変更しmemory.highを計算する式を追加しました。 (#115371, @pacoxu) -
DaemonSetcontroller (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/grpcstandard 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 中のコンテナに割り当てるノードリソースを示します。 -
UpdateContainerResourcesCRI API は Linux と Windows の両方をサポートします。 (#102884, @vinaykul)-
これは In-place Update of Pod Resources に関する機能になります。詳細はこちらの KEP を参照ください・
-
-
-
StatefulSetAutoDeletePVCが Beta になりました。 (#116501, @mattcary) -
StatefulSetnames は 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 の
UserNamespacesStatelessPodsSupportfeature 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) -
ClusterRoleaggregation controller (withinkube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113910, @mengjiao-liu) -
Deploymentcontroller (withinkube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#113525, @249043822) -
ReplicaSetcontroller (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 を使用するようにマイグレーションしました。-
PersistentVolumeClaimprotection controller (withinkube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 -
PersistentVolumeprotection controller (withinkube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#113584, @yangjunmyfm192085)
-
-
TTL after finishedcontroller (withinkube-controller-manager) が contextual logging を使用するようにマイグレーションしました。(#113916, @songxiao-wang87) -
CronJob controllerが contextual logging を使用するようにマイグレーションしました。(#113428, @mengjiao-liu) -
ipamcontroller が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) -
OwnerReferencesPermissionEnforcementadmission 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 がはDisruptionTargetcondition に追加されません。 (#115056, @mimowo) -
ExternalNameのServiceはEndpointを作成しなくなります。 (#114814, @panslava) -
空でない
schedulingGatesを設定する時にnodeNameの設定が必要になりました。(#115569, @Huang-Wei) -
statefulsetstatus で一貫した 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 に移行した、比較的安定したリリースの印象でした。