Status: Draft (2026-10-29), based on chart originals, unmeasured. All values are from Rook
v1.21.1tag pointing commit09d2f0d8d883b70b30de796c4390371be725ff3bofdeploy/charts/rook-ceph/values.yamlanddeploy/charts/rook-ceph-cluster/values.yamlread directly, and the line numbers in the table are the lines of that file. Total resources and capacity are calculated valuesusing defaults from values and Ceph documentation and were not measured. Actual pods and capacity running in the TT Lab cluster (3 VMs, each with a 17GiB empty disk) will be covered in Part 4. Writing convention: Measured data is the default, unmeasured items are marked as "Unmeasured", and items not found in the original text are marked as "Unconfirmed".
Table of Contents
- 1. There are three charts, and there is an order
- 2. Important values in rook-ceph (operator chart)
- 3. Outer values of rook-ceph-cluster
- 4. cephClusterSpec: CephCluster itself
- 5. Default values for block pool, filesystem, and object store
- 6. Dangerous places if default values are used as-is
- 7. When reducing memory and CPU in the lab cluster
- 8. Conclusion
- References
1. There are three charts, and there is an order
The Rook documentation (Helm Charts Overview) introduces three charts for v1.21. It is commonly known that "you just need to install rook-ceph and rook-ceph-cluster two charts," but starting from v1.20, another one has been added in the middle.
| Order | Chart | Where | What it creates |
|---|---|---|---|
| 1 | rook-ceph |
Rook repository | Rook operator Deployment, CRD, RBAC, subchart ceph-csi-operator 1.1.0 |
| 2 | ceph-csi-drivers |
Helm repository for ceph-csi-operator, with values tailored by Rook | OperatorConfig, RBD and CephFS Driver CRs, driver pods RBAC |
| 3 | rook-ceph-cluster |
Rook repository | CephCluster, block pool / filesystem / object store CRs, their StorageClasses, toolbox (disabled by default) |
If you omit step 2, PVCs will remain stuck in pending. The upgrade documentation notes that without this chart, the CSI drivers will enter a failed state due to missing service accounts, and the installation procedure in the operator chart documentation also follows the order: ‐operator chart → CSI driver chart → cluster‐ (Ceph Operator Helm Chart,
Rook Upgrades).
ceph-csi-drivers , because installing with default values alone causes the driver to fail, the documentation emphasizes that you must also include the Rook repository's
deploy/charts/ceph-csi-drivers/values.yaml. That file adjusts the driver name to match the operator namespace, such as rook-ceph.rbd.csi.ceph.com .
helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace -n rook-ceph rook-ceph rook-release/rook-ceph -f operator-values.yaml
helm repo add ceph-csi-operator https://ceph.github.io/ceph-csi-operator
helm install -n rook-ceph ceph-csi-drivers ceph-csi-operator/ceph-csi-drivers \
-f https://raw.githubusercontent.com/rook/rook/v1.21.1/deploy/charts/ceph-csi-drivers/values.yaml
helm install -n rook-ceph rook-ceph-cluster rook-release/rook-ceph-cluster \
--set operatorNamespace=rook-ceph -f cluster-values.yaml
The command is copied directly from the documentation example. The cluster chart documentation recommends not copying the entire values file, but rather creating a file containing only the values you want to change.
For reference, the tag Chart.yaml in both charts specifies version: 0.0.1 , suggesting that the chart version numbers are appended during the release process (unconfirmed). Starting from v1.21, OCI chart tags do not include v .
2. Important values in rook-ceph (operator chart)
The entire file is short, around 245 lines (values.yaml).
| Key | Default | Meaning and Notes | Line |
|---|---|---|---|
image.tag |
v1.21.1 |
Operator image docker.io/rook/ceph |
L10 |
crds.enabled |
true |
The chart creates and updates CRDs. Set this only upon initial installationWarning: Disabling this later may destroy the cluster | L21 |
resources |
Requests CPU 200m, memory 128Mi; Memory limit 512Mi | Operator Pod Resources | L24 |
unreachableNodeTolerationSeconds |
5 |
Moving the operator pod when a node becomes unreachable. 5 seconds instead of Kubernetes default 5 minutes | L42 |
currentNamespaceOnly |
false |
Whether to watch only the CephCluster in its own namespace | L45 |
logLevel |
INFO |
ERROR·WARNING·INFO·DEBUG |
L58 |
containerSecurityContext |
runAsNonRoot, UID 2016, remove all capabilities | Operator container security context | L71 |
allowLoopDevices |
false |
Whether to use loop devices as OSDs on test clusters | L78 |
monRunAsRoot |
false |
Whether to run mon pods as root | L81 |
deleteUnusedCrushRules |
true |
Delete unused auto-generated CRUSH rules after mgr starts | L84 |
csi.installCsiOperator |
true |
Install the ceph-csi-operator subchart | L95 |
csi.cephcsi , and 7 other images |
All empty values | Leave blank to use ceph-csi-operator's built-in images. Specify repository and tag only when changing | L102 |
csi.serviceMonitor.enabled |
false(5-second interval when enabled) |
ServiceMonitor for CSI metrics | L144 |
enableDiscoveryDaemon |
false(Interval 60m) |
Daemon that periodically discovers new disks on nodes | L156 |
cephCommandsTimeoutSeconds |
"15" |
Timeout (in seconds) for ceph commands called by the operator | L161 |
scaleDownOperator |
false |
A switch to scale the operator to 0 for manual maintenance when deploying via GitOps | L169 |
enforceHostNetwork |
false |
Place all Rook pods on the host network (for environments without CNI) | L213 |
disableDeviceHotplug |
false |
Whether to disable the behavior of automatically creating OSDs when new devices appear | L216 |
enableOBCWatchOperatorNamespace |
true |
Whether the OBC provisioner watches the operator namespace | L229 |
obcAllowAdditionalConfigFields |
"maxObjects,maxSize" |
Additional fields that OBC users can specify. Comments warn that the rest (bucket policies, lifecycle, owner, etc.) are dangerous | L240 |
monitoring.enabled |
false |
When enabled, the operator gets RBAC to create ServiceMonitor. Prometheus must be present first | L245 |
Most CSI configurations have moved away from this chart. Previously, values like provisioner replica count, kubelet path, and per-driver resources were set under csi in this chart, but upgrade documentation now instructs to find such values in the ceph-csi-drivers chart configuration. What remains in this chart for csi are whether to install subcharts, image overrides, and ServiceMonitor. Configurations for the ceph-csi-operator subchart itself are written in the values
ceph-csi-operator section (L86).
3. Outer values of rook-ceph-cluster
From here on is the 844-line cluster chart
(values.yaml).
cephClusterSpec ). We start by looking at values outside of it.
| Key | Default Value | Meaning and Notes | Line |
|---|---|---|---|
operatorNamespace |
rook-ceph |
Namespace where the operator resides. Becomes the prefix of the StorageClass provisioner name | L6 |
configOverride |
None | Content to append to ceph.conf | L16 |
toolbox.enabled |
false |
rook-ceph-tools Deployment. Image is the same as the Ceph image. Requests 128Mi, limit 1Gi |
L26 |
monitoring.enabled |
false |
Prometheus integration. metricsDisabled: false , so mgr's prometheus module and exporter are enabled by default |
L72 |
monitoring.createPrometheusRules |
false |
Whether to create Ceph alert rules (PrometheusRule) | L76 |
cephImage |
quay.io/ceph/ceph:v20.2.4, allowUnsupported: false |
Ceph Tentacle. The comment recommends pinning to a tag with a date like v20.2.4-20260818 for production |
L124 |
ingress.dashboard, route.dashboard |
empty | When exposing the dashboard via an Ingress or HTTPRoute | L475 |
cephFileSystemVolumeSnapshotClass, cephBlockPoolsVolumeSnapshotClass |
enabled: false |
Snapshot class. Enable if you want to use it | L642 |
csiDriverNamePrefix |
empty | If left empty, the operator namespace is prefixed to the driver name | L844 |
4. cephClusterSpec: The CephCluster itself
cephClusterSpec goes directly into the spec of the CephCluster CR. The cluster chart documentation notes that this default value is "just an example and unlikely to fit your cluster."
| Key | Default Value | Meaning and Notes | Line |
|---|---|---|---|
dataDirHostPath |
/var/lib/rook |
Host path for mon data and configuration. If you do not delete this directory upon reinstalling, mons will not start in the new cluster | L150 |
skipUpgradeChecks |
false |
Whether to skip pre-upgrade checks | L156 |
continueUpgradeAfterChecksEvenIfNotHealthy |
false |
Whether to continue even if PGs are not clean | L159 |
waitTimeoutForHealthyOSDInMinutes |
10 |
Wait time for the state to become safe to stop an OSD | L166 |
upgradeOSDRequiresHealthyPGs |
false |
Whether PGs must be healthy to start OSD upgrades | L171 |
security.cephx.csi.keyType |
aes |
Comment: Required if node kernel is less than 7.0 | L176 |
mon.count |
3 |
Number of mons. Documentation suggests 1 to 9, odd numbers recommended | L181 |
mon.allowMultiplePerNode |
false |
Multiple mons on a single node. For test environments only, at the cost of data loss | L184 |
mgr.count |
2 |
One active, one standby. If set to 2, a mgr sidecar is also attached | L190 |
mgr.modules |
rook module disabled |
Comments state that the rook mgr module is not recommended | L196 |
dashboard.enabled·ssl |
true·true |
Dashboard enabled; self-signed certificate if none provided | L201 |
network.connections.encryption |
false |
Encryption in transit. Requires kernel 5.11 or higher to enable | L223 |
network.connections.compression |
false |
Compression in transit | L227 |
network.connections.requireMsgr2 |
true |
Close msgr v1 port (6789) and use v2 (3300) only. Requires kernel 5.11 or higher | L231 |
crashCollector.disable |
false |
Daemon crash dump collector (one pod per node) | L253 |
logCollector |
Enabled, daily, up to 500M | Log file rotation sidecar per daemon | L260 |
cleanupPolicy.confirmation |
"" |
Part 2, Section 7. Only when deleting yes-really-destroy-data |
L271 |
cleanupPolicy.sanitizeDisks |
quick·zero· Once |
Disk wiping method | L277 |
removeOSDsIfOutAndSafeToRemove |
false |
Whether to automatically remove OSDs that are out and safe to delete | L409 |
priorityClassNames |
mon·osd system-node-critical, mgr system-cluster-critical |
Prevent premature eviction when resources are scarce | L412 |
storage.useAllNodes |
true |
All nodes as storage nodes | L418 |
storage.useAllDevices |
true |
All usable devices as OSDs | L419 |
storage.deviceFilter·nodes |
Commented out | Device name regex, per-node device list | L420 |
disruptionManagement.managePodBudgets |
true |
PodDisruptionBudget for OSD·mon·RGW·MDS managed by the operator | L446 |
disruptionManagement.osdMaintenanceTimeout |
30 |
Time (minutes) to hold fault domains draining with noout | L449 |
healthCheck.daemonHealth |
mon 45s, osd 60s, status 60s | Check interval. Since mon's timeout is not specified, the code default of 10 minutes (Part 2) is used |
L453 |
Resource requests (resources)
cephClusterSpec.resourcesis the default value of (L340). Rook documentation states that "if too low, it only logs a warning and starts anyway," and also lists the recommended minimum thresholds corresponding to it(CephCluster CRD). Looking at the source code, this check is based on the limit , and considers it an error if the limit is smaller than the request
(spec.go#L486-L520).
| Target | Request CPU | Request Memory | Limit Memory | Rook Recommended Min | Line |
|---|---|---|---|---|---|
| mgr | 500m | 512Mi | 1Gi | 512MB | L341 |
| mon | 1000m | 1Gi | 2Gi | 1024MB | L347 |
| osd | 1000m | 4Gi | 4Gi | 2048MB | L353 |
| prepareosd | 500m | 50Mi | None (recommended not to set) | No limit | L359 |
| mgr-sidecar | 100m | 40Mi | 100Mi | Limit 100MB, Request 40MB | L371 |
| crashcollector | 100m | 60Mi | 60Mi | 60MB | L377 |
| logcollector | 100m | 100Mi | 1Gi | Unverified | L383 |
| cleanup | 500m | 100Mi | 1Gi | Unverified | L389 |
| exporter | 50m | 50Mi | 128Mi | Limit 128MB, Request 50MB | L395 |
| cmd-reporter | 500m | 100Mi | 1Gi | Unverified | L401 |
The documentation states that if you lower the OSD memory, Rook adjusts osd_memory_target of Ceph to match. As seen in Part 1, the Ceph default for this value is 4Gi, so the chart default (4Gi) is equal to the Ceph default. The resources for MDS and RGW are located in their respective sections rather than here (Section 5).
5. Defaults for Block Pools, Filesystems, and Object Stores
By default, the cluster chart creates one of each of these three types and attaches a StorageClass to each. These StorageClasses are created by the chart template, not the operator (Part 2, Section 9).
cephBlockPools: ceph-blockpool and StorageClass ceph-block
| Key | Default | Notes | Line |
|---|---|---|---|
spec.failureDomain |
host |
Different host per replica | L520 |
spec.replicated.size |
3 |
Three copies | L522 |
storageClass.isDefault |
true |
Becomes the cluster's default StorageClass | L531 |
storageClass.reclaimPolicy |
Delete |
Deletes the RBD image when the PVC is deleted | L532 |
storageClass.allowVolumeExpansion |
true |
Allow volume expansion | L533 |
storageClass.volumeBindingMode |
Immediate |
Create PVC immediately upon creation | L534 |
parameters.imageFormat |
"2" |
RBD image format | L559 |
parameters.imageFeatures |
layering |
Note: Kernel RBD supports full features starting from 5.4, but defaults to layering only | L565 |
parameters Six Secret pairs for |
rook-csi-rbd-provisioner, rook-csi-rbd-node |
cephx keys to be used for provisioner, expand, publish, node-stage, modify, and node-publish. Created by the operator (Part 2). | L568 |
parameters."csi.storage.k8s.io/fstype" |
ext4 |
Note: In configurations where volumes are mounted on the same node as OSDs, XFS may deadlock and is not recommended. | L585 |
The template (cephblockpool.yaml) appends
provisioner: <operatorNamespace>.rbd.csi.ceph.com and pool·clusterID(cluster namespace).
cephFileSystems: ceph-filesystem and StorageClass ceph-filesystem
| Key | Default | Notes | Line |
|---|---|---|---|
metadataPool.replicated.size |
3 |
Metadata pool | L595 |
dataPools[0] |
Name data0, host, size 3 |
Data pool | L597 |
metadataServer.activeCount |
1 |
One active MDS, Rook spins up twice that amount (two) | L603 |
metadataServer.activeStandby |
true |
Standby MDS keeps cache warm | L604 |
metadataServer.resources |
CPU request 1000m, memory 4Gi, limit 4Gi | Rook recommends MDS memory of 4096MB or more, matching mds_cache_memory_limit as the limit |
L605 |
storageClass.isDefault |
false |
L614 | |
storageClass.pool |
data0 |
L617 | |
storageClass.reclaimPolicy |
Delete |
L618 |
Since the preserveFilesystemOnDelete of CephFilesystem is not in the chart, the CRD default false is used. This means that deleting the CR also deletes the filesystem (CephFilesystem CRD).
cephObjectStores: ceph-objectstore and StorageClass ceph-bucket
| Key | Default | Notes | Line |
|---|---|---|---|
metadataPool |
host, replication size 3 |
Bucket index, etc. | L670 |
dataPool.erasureCoded |
K=2, M=1, host |
Data pool uses erasure coding | L674 |
dataPool.parameters.bulk |
"true" |
PG autoscaler assigns many PGs from the start (Part 1) | L680 |
preservePoolsOnDelete |
true |
Pools are preserved even if the CR is deleted | L681 |
gateway.port |
80 |
HTTP. securePortCertificates commented out |
L683 |
gateway.instances |
1 |
Single RGW pod | L692 |
gateway.resources |
CPU request 1000m, memory 1Gi, limit 2Gi | L684 | |
storageClass |
ceph-bucket, Delete, region: us-east-1 |
Provisioner is <클러스터 네임스페이스>.ceph.rook.io/bucket |
L701 |
ingress.enabled·route.enabled |
false |
When exporting outside the cluster | L712 |
Multi-site (realm, zonegroup, zone), object store users, and EC block pools are only included as comments in values and are not created by default (starting from L743).
6. Areas Dangerous to Use with Default Settings
Warning 1.
useAllNodes: true+useAllDevices: true(L418, L419). All available devices on all nodes become OSDs and are formatted. As seen in Part 2, devices that are mounted or have filesystem/OSD signatures are skipped, but empty disks with no signatures are claimed without asking. This targets disks attached for other purposes or those not yet formatted. The CephCluster documentation states thatuseAllDevicesis "not recommended unless in a highly controlled environment with no risk of destroying devices," and recommends specifying nodes usinguseAllNodes: falsein production. At a minimum, specifydeviceFilter(e.g., a regex matching only empty disk names in a practice VM) or node-specificdevices.
Warning 2.
ceph-blockofisDefault: true(L531). The moment you install it,ceph-blockbecomes the default StorageClass for the entire Kubernetes cluster. If another default StorageClass already exists, there will be two defaults, and Kubernetes will usestorageClassNamethe most recently created default StorageClass for PVCs without (Kubernetes: Default StorageClass). New PVCs from other apps will silently go to Ceph. When mounting onto an existing cluster, leave it asfalse.
Warning 3. Object store data pool EC 2+1 (L674). The Ceph documentation notes that the M=1 profile is "strongly discouraged for production data." Data becomes unavailable during maintenance and can be lost if failures overlap. Also, since K+M=3,
hostfailure domains must include at least three hosts, and if you setmin_sizeto K+1=3 as recommended, a single host going down will cause that pool to stop accepting writes (actualmin_sizevalue to be verified in Part 4, unmeasured). For production, consider replication 3 or K=4, M=2.
Warning 4. Things that disappear when deleted. The
reclaimPolicyof all three StorageClasses isDelete, so deleting a PVC also deletes the data. For filesystems,preserveFilesystemOnDeletedefaults tofalse, so deleting the CR also deletes the filesystem. Conversely, for object stores,preservePoolsOnDelete: truemeans the pools are retained. Keep in mind that the defaults differ among the three.
Warning 5.
crds.enabled(operator chart L21). Comments warn that changing the value set during initial installation tofalselater may destroy the cluster. The same comment points to the "Restore CRDs after deletion" section of the disaster recovery documentation in case the CRD is deleted. Determine this value once during installation and do not change it.
Warning 6.
requireMsgr2: trueandkeyType: aes(L231, L176). msgr2 requires kernel 5.11 or higher, and upgrade documentation instructs disabling it withrequireMsgr2: falseif using an older kernel.keyType: aesis noted in comments as required if the node kernel is below 7.0. Check your node's kernel version first.mon.allowMultiplePerNode(L184) andrequireSafeReplicaSize: false(pool CRD, size 1 allowed) should not be enabled outside of test environments.
7. Reducing Memory and CPU in a Practice Cluster
The TT Lab practice cluster consists of three VMs, each with a single empty disk (17GiB). Calculating the resources requestedby Ceph pods with default installation values yields the following via values. Counts assume a set of nodes, a set of disks, and one default pool, filesystem, and object store each.
| Pod | Count | Total CPU Request | Total Memory Request |
|---|---|---|---|
| osd | 3 | 3000m | 12Gi |
| mds | 2 (1 active + 1 standby) | 2000m | 8Gi |
| mon | 3 | 3000m | 3Gi |
| mgr + sidecar | 2 + 2 | 1200m | 1104Mi |
| rgw | 1 | 1000m | 1Gi |
| logcollector sidecar | Assumed one per daemon, 11 | 1100m | 1100Mi |
| crashcollector, exporter | 3 + 3 (one per node) | 450m | 330Mi |
| operator | 1 | 200m | 128Mi |
| Total | ~12 cores | ~26.6Gi |
CSI pods (ctrlplugin, nodeplugin) and ceph-csi-operator requests are excluded as they use chart defaults (unverified). If pods get stuck in Pending , first compare this total with the VM's CPU and memory. Actual scheduled values will be verified in Part 4.
These are the values to tweak when reducing resource usage. The below is a proposaland has not been launched with this combination (unmeasured).
cephClusterSpec:
mgr:
count: 1 # mgr 하나와 사이드카 둘이 빠진다
dashboard:
enabled: false
crashCollector:
disable: true # cluster-test.yaml 도 끈다
logCollector:
enabled: false # 데몬마다 붙는 로그 사이드카가 빠진다
resources:
mon:
requests: {cpu: 250m, memory: 512Mi}
limits: {memory: 1Gi} # 권장 최소 1024MB 와 같다
mgr:
requests: {cpu: 250m, memory: 512Mi}
limits: {memory: 512Mi} # 권장 최소 512MB
osd:
requests: {cpu: 500m, memory: 2Gi}
limits: {memory: 2Gi} # 권장 최소 2048MB, osd_memory_target 도 2Gi 가 된다
cephFileSystems:
- name: ceph-filesystem
spec:
metadataServer:
activeCount: 1
activeStandby: false
resources:
requests: {cpu: 250m, memory: 1Gi}
limits: {memory: 1Gi} # 권장 4096MB 보다 낮아 operator 가 경고를 찍는다
cephObjectStores:
- name: ceph-objectstore
spec:
gateway:
instances: 1
resources:
requests: {cpu: 250m, memory: 512Mi}
limits: {memory: 1Gi}
Since list values (cephFileSystems, cephObjectStores) are completely replaced by Helm, the actual file must include the remaining fields of the defaults (pools, StorageClass) together. The snippet above was shortened to show only modified fields. If RWX volumes or S3 are not needed, removing them entirely with cephFileSystems: [],
cephObjectStores: [] yields the greatest reduction. activeStandby: false merely changes the standby MDS to a cold standby while keeping the MDS count at 2 (Part 2, Section 2).
Calculating the request total for the above combination in the same way yields approximately 10.8Gi of memory (osd 6Gi, mds 2Gi, mon 1.5Gi, mgr 512Mi, rgw 512Mi, exporter 150Mi, operator 128Mi) and about 3.6 cores of CPU. In exchange, the OSD memory target drops from 4Gi to 2Gi, shrinking the BlueStore cache (performance impact unmeasured), and the MDS is lower than Rook's recommendation. The performance impact will be covered in a separate performance post after measurements are complete.
An official example in the same direction is Rook storage's
deploy/examples/cluster-test.yaml. This configuration omits resource requests entirely, sets mon and mgr to one each, osd_memory_target to 1GiB, and pool size to 1. The header comment introduces it as a "small test cluster where a single node is enough." Since there is only one replica, there is no data protection.
Capacity Calculation
The raw capacity of the disk set is 51GiB. Ceph warns when OSD utilization exceeds mon_osd_nearfull_ratio(0.85), and halts writes when it reaches mon_osd_full_ratio(0.95) (Monitor Config Reference).
| Pool Type | Space Multiplier | Raw Data Usable Until full (0.95) | Up to nearfull (0.85) Warning |
|---|---|---|---|
| Replication size 3 (Block, Filesystem) | 3.0 | ~16.2GiB | ~14.5GiB |
| EC 2+1 (Object Data) | 1.5 | ~32.3GiB | ~28.9GiB |
Since all pools share the same raw capacity, the rows cannot be simply added. Fixed overhead for BlueStore and RocksDB, and PG unevenness are excluded (unmeasured). Usable capacity can be verified with ceph df in Part 4.
8. Summary
- There are threecharts in the order of
rook-ceph→ceph-csi-drivers→rook-ceph-cluster. Omitting the middle one causes CSI to fail. - The operator chart is short, and defaults are mostly sufficient. Things to verify include
crds.enabled,monitoring.enabled, and OBC field allowances. - Cluster chart defaults are "examples." At a minimum, explicitly configure
storage(which disks to use),isDefault, object data pool EC profiles, and resource requests.
TT's Word. values.yaml is a letter saying, "I'll set things up like this by default." However, this letter mixes in quite bold statements like "I'll use all empty disks" and "I'll be the default StorageClass." Please be sure to re-read those few lines before clicking install!
References
Both values and documentation were accessed on 2026-10-29 at the above commits.
- rook-ceph values.yaml: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/deploy/charts/rook-ceph/values.yaml
- rook-ceph-cluster values.yaml: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/deploy/charts/rook-ceph-cluster/values.yaml
- Rook-adjusted ceph-csi-drivers values: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/deploy/charts/ceph-csi-drivers/values.yaml
- Helm Charts Overview, Operator 차트, Cluster 차트, CSI 드라이버 차트 문서: https://github.com/rook/rook/tree/09d2f0d8d883b70b30de796c4390371be725ff3b/Documentation/Helm-Charts
- CephCluster CRD: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/Documentation/CRDs/Cluster/ceph-cluster-crd.md
- CephBlockPool CRD: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/Documentation/CRDs/Block-Storage/ceph-block-pool-crd.md
- CephFilesystem CRD: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/Documentation/CRDs/Shared-Filesystem/ceph-filesystem-crd.md
- CephObjectStore CRD: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/Documentation/CRDs/Object-Storage/ceph-object-store-crd.md
- cluster-test.yaml: https://github.com/rook/rook/blob/09d2f0d8d883b70b30de796c4390371be725ff3b/deploy/examples/cluster-test.yaml
- Ceph Erasure Code: https://docs.ceph.com/en/tentacle/rados/operations/erasure-code/
- Ceph Monitor Config Reference: https://docs.ceph.com/en/tentacle/rados/configuration/mon-config-ref/
- Kubernetes Storage Classes: https://kubernetes.io/docs/concepts/storage/storage-classes/