3
1

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.34: SIG Storageの変更内容

Last updated at Posted at 2025-09-24

Kubernetes 1.34.0がリリースされました🎉

それでは、Kubernetes 1.34.0のCHANGELOGをベースにSIG Storageに関する変更について紹介します。

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

過去 3 リリースの変更内容:

:pencil: 所感

ほぼBug Fixのみで目玉となる新機能は残念ながらありません。
v1.34でのPromotionは次のとおりです。

GA

KEP KEP-1790: Support recovery from volume expansion failure
Status GA
Feature Gate RecoverVolumeExpansionFailure
Feature Blog Kubernetes v1.34: Recovery From Volume Expansion Failure (GA)
KEP KEP-3751: Kubernetes VolumeAttributesClass ModifyVolume
Status GA
Feature Gate VolumeAttributesClass
Comment GAに伴ってVolumeAttributesClass, VolumeAttributesClassListのAPI Versionがstorage.k8s.io/v1に上がっています
Feature Blog Kubernetes v1.34: VolumeAttributesClass for Volume Modification GA

Beta

KEP KEP-4876: Mutable CSINode Allocatable Property
Status Beta
Feature Gate MutableCSINodeAllocatableCount
Feature Blog Kubernetes v1.34: Mutable CSI Node Allocatable Graduates to Beta

:warning: Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)

  • Scheduling Frameworkが NodeInfosをPreFilter pluginに公開するようになりました。PreFilter pluginは引数としてNodeInfoリストを受け取れるようになります。(#130720, @saintube)
    • :pencil: Scheduler Pluginを開発している人にだけ影響のある変更です

:wastebasket: Deprecation (非推奨になったAPI)

:pencil: SIG Storage関連のものはありません

:earth_asia: API Changes (API周りの変更)

:pencil: KEP-4317: Pod Certificates

  • :warning: v1.34ではまだ完全に実装されていません
  • Pod自体のX.509証明書が発行できるようになります
  • Projected Volumeから使えます
  • PodCertificateRequestというAPIが導入されます(Kubeletが使う想定)
  • 既存のCertificateSigningRequestと似た仕組みになっていて、独自のsignerで署名することも可能
  • 新規導入されるCAによるsignerとしてkubernetes.io/kube-apiserver-client-podが用意される予定です
    • kube-apiserverに--pod-client-ca-fileが導入されます
    • v1.34ではこのSignerが実装されていません
  • rest.InClusterPodCertificateConfig()でprojected volumeのPod Certificateを読んでくれるようになる予定
  • Kubernetes v1.34 SIG-Authの変更内容でも紹介されているので参照ください

使い方

client-goで、rest.InClusterPodCertificateConfig()で取れるようになるらしいです。

apiVersion: v1
kind: Pod
...
  volumes:
  - name: kube-apiserver-client-certificate
    projected:
      sources:
      - podCertificate:
          signerName: "kubernetes.io/kube-apiserver-client-pod"
          keyType: ED25519
          credentialBundlePath: credentialbundle.pem
      - configMap:
          name: kube-root-ca.crt
          items:
          - key: ca.crt
            path: kube-apiserver-root-certificate.pem
      - downwardAPI:
          items:
          - path: namespace
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace

証明書の中身

含まれる内容はBound Service Account Tokenとほぼ同じです。

x.509
# 📝KEPに乗ってた証明書サンプル。UIDが入ってなさそう。
Certificate:
...
  X509v3 extensions:
            1.3.6.1.4.1.57683.1:
                0N..default..default..pem-pod.$277b9c49-39c3-4f23-b0b1-e889ef90c0b2..kind-worker
// Pod Identityの構造
type podIdentityASN1 struct {
    Namespace          string `asn1:"utf8,tag:0"`
    NamespaceUID       string `asn1:"utf8,tag:1"`
    ServiceAccountName string `asn1:"utf8,tag:2"`
    ServiceAccountUID  string `asn1:"utf8,tag:3"`
    PodName            string `asn1:"utf8,tag:4"`
    PodUID             string `asn1:"utf8,tag:5"`
    NodeName           string `asn1:"utf8,tag:6"`
    NodeUID            string `asn1:"utf8,tag:7"`
}  
  • CustomResourceDefinitionのSchemaでk8s-short-namek8s-long-nameというOpenAPI formatのサポート追加しました。(#132504, @jpbetz)
  • Kube-log-runner: 特定のサイズに到達したらlog出力を新しいファイルにローテートするための-log-file-sizeパラメータを追加しました。古いログファイルを自動的に削除するための-log-file-age、定期的にフラッシュするための-flush-intervalを追加しました. (#127667, @zylxjtu)
  • MutableCSINodeAllocatableCountがbetaに昇格しました(#132429, @torredil)
  • VolumeAttributesClassがGAに昇格しました。VolumeAttributesClass, VolumeAttributesClassList APIがstorage.k8s.io/v1に昇格しました(#131549, @carlory)
  • requiredフィールドのエラーメッセージが重複を取り除いてシンプルにしました(#132472, @xiaoweim)
  • ゼロ値のmetadata.creationTimestampがJSON, YAML, CBOR出力の際に省略され、もうnullとシリアライズされなくなりました(#130989, @liggitt)

:sparkle: Features (機能追加)

:fire: Failing Test (失敗しているテスト)

  • E2Eテスト"[Driver: csi-hostpath] [Testpattern: Dynamic PV (filesystem volmode)] volumeLimits should support volume limits"でPodとnamespaceがリークしないように修正(#132674, @jsafrane)

📃 Documentation (ドキュメント)

:pencil: SIG Storage関連のものはありません

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

  • KubeletにおいてRecovery Featureのステータスを判断する際に、より新しいResizeフィールドを確認するようにしました(#131418, @gnufied)
    • :pencil: KubeletとExternal ResizerのVersion Skewの考慮漏れに起因するバグです。これまでのKubeletでは、Kubeletが新しくてExternal Resizerが古い場合は考慮されていましたが、Kubeletが古くてExternal Resizerが新しいパターンが考慮されておらず、実際のResizeは成功しているのにPVCのstatusがNodeResizePendingのままになってしまっていました。この修正では、考慮漏れだったパターンにも対応するために、新しいExternal Resizerが更新するフィールドも見るように修正されました
  • ext, xfsファイルシステムのExpansion処理を呼び出す前にディスクジオメトリを読み取る機能を無効化しました(#131568, @gnufied)
    • :pencil: これまでxfs_io,dumpe2fsをつかってディスクサイズを取得し、resizeが必要かどうかを判断していましたが、これらのツールは正確な値を返さないことがあるため、事前のサイズチェックは行わず、正確にリサイズを行ってくれるresize2fs, xfs_growに委譲されるようになりました
  • Kubelet: CSIドライバがノードボリュームの拡張をサポートしていない場合に、アクセスモードがReadWriteManyなPVCで、ステータスに予期しないNodeResizeError状態が表示される不具合を修正しました(#131495, @carlory)
  • node-expand-not-requiredがannotateされているPVCの拡張をしないようにしました(#131907, @gnufied)
    • :pencil: ControllerExpandVolume完了時にNodeExpandVolumeが必要かどうかが返ってくる(ControllerExpandVolumeResponse.NodeResizeRequired)、これはExternal Resizerが受け取るのでKubeletが受け取れておらず、不要なNodeExpandVolumeを呼んでしまっていたのを改善する修正です。External Resizerでvolume.kubernetes.io/node-expansion-not-requiredannotationをつけて、Kubelet側でそのannotationがついていたらNodeExpandVolumeを呼ばないように修正されました
  • コントローラー側でのボリューム拡張が既に完了していた場合、ノード上での拡張処理を停止するように変更しました(#131868, @gnufied)
    • :pencil: ↑のPRと関係していますが、こちらのPRはKubeletがPVCのstatus(capacity)を見て拡張処理が終わっていると判断できる場合でも、NodeVolumeExpandを呼び続けてしまうバグを修正しています
  • 後続のエラー発生時にボリュームが既にマウントされていた場合、CSI JSONファイルの削除処理を停止するように変更しました(#131311, @gnufied)
    • :pencil: 実際のマウント処理が成功し、後続処理でエラーが出た場合に、実際にマウント済みなのにもかかわらずCSI JSONファイル(KubeletがCSIボリュームの状態管理に使う)を削除してしまっていたのを修正しています。

:microscope: Others (その他修正)

  • Volume Binding scheduler pluginにおいて、高頻度で発生するメッセージのVerbosityをV(4)からV(5)に下げることで、過剰なログ出力を削減しました(#132840, @ppmechlinski) [SIG Autoscaling, Scheduling and Storage] [sig/scheduling,sig/storage,sig/autoscaling]
  • ./test/e2eディレクトリ内で、非推奨となったパッケージk8s.io/utils/pointerk8s.io/utils/ptrに置き換えました(#132764, @PatrickLaabs)
  • pkg/apisディレクトリ内で、非推奨となったパッケージk8s.io/utils/pointerk8s.io/utils/ptrに置き換えました(2/2)(#132779, @PatrickLaabs)
  • pkg/controllerディレクトリ内で、非推奨となったパッケージk8s.io/utils/pointerk8s.io/utils/ptrに置き換えました(2/2)(#132784, @PatrickLaabs)
  • 型: Code, Statuspkg/scheduler/frameworkからstaging repoに移動しました。ユーザはimport pathをk8s.io/kubernetes/pkg/scheduler/frameworkからk8s.io/kube-scheduler/frameworkに更新する必要があります(#132087, @ania-borowiec)
  • 型: CycleState,StateData,StateKey,ErrNotFoundpkg/scheduler/frameworkからstaging repoに移動しました。scheduler framework内で各pluginに渡されているCycleStateは新しいインターフェースになりました(k8s.io/kube-scheduler/framework) (#131887, @ania-borowiec)
  • 型: NodeInfo, PodInfo, QueuedPodInfo, PodResource, AffinityTerm, WeightedAffinityTerm, Resource, ImageStateSummary, ProtocolPort, HostPortInfopkg/scheduler/frameworkからstaging repoに移動しました。ユーザはimport pathをk8s.io/kubernetes/pkg/scheduler/frameworkからk8s.io/kube-scheduler/frameworkに更新する必要があります。またフィールドアクセスを使っている箇所をgetter/setter関数を使うように更新する必要があります(#132457, @ania-borowiec)
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?