1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes 1.29: SIG-Apps の変更内容

Last updated at Posted at 2024-01-15

はじめに

このページではKubernetes v1.29 における 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に関連する機能は以下になります。

今回は既存の機能が昇格されただけで新機能の追加はありませんでした。

v1.29 Release Notes

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

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

:wastebasket: Deprecation(非推奨)

  • v1.22 から新しく CronJob を作成する際に .spec.scheduleTZCRON_TZ を指定できましたが、指定できなくなります。 v1.25+ から利用可能な .spec.timeZone を代わりに使用するようにしてください。 詳細はこちらを参照ください https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#unsupported-timezone-specification (#116252, @soltysh) [sig/apps]

    • :pencil: .spec.scheduleでタイムゾーンが指定できるようになった経緯は以前こちらで書いたので興味がある人は参照ください。意図せずできるようになっていたので元々非推奨だったのですが、今回から validation が追加されたという話になります。
  • networking alpha API ClusterCIDR が削除されました。 (#121229, @aojea) [sig/network,sig/apps,sig/cli,sig/testing,sig/cloud-provider]

    • :pencil: 既存のコントローラーに追加するのではなく、別途 CRD と新しい node-ipam controller を作成する方法で進めていくようになったので、既存の alpha API を削除されたようです。詳細が気になる方はこちらを参照ください。

:earth_asia: API Changes(変更)

  • PreStop lifecycle で新たに sleep のアクションが追加されました。 これによりコンテナが termination する前の指定した期間でコンテナを pause することができるようになりました。 (#119026, @AxeZhan) [sig/node,sig/api-machinery,sig/apps,sig/testing]

    • :pencil: これで PreStop のためにコンテナに sleep コマンドを追加しなくてもよくなるのでいいですね。
  • ServiceCIDR が新たに追加され、動的に Service ClusterIPs アドレスを設定できるようになります。 (#116516, @aojea) [sig/network,sig/api-machinery,sig/auth,sig/apps,sig/cli,sig/testing]

  • 新しく LoadBalancerIPMode feature gate のフィールドが追加されました。 (#119937, @RyanAoh) [SIG API Machinery, Apps, Cloud Provider, Network and Testing] [sig/network,sig/api-machinery,sig/apps,sig/testing,sig/cloud-provider]

  • 新しく certificates.k8s.io/v1alpha1 ClusterTrustBundle objects が pod でサポートされました。 (#113374, @ahmedtd) [sig/storage,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing]

  • 新しく DisableNodeKubeProxyVersion feature gate が追加されました。もし DisableNodeKubeProxyVersion を有効化した場合は kubeProxyVersion フィールドが設定されなくなります。 (#120954, @HirazawaUi) [sig/node,sig/api-machinery,sig/apps]

    • :pencil: node.Status.NodeInfo.KubeProxyVersion のバージョンが実際の kube-proxy のバージョンと異なっていたり、そもそも kube-proxy を使用しない構成になっていることもあるので、このフィールドを kubelet で管理するのを辞めていこうという話になります。
  • Job の status の Ready フィールドに書かれているコメントを修正しました。 (#121765, @mimowo) [sig/api-machinery,sig/apps]

  • Job pod failure policy action の FailIndex の API に書かれているコメントを修正しました。(#121764, @mimowo) [sig/api-machinery,sig/apps]

  • Go API: volume を使用する際に ResourceRequirements の構造体ではなく VolumeResourceRequirements を利用するようにリプレイスされました。 (#118653, @pohly) [sig/scheduling,sig/storage,sig/node,sig/api-machinery,sig/auth,sig/apps,sig/testing]

  • Job BackoffLimitPerIndexbeta になりました。 (#121356, @mimowo) [sig/apps]

  • Job の pod failure policy の onPodConditions が optional とマークされました 。(#120204, @mimowo) [sig/api-machinery,sig/apps]

    • :pencil: onExitCodes を指定するケースもあるので、onPodConditions が必ず必要というわけではないので、必須(required)だったのが任意(optional)という形に修正されています。
  • matchLabelKeys/mismatchLabelKeys に hard/soft PodAffinity/PodAntiAffinity が導入されました。 (#116065, @sanposhiho) [sig/scheduling,sig/api-machinery,sig/apps,sig/testing,sig/cloud-provider]

  • CSINodeExpandSecretGA となりデフォルトで有効化されます。CSI ドライバーは、このリリース以降、CSI Client によってオプションで送信される NodeExpansionリクエストで渡される secretRef の値を利用できるようになります。(#121303, @humblec) [sig/storage,sig/api-machinery,sig/apps]

  • CSI node driver が動作していない場合に NodeStageVolume が再度呼ばれるようになりました。 (#120330, @rohitssingh) [sig/storage,sig/apps,sig/testing]

  • ValidatingAdmissionPolicy の型チェックで CRDs と API extensions types がサポートされました。 (#119109, @jiahuif) [sig/api-machinery,sig/auth,sig/apps,sig/testing]

:sparkle: Feature(機能追加)

  • Pod 作成のイベントをトリガーに Job controller からラベル付けされて作成された Pod をトラッキングするメトリクス job_pods_creation_total が追加されました。 (#121481, @dejanzele) [sig/apps,sig/testing]

  • NodeLifeCycleController から TaintManager を分離しました。 (KEP-3902). (#119208, @atosatto) [sig/scheduling,sig/node,sig/api-machinery,sig/apps,sig/instrumentation,sig/testing]

  • ReadWriteOncePodGA になりました。 (#121077, @chrishenzie) [sig/scheduling,sig/storage,sig/node,sig/apps,sig/testing]

  • BackoffLimitPerIndex の機能に job_finished_indexes_total のメトリクスが追加されました。(#121292, @mimowo) [sig/apps,sig/testing]

  • PodReplacementPolicybeta になりました。 (#121491, @dejanzele) [sig/apps,sig/testing]

  • Pod に含まれる再起動可能な init container の resource が autoscaler によって再計算されるようになりました。 (#120001, @qingwave) [sig/autoscaling,sig/apps]

    • :pencil: これは init container を sidecar として利用できるようになったので、init container のコンテナもずっと起動したままのケースが発生するようになりました。そのため、そのリソースを autoscaler でも計算する必要性が出てきたので修正されたという話になります。
  • ノードに直接 token を bind する TokenRequestsalpha でサポートされました、token 使用時ノード名と uid が存在しているかチェックします。(該当の機能は ServiceAccountTokenNodeBindingServiceAccountTokenNodeBindingValidation で保護されています )(#120780, @munnerz) [sig/api-machinery,sig/auth,sig/apps,sig/cli,sig/testing]

  • kube-controller-manager: LegacyServiceAccountTokenCleanUpbeta になり、デフォルトで有効化されます。有効化されている時 --legacy-service-account-token-clean-up-period (デフォルト1年) で指定した期間を使用されておらず、.secrets list of a ServiceAccount object から参照もされておらず、pods からも参照されていない legacy service account token secrets には自動で kubernetes.io/legacy-token-invalid-since ラベルが付与されます。このラベルにより authentication layer は credentials を拒否します。 無効としてラベル付けされて --legacy-service-account-token-clean-up-period (デフォルト1年) 経過した credential と利用されていない secret は自動で削除されます。ラベルが付与された Secrets から kubernetes.io/legacy-token-invalid-since のラベルを削除すると再アクティブ化します。 (#120682, @yt2985) [sig/auth,sig/apps,sig/testing]

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

  • Job で作成された Pod から tracking finalizers 削除する冗長な処理を追加しました。この処理は Job が完了したと control plane からマークされた後に実行されます。 (#119944, @Sharpz7) [sig/apps]

  • ExternalIPs を使用する ServicesExternalTrafficPolicy を使用できるようになりました。 (#119150, @tnqn) [sig/network,sig/api-machinery,sig/apps,sig/cli,sig/testing,sig/release,sig/cloud-provider]

  • Parallel policy と PVC labels を持つ StatefulSet がスケールアップするときにクラッシュする可能性がある kube-controller-managerv1.28.0 における regression を修正しました。(#121142, @aleksandra-malinowska) [sig/apps]

  • cronjob controller が既に作成された Job の status を見失う可能性があるバグを修正しました。(#120649, @andrewsykim) [sig/apps]

  • PodDisruptionConditions がデフォルトで有効になったことによって発生した regression を修正しました。重複した key を持つ Pod が garbage collector により削除されないケースが修正されました。
    (#121103, @mimowo) [sig/scheduling,sig/node,sig/auth,sig/apps,sig/testing]

    • :pencil: 以下のように containerPort と protocol を重複しているなどの時にガベージコレクションがされなかったようです。

      containers:
        - name: nginx
          image: "nginx:latest"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
              name: http
              protocol: TCP
            - containerPort: 8080
              name: metrics
              protocol: TCP
      
  • TopologyCacheHasPopulatedHints method で同時に map にアクセスする不具合を修正しました。(#118189, @Miciah) [sig/network,sig/apps]

  • Pod Disruption Budget (PDB) で "{}," のような空の値が selector に設定されている場合に該当の namespace の pod がドレインされない問題が修正されました。(#119732, @sairameshv) [sig/apps]

    • :pencil: 以下のように selector を設定しているケースの話になります。期待としては {} と書いた時に全ての Pod を対象になることを期待しているとのことです。

      apiVersion: policy/v1
      kind: PodDisruptionBudget
      metadata:
        name: pdb
      spec:
        minAvailable: 100%  
        selector: {}
      

      そもそもこれは作成時に拒否されるのかな?と思っていたのでこういう書き方をして作成できることを知らなかったです。個人的にはこの不具合がずっと気づかれなかったことを考えるに、PDB は対象の Pod の特性に合わせて label 毎に指定しておいた方が無難かなと思いました。

  • eviction やノード障害の後に StatefulSet の pod が再起動しなくなる不具合を修正しました。(#120398, @aleksandra-malinowska) [sig/apps]

    • :pencil:toVersusさんがこちらにわかりやすくまとめてくれているのでご参照ください。
  • JobsResourceQuota に達した時に CronJob が clean up に失敗する可能性があるバグを修正しました。 (#119776, @ASverdlov) [sig/apps]

  • discovery requests に失敗した時に garbagecollection controller が重複したイベントを登録する不具合を修正しました。(#117992, @liggitt) [sig/api-machinery,sig/apps]

  • detach 失敗後の volume への attach が修正されました。detach 失敗後の volume を attach されたものとして扱わないようになりました。Kubernetes は pod で利用する前にそれらが完全に attach されているか確認するようになります。(#120595, @jsafrane) [sig/storage,sig/apps]

  • podRecreationPolicy: Failed が使用され、terminating pods の数が parallelism を超過した場合に Job controller が panic になる不具合を修正しました。 (#121147, @kannon92) [sig/apps]

  • cronjob controller の requeue time の計算が修正され、, failed や stuck した job のリキューが改善しました。
    (#121327, @soltysh) [sig/apps]

  • StatefulSet で image の更新時に partitioning 数より番号が小さい pod が削除されるケースを修正しました。(#120731, @adilGhaffarDev) [sig/apps,sig/testing]

  • terminating Pods を tracking する Job status を修正しました。 この field は他の変更がない限り更新されません。(#121342, @dejanzele) [sig/apps,sig/testing]

    • :pencil: これについてはちょっと内容を見ると changelog のメッセージと修正内容がマッチしてないように思えていて、ここでは主に job controller のテストの方に修正が入っています。
  • pod とそれぞれの namespace を host を共有する sysctls が禁止され、pod の作成・更新時に sysctls がチェックされるようになりました。 (#118705, @pacoxu) [sig/node,sig/apps]

    • :pencil: Kubernetes では Unsafe Sysctls というのがあって、kubelet 側で変更できないようになっています。kubelt 側で制限されているものを Pod 作成時に API Server のタイミングでチェックすることで、無駄な Pod の作成をなくすという話になります。

      apiVersion: v1
      kind: Pod
      metadata:
        name: sysctl-2
      spec:
        hostNetwork: true
        securityContext:
          sysctls:
          - name: net.ipv4.ip_local_port_range
            value: "40000 65535"
        containers:
        - name: sysctl
          image: docker.m.daocloud.io/library/nginx:1.14.1
          securityContext:
            privileged: true
      
  • DaemonSet のローリングアップデート時にスケジールの制約に合わないノードを対象から除外するように修正しました。DaemonSet のローリングアップデートが tolerations 等の起因でスタック する問題が解消されました。 (#119317, @mochizuki875) [sig/apps,sig/testing]

  • 以前は spec.typeLoadBalancer 出ない場合にも status.loadBalancer が設定できましたが、metadataspec が更新されると削除されていました。 spec.typeLoadBalancer でない時は設定できないようになります。稀にこれが期待しない動作になる場合は AllowServiceLBStatusOnNonLB feature gate を有効化することで元の挙動に戻すことがd系ます。この機能を有効化する場合は、コントリビューターが問題を理解できるように Kubernetes プロジェクトの issue に起票して下さい。(#119789, @thockin) [sig/apps,sig/testing]

  • scheduler: taint manager から報告されたイベントから apiVersion が欠落していたイベントを修正しました。(#114095, @aimuz) [sig/scheduling,sig/node,sig/apps]

:microscope: Other (その他の修正)

  • ResourceClaim のランダムなサフィックスの前にハイフンが追加されたので名前が読みやすくなりました。 (<pod name>-<claim name>-<random suffix>). (#120336, @pohly) [sig/node,sig/apps]

  • JobReadyPodsstable になりました。 feature gate を使って無効化することもできなくなります。 (#121302, @stuton) [sig/apps,sig/testing]

  • 以前のバージョンの Kubernetes on Google Cloud で workloads (e.g. Deployments, DaemonSets, etc.) 利用時に PersistentDisk volumes を利用時に read-only mode で使う必要がありました。このバリデーションはホストの実行コストが少なく殆どバリデーションをされていませんでした。もし特定のユースケースで問題となる場合は SkipReadOnlyValidationGCE を有効化して、Kubernete の bug として報告して下さい。 (#121083, @thockin) [sig/apps]

  • v1.28 で GA となった JobTrackingWithFinalizers の feature gate が削除されました。 (#119100, @bzsuni) [sig/apps]

  • LegacyServiceAccountTokenNoAutoGeneration feature gate が削除されました。(この機能は stable となり、常時有効化されます) (#120192, @SataQiu) [SIG Apps, Auth and Scheduling] [sig/scheduling,sig/auth,sig/apps]

  • DownwardAPIHugePages feature gate が削除されました。(この機能は stable となり、常時有効化されます) (#120249, @pacoxu) [SIG Apps and Node] [sig/node,sig/apps]

  • job_controller_job_sync_duration_seconds metric の resolution が 4ms1min 変更されました。 (#120577, @alculquicondor) [sig/apps,sig/instrumentation]

  • GetPodQOS(pod *core.Pod) function は PodStatus.QOSClass の値が設定されていた場合に格納されている値を返すようになります QOSClass の値を計算や評価に使いたい場合は ComputePodQOS(pod*core.Pod) を使うようにして下さい。 (#119665, @vinaykul) [sig/scheduling,sig/node,sig/api-machinery,sig/apps,sig/cli,sig/testing]

  • Statefulset.start.ordinal を削除するときのテストで新しい replicas の作成を待つようになりました。 (#119761, @soltysh) [sig/apps,sig/testing]

所感

今回は sig-apps がメインで開発する機能については新機能追加もなく、機能の安定化のみを行なった落ち着いたリリースになったのかなと思います。sig-apps がレビューで入っている物の中では個人的に印象的だったのは PreStop で sleep が使えるようになったのが便利だったので、必要に応じては自分もこの機能は使っていきたいなと思いました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?