Rook/Ceph v1.14 → v1.15 アップグレード手順(Helm版)

事前確認

Kubernetes バージョン確認

v1.15 からの破壊的変更として、Kubernetes の最低サポートバージョンが v1.26 になっています。

kubectl version

v1.26 未満の場合は先に Kubernetes をアップグレードしてください。

クラスタの健全性確認

アップグレード前に HEALTH_OK であることを確認します。

kubectl -n rook-ceph get cephcluster

kubectl -n rook-ceph get pods
# 全 pod が Running または Completed であること

v1.15 の破壊的変更 (Breaking Changes)

アップグレード前に以下を確認・対処してください。

CSI Holder Pods の Deprecation

csi-*plugin-holder-* という名前の Pod が存在するか確認します。

kubectl -n rook-ceph get pods | grep holder

存在する場合、アップグレード前に values.yaml に以下を追加する必要があります。 (v1.16 へのアップグレード前には完全な無効化が必要)

csi:
  disableHolderPods: false

Ceph COSI Driver の変更

COSI driver のイメージが更新されており、既存の BucketClaims / BucketAccesses に影響があります。 COSI を使用している場合は こちら を参照してください。

CephObjectStore のエンドポイント挙動変更

spec.hosting を設定している CephObjectStore がある場合、エンドポイントの挙動が変わります。 spec.hosting.advertiseEndpoint で明示的に設定してください。

アップグレード手順

Step 1: Helm repo の更新

helm repo update

利用可能な v1.15 チャートのバージョンを確認します。

curl -s https://charts.rook.io/release/index.yaml | yq '.entries[] | .[] | {name, version}' | grep v1.15

以降の手順では v1.15.x を実際の最新パッチバージョン (例: v1.15.9) に置き換えてください。

Step 2: rook-ceph (Operator) のアップグレード

rook-ceph-cluster より先に rook-ceph をアップグレードします。

現在の values を保存

helm get values rook-ceph -n rook-ceph > operator-values-current.yaml

values.yaml を準備

holder pods が存在する場合は csi.disableHolderPods: false を追記します。 存在しない場合は現在の values をそのまま使用できます。

cp operator-values-current.yaml operator-values.yaml

# operator-values.yaml
csi:
  disableHolderPods: false  # holder pods が存在する場合のみ追記

アップグレード実行

helm upgrade rook-ceph rook-release/rook-ceph \
  --namespace rook-ceph \
  -f operator-values.yaml \
  --version v1.15.9

Step 3: Operator の更新完了を確認

kubectl -n rook-ceph get pods -l app=rook-ceph-operator
# rook-ceph-operator pod が新バージョンで Running になること

Step 4: rook-ceph-cluster のアップグレード

rook-ceph (Operator) の更新完了後に実施します。

現在の values を保存

helm get values rook-ceph-cluster -n rook-ceph > cluster-values-current.yaml

values.yaml を確認・準備

ブログの構成(特定ノード・デバイス指定)を維持します。

cp cluster-values-current.yaml cluster-values.yaml

# cluster-values.yaml の storage セクション(変更しない)
storage:
  useAllNodes: false
  useAllDevices: false
  nodes:
    - name: "k8s-worker1"
      devices:
        - name: "/dev/nvme0n1p3"
    - name: "k8s-worker2"
      devices:
        - name: "/dev/nvme0n1p3"
    - name: "k8s-worker3"
      devices:
        - name: "/dev/nvme0n1p3"

アップグレード実行

helm upgrade rook-ceph-cluster rook-release/rook-ceph-cluster \
  --namespace rook-ceph \
  --set operatorNamespace=rook-ceph \
  -f cluster-values.yaml \
  --version v1.15.9

Step 5: アップグレード完了を監視

mon, mgr, OSD, MDS などのデーモンが順次再起動されます。 mon 更新中はクラスタが一時的に応答しない場合がありますが、正常な動作です。

watch --exec kubectl -n rook-ceph get deployments \
  -l rook_cluster=rook-ceph \
  -o jsonpath='{range .items[*]}{.metadata.name}{"  req/upd/avl: "}{.spec.replicas}{"/"}{.status.updatedReplicas}{"/"}{.status.readyReplicas}{"  rook-version="}{.metadata.labels.rook-version}{"\n"}{end}'

全 deployment の rook-versionv1.15.9 に統一されたら完了です。

バージョンが統一されたか確認する簡易コマンド:

kubectl -n rook-ceph get deployment \
  -l rook_cluster=rook-ceph \
  -o jsonpath='{range .items[*]}{"rook-version="}{.metadata.labels.rook-version}{"\n"}{end}' \
  | sort | uniq
# v1.15.9 の1種類だけになること

Step 6: 最終確認

kubectl -n rook-ceph get cephcluster
# PHASE: Ready、HEALTH: HEALTH_OK であること

kubectl -n rook-ceph get pods
# 全 pod が Running または Completed であること

Dashboard でも確認する場合:

kubectl port-forward -n rook-ceph svc/rook-ceph-mgr-dashboard 8443:8443

手順サマリ

ステップ 内容 備考
事前確認 K8s >= v1.26、HEALTH_OK 必須
変更点確認 holder pods, COSI, ObjectStore endpoint 該当する場合のみ対応
Step 1 helm repo update  
Step 2 helm upgrade rook-ceph (Operator 先行) cluster より先に実施
Step 3 Operator pod の Running 確認  
Step 4 helm upgrade rook-ceph-cluster storage 設定を維持
Step 5 全 deployment の rook-version 統一を待機 watch コマンドで監視
Step 6 HEALTH_OK 確認  

作業結果

クラスタの健全性確認

$ kubectl -n rook-ceph get cephcluster
NAME        DATADIRHOSTPATH   MONCOUNT   AGE    PHASE   MESSAGE                        HEALTH        EXTERNAL   FSID
rook-ceph   /var/lib/rook     3          607d   Ready   Cluster created successfully   HEALTH_WARN              18be74a6-d73c-4f2f-b5c6-267d7e2b43c9

$ kubectl -n rook-ceph get svc | grep mon
rook-ceph-mon-a                  ClusterIP   10.106.50.102    <none>        6789/TCP,3300/TCP   607d
rook-ceph-mon-b                  ClusterIP   10.101.18.234    <none>        6789/TCP,3300/TCP   607d
rook-ceph-mon-c                  ClusterIP   10.96.158.161    <none>        6789/TCP,3300/TCP   607d

$ kubectl -n rook-ceph exec -it rook-ceph-mon-a-785fb58fc5-6svnd -c mon -- \
  ceph --mon-host rook-ceph-mon-a:6789 \
       --keyring /etc/ceph/keyring-store/keyring \
       --name client.admin \
       crash archive-all

$ kubectl -n rook-ceph exec -it rook-ceph-mon-a-785fb58fc5-6svnd -c mon -- \
  ceph --mon-host "rook-ceph-mon-a:6789,rook-ceph-mon-b:6789,rook-ceph-mon-c:6789" \
       --keyring /etc/ceph/keyring-store/keyring \
       --name client.admin \
       crash archive-all

$ kubectl -n rook-ceph get cephcluster
NAME        DATADIRHOSTPATH   MONCOUNT   AGE    PHASE   MESSAGE                        HEALTH      EXTERNAL   FSID
rook-ceph   /var/lib/rook     3          607d   Ready   Cluster created successfully   HEALTH_OK              18be74a6-d73c-4f2f-b5c6-267d7e2b43c9

$ kubectl -n rook-ceph get pods
NAME                                                    READY   STATUS      RESTARTS          AGE
csi-cephfsplugin-6dnmp                                  2/2     Running     96 (7h12m ago)    607d
csi-cephfsplugin-ldf7c                                  2/2     Running     100 (7h12m ago)   607d
csi-cephfsplugin-lwjk2                                  2/2     Running     92 (7h12m ago)    607d
csi-cephfsplugin-provisioner-55d789d7bd-f8hfc           5/5     Running     0                 4h
csi-cephfsplugin-provisioner-55d789d7bd-gx64b           5/5     Running     0                 4h12m
csi-rbdplugin-kb2x2                                     2/2     Running     94 (7h12m ago)    607d
csi-rbdplugin-nkhfc                                     2/2     Running     92 (7h12m ago)    607d
csi-rbdplugin-provisioner-7c6dcb4dff-6b4mw              5/5     Running     0                 4h12m
csi-rbdplugin-provisioner-7c6dcb4dff-ltrpq              5/5     Running     0                 4h
csi-rbdplugin-qxg5k                                     2/2     Running     98 (7h12m ago)    607d
rook-ceph-crashcollector-k8s-worker1-6cf57cfc65-52fs2   1/1     Running     0                 4h12m
rook-ceph-crashcollector-k8s-worker2-76c4bb6698-cxnhg   1/1     Running     0                 4h
rook-ceph-crashcollector-k8s-worker3-bf489d69c-p7fsd    1/1     Running     0                 3h53m
rook-ceph-exporter-k8s-worker1-86bc5f746c-kmqxt         1/1     Running     0                 4h11m
rook-ceph-exporter-k8s-worker2-7b487cdfb8-xx5wv         1/1     Running     0                 4h
rook-ceph-exporter-k8s-worker3-86948f6d9f-6s7nq         1/1     Running     0                 3h53m
rook-ceph-mds-ceph-filesystem-a-7b4d7b9dc4-d57c2        2/2     Running     2 (3h53m ago)     4h
rook-ceph-mds-ceph-filesystem-b-6d45c6f856-k28js        2/2     Running     5 (3h54m ago)     4h12m
rook-ceph-mgr-a-86854b9cc5-shlhg                        3/3     Running     0                 4h12m
rook-ceph-mgr-b-b9476b944-jbh9d                         3/3     Running     0                 4h
rook-ceph-mon-a-785fb58fc5-6svnd                        2/2     Running     0                 4h12m
rook-ceph-mon-b-5d6d79754f-7ffmx                        2/2     Running     0                 4h
rook-ceph-mon-c-6c448864bb-kwrwg                        2/2     Running     0                 4h16m
rook-ceph-operator-7b786cb7fd-k7r26                     1/1     Running     0                 4h12m
rook-ceph-osd-0-6c7f9998ff-wn2zr                        2/2     Running     0                 4h16m
rook-ceph-osd-1-6ffbb5c9fd-vvxw2                        2/2     Running     0                 4h
rook-ceph-osd-2-b67867f79-grgzf                         2/2     Running     0                 4h12m
rook-ceph-osd-prepare-k8s-worker1-wf92n                 0/1     Completed   0                 3h52m
rook-ceph-osd-prepare-k8s-worker2-dt5d9                 0/1     Completed   0                 3h52m
rook-ceph-osd-prepare-k8s-worker3-r6ln4                 0/1     Completed   0                 3h52m
rook-ceph-rgw-ceph-objectstore-a-577b4dbfb9-q2qzk       2/2     Running     0                 4h

$ curl -s https://charts.rook.io/release/index.yaml | grep "version: v1.15"
    version: v1.15.9
    version: v1.15.8
    version: v1.15.7
    version: v1.15.6
    version: v1.15.5
    version: v1.15.4
    version: v1.15.3
    version: v1.15.2
    version: v1.15.1
    version: v1.15.0
    version: v1.15.0-beta.0
    version: v1.15.0-alpha.0
    version: v1.15.9
    version: v1.15.8
    version: v1.15.7
    version: v1.15.6
    version: v1.15.5
    version: v1.15.4
    version: v1.15.3
    version: v1.15.2
    version: v1.15.1
    version: v1.15.0
    version: v1.15.0-beta.0
    version: v1.15.0-alpha.0

$ helm upgrade rook-ceph rook-release/rook-ceph \
  --namespace rook-ceph \
  -f operator-values.yaml \
  --version v1.15.9
Release "rook-ceph" has been upgraded. Happy Helming!
NAME: rook-ceph
LAST DEPLOYED: Sat Mar  7 16:08:48 2026
NAMESPACE: rook-ceph
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
The Rook Operator has been installed. Check its status by running:
  kubectl --namespace rook-ceph get pods -l "app=rook-ceph-operator"

Visit https://rook.io/docs/rook/latest for instructions on how to create and configure Rook clusters

Important Notes:
- You must customize the 'CephCluster' resource in the sample manifests for your cluster.
- Each CephCluster must be deployed to its own namespace, the samples use `rook-ceph` for the namespace.
- The sample manifests assume you also installed the rook-ceph operator in the `rook-ceph` namespace.
- The helm chart includes all the RBAC required to create a CephCluster CRD in the same namespace.
- Any disk devices you add to the cluster in the 'CephCluster' must be empty (no filesystem and no partitions).

$ helm list -n rook-ceph
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
rook-ceph               rook-ceph       2               2026-03-07 16:08:48.915161506 +0900 JST deployed        rook-ceph-v1.15.9               v1.15.9    
rook-ceph-cluster       rook-ceph       1               2024-07-07 17:01:51.829417353 +0900 JST deployed        rook-ceph-cluster-v1.14.8       v1.14.8    

$ kubectl -n rook-ceph get pods -l app=rook-ceph-operator
NAME                                  READY   STATUS    RESTARTS   AGE
rook-ceph-operator-67f4bd7855-qbmcf   1/1     Running   0          90s

$ helm upgrade rook-ceph-cluster rook-release/rook-ceph-cluster \
  --namespace rook-ceph \
  --set operatorNamespace=rook-ceph \
  -f cluster-values.yaml \
  --version v1.15.9
Release "rook-ceph-cluster" has been upgraded. Happy Helming!
NAME: rook-ceph-cluster
LAST DEPLOYED: Sat Mar  7 16:15:54 2026
NAMESPACE: rook-ceph
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
The Ceph Cluster has been installed. Check its status by running:
  kubectl --namespace rook-ceph get cephcluster

Visit https://rook.io/docs/rook/latest/CRDs/ceph-cluster-crd/ for more information about the Ceph CRD.

Important Notes:
- You can only deploy a single cluster per namespace
- If you wish to delete this cluster and start fresh, you will also have to wipe the OSD disks using `sfdisk`
Copied title and URL