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 #10271 と PR #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_LEVEL
は Ceph 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 LVs は sat さんが実装されたとのことで是非とも試したい機能の一つです。
とはいえ、全部の機能を試す時間はないので、今回はマニフェストの差分のみ…。 しかし、できる範囲でも変更内容を追っていくと新しい知識も得られるので、大きなアップデートがあったら追っていきたいですね。