LoginSignup
4
2

Kubernetes 1.27: SIG-Apps の変更内容

Last updated at Posted at 2023-04-14

はじめに

このページでは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 が対象。
      Kubernetes基礎_-_Google_Slides.png
    • 詳細について知りたい方はこちらをご参照ください。

SIG-Apps 以外の SIG に関する変更は以下にまとめてありますので、合わせてご参照下さい。

注目の変更

Feature Gatesの中で今回Stageに変更のあったSig-Appsに関連する機能は以下になります。

今回はSig-Appsで新しく入って機能はありませんでした。順当にステータスが Beta に更新されたので Alpha で追加されていた機能がデフォルトで有効化されて使用できるようになっています。

v1.27 Release Notes

v1.27 Release Notes の中で SIG-Apps に関するものについて以下に和訳したものを記載します。

:pencil: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

:wastebasket: Deprecation(非推奨)

特になし

:earth_asia: 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 が追加されました。

    • 新しい 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]
    • :pencil: これは Multiple Service CIDRs に関する変更になります。詳細はこちらの KEP を参照ください
  • 名前が有効でない DNS labels の workload resources (Pods, ReplicaSets, Deployments, Jobs, CronJobs, or ReplicationControllers) に関する警告が追加されました。(#114412, @thockin)

    • :pencil: 名前に.とかをつけた場合に警告が出るようになりました。
  • API: PodSpec のバリデーションで ResourceClaimResourceClaimTemplate の名前が正しくない場合に拒否されるようになりました。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]

    • :pencil: これは機能追加ではなく、利用者向けの警告メッセージがソースコード上に追加されただけですね。
  • 現在 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-namebatch.kubernetes.io/controller-uid が付与されるようになります。
    互換性を保つために古い job-namecontroller-uid のラベルについてもまだ付与されています。 (#114930, @kannon92)

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

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

    • :pencil: これは Pod Mutable Scheduling Directives に関する変更になります。詳細はこちらの KEP を参照ください
  • references から kubernetes.io/grpc standard appProtocol が削除されました。(#116866, @LiorLieberman) [SIG API Machinery and Apps]

    • :pencil: これはソースコード上のコメントの変更のみで、機能としては特に変更はありません。
  • 非推奨となっていた --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)

    • :pencil: これはソースコード上のコメントの変更のみで、機能としては特に変更はありません。
  • API reference の Requests に対して limits を超えてはならない旨を追記しました。(#115434, @ehashman)

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

    • :pencil: これもみた感じソースコード上のコメントが変更されているだけで、機能としては変更がなさそうです。
  • /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)
      • :pencil: これは In-place Update of Pod Resources に関する機能になります。詳細はこちらの KEP を参照ください・
  • StatefulSetAutoDeletePVC が Beta になりました。 (#116501, @mattcary)

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

  • resource.k8s.io/v1alpha1resource.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)

:sparkle: Feature(機能追加)

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

    • :pencil: Indexed Jobs で spec.Completions の変更条件が緩和された話になります。
  • kubelet のUserNamespacesStatelessPodsSupport feature gate が有効化することで別の user namespace で stateless pod を起動させることができるようになります。 (#116377, @giuseppe) [SIG Apps, Node and Storage]

    • :pencil: これは 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 controllercontextual logging を使用するようにマイグレーションしました。(#113428, @mengjiao-liu)

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

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

    • :pencil: これは Allow updating scheduling directives of jobs に関する変更になります。詳細はこちらの KEP を参照ください
    • :pencil: 通常だと request の値見てスケジュールできなかったら Pending のステータスになるところを Pod を suspend の状態で作成して実行開始を制御したいみたいケースで使う機能が拡充されたようです。
  • Pods の spec.terminationGracePeriodSeconds が無効な負の値が指定されていた場合に terminationGracePeriodSeconds1 になるようになりました。(#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/tlsSecret は cert が private key と一致することを検証するようになりました。(#113581, @aimuz)

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

:page_facing_up: Documentation(ドキュメント改善)

特になし

:tools: ENHANCEMENT(機能改善)

特になし

:bug: Bug or Regression(バグ修正)

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

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

    • :pencil: 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)

  • ExternalNameServiceEndpoint を作成しなくなります。 (#114814, @panslava)

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

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

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

:microscope: 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 (within kube-controller-manager) が contextual logging を使用するようにマイグレーションしました。 (#115332, @obaranov1) [SIG Apps]

  • sample-controllercontextual 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 に移行した、比較的安定したリリースの印象でした。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2