Rook の新バージョン v1.10.0 がリリースされたようなので、早速、自宅ラボの Rook/Ceph をアップグレードしてみます。

マイナーバージョンが上がったときくらいは変更内容を追わないと、と思ってマニフェストの差分を確認しました。

アップグレード手順

アップグレードは公式ドキュメントに載っている手順どおりに進めました。

自宅ラボの Rook は ArgoCD で管理しているので、クラスタ用リポジトリの以下のマニフェストを v1.10.0 の内容でマージしただけアップグレード完了しました。

  • common.yaml
  • crds.yaml
  • operator.yaml
  • cluster.yaml

今回は common.yaml と operator.yaml の変更点を見ていきます。 cluster.yaml は Ceph のバージョンが違うだけなので割愛、crds.yaml は変更内容が多いため諦め。

アップグレード前の Rook のバージョンは v1.9.5 です。

common.yaml

common.yaml には Namespace や RBAC 関連のリソースが記述されています。

削除

Kubernetes v1.25 で PSP が正式に廃止されたことが起因で、common.yaml から PSP に関連したリソースが削除されています。

そして v1.25 未満の Kubernetes 向けに PSP 関連をまとめた psp.yaml が作られています。

リソース 名前 PR
ClusterRole psp:rook #10816
ClusterRoleBinding rook-ceph-system-psp #10816
ClusterRoleBinding rook-csi-cephfs-plugin-sa-psp #10816
ClusterRoleBinding rook-csi-cephfs-provisioner-sa-psp #10816
ClusterRoleBinding rook-csi-rbd-plugin-sa-psp #10816
ClusterRoleBinding rook-csi-rbd-provisioner-sa-psp #10816
ClusterRoleBinding cephfs-csi-nodeplugin #10033
PodSecurityPolicy 00-rook-privileged #10816
RoleBinding rook-ceph-cmd-reporter-psp #10816
RoleBinding rook-ceph-default-psp #10816
RoleBinding rook-ceph-mgr-psp #10816
RoleBinding rook-ceph-osd-psp #10816
RoleBinding rook-ceph-purge-osd-psp #10816
RoleBinding rook-ceph-rgw-psp #10816

また、PSP 関連とは別に ClusterRoleBinding cephfs-csi-nodeplugin が削除されています。

上記の ClusterRoleBinding で紐付けられている ClusterRole は削除されずに残っていますが、マニフェストに「Issue #10141 がクローズされたら ClusterRole を削除する」というコメントがありました。

Issue #10141 には

If we update to the latest operator sdk v1.8 we can use a new flag for –extra-service-accounts, then we can remove the placeholder role and binding.

訳)最新の Operator SDK v1.8 に更新すると --extra-service-accounts フラグを使えるので、関連する Role と Binding を削除できる

とあります。 現行バージョン(いくつ?)では、CSV 生成用の Role を作成していたようで、この Role が不要になるとのことです。

はじめ、CSV のことを “Comma Separated Values” と思っていたのですが、調べてみると Operator SDK で利用される Cluster Service Version の略のようでした。

  • 5.7. クラスターサービスバージョン (CSV) の定義 OpenShift Container Platform 4.11 | Red Hat Customer Portal

    クラスターサービスバージョン (CSV) は、ClusterServiceVersion オブジェクトで定義され、Operator Lifecycle Manager (OLM) によるクラスターでの Operator の実行をサポートする Operator メタデータから作成される YAML マニフェストです。

    これは、ユーザーインターフェースにロゴ、説明、およびバージョンなどの情報を設定するために使用される Operator コンテナーイメージに伴うメタデータです。

    CSV は、Operator が必要とする RBAC ルールやそれが管理したり、依存したりするカスタムリソース (CR) などの Operator の実行に必要な技術情報の情報源でもあります。

変更

変更されているリソースは RBAC の権限見直しでした。

リソース 名前 変更内容 PR
ClusterRole cephfs-csi-nodeplugin nodes リソースの get 権限のみに変更 #10033
ClusterRole cephfs-external-provisioner-runner 一部権限削除 #10271
ClusterRole rbd-csi-nodeplugin 一部権限削除 #10033
ClusterRole rbd-external-provisioner-runner 一部権限削除 #10033
Role cephfs-external-provisioner-cfg 一部権限削除 #10033
Role rbd-external-provisioner-cfg 一部権限削除 #10033
Role rook-ceph-mgr resources, verbs の指定が * から個別記載に変更 #10563

PR #10033 は Ceph CSI に不要な RBAC 設定があったため整理したようです。

PR #10271PR #10563 は Issue が上がっていなくて動機を把握できませんでした…。

operator.yaml

operator.yaml には ConfigMap rook-ceph-operator-config と Deployment rook-ceph-operator が記述されています。

新規追加

まずは ConfigMap rook-ceph-operator-config から。

Key Value PR
CSI_ENABLE_METADATA “true” #10736
CSI_CLUSTER_NAME “my-prod-cluster” #10736
CSI_SIDECAR_LOG_LEVEL “0” #10639
CSI_ENABLE_LIVENESS “false” #10647

CSI_SIDECAR_LOG_LEVELCeph CSI のサイドカーコンテナのログレベルを調整可能にしたようです。

サイドカーコンテナは複数あるのですが、PR 内で「個別にログレベル設定しなくてもいいのか?→個別に設定すると複雑になり価値がなくなるかも」というような議論がされていました。 普段ここまで PR をチェックしないので、こんな形で議論してるんだなぁと勉強になりました。

つぎに Deployment rook-ceph-operator の追加分。

設定項目 設定値 PR
spec.strategy.type Recreate #10547

アップデートストラテジに Recreate が設定されました。 Kubernetes のアップデートストラテジはデフォルトで RollingUpdate になります。

Operator Pod を更新する際は RollingUpdate より Recreate のほうが適しいているようですが、Issue #10237 を読んでもなぜ適しているか理解できませんでした…。

変更

ConfigMap rook-ceph-operator-config と Deployment rook-ceph-operator ともに変更点があります。

まずは ConfigMap のほうから。

Key 変更前 Value 変更後 Value PR
CSI_CEPHFS_FSGROUPPOLICY “ReadWriteOnceWithFSType” “File” #10503
ROOK_CSI_CEPH_IMAGE “quay.io/cephcsi/cephcsi:v3.6.2” “quay.io/cephcsi/cephcsi:v3.7.0” #10774
ROOK_CSIADDONS_IMAGE “quay.io/csiaddons/k8s-sidecar:v0.2.1” “quay.io/csiaddons/k8s-sidecar:v0.4.0” #10454

PR #10503 で CephFS CSI ドライバの fsGroupPolicy を変更しているらしいのですが、こちらも理解できずでした。 CSI の理解が乏しいのでドキュメントを読み込む必要がありますね。

参考に、アップグレード後の CSIDriver rook-ceph.cephfs.csi.ceph.com は以下のようになっていました。

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  creationTimestamp: "2022-09-01T05:02:25Z"
  name: rook-ceph.cephfs.csi.ceph.com
  resourceVersion: "109510964"
  uid: 9e080f79-a7c8-404c-85e2-d65a57bb1433
spec:
  attachRequired: true
  fsGroupPolicy: File    # ReadWriteOnceWithFSType から変更された
  podInfoOnMount: false
  requiresRepublish: false
  storageCapacity: false
  volumeLifecycleModes:
  - Persistent

あとは各コンテナや Rook/Ceph 本体のバージョンが上がっています。

設定項目 変更前設定値 変更後設定値 PR
spec.template.spec.containers[].image rook/ceph:v1.9.5 rook/ceph:v1.10.0 #10850

あとがき

結局、理解できなかった部分が多く、マニフェストの差分の PR リンク集になってしまい、面白みのない内容になってしまいました。

v1.10.0 の変更内容はこれだけではないです。 Toolbox が Rook Operator イメージから Ceph イメージを使用するようになったり、RGW で Server Site Encryption を使えるようになったり、OSDs on LVssat さんが実装されたとのことで是非とも試したい機能の一つです。

とはいえ、全部の機能を試す時間はないので、今回はマニフェストの差分のみ…。 しかし、できる範囲でも変更内容を追っていくと新しい知識も得られるので、大きなアップデートがあったら追っていきたいですね。