Add "Why Rook?" Information#33
Conversation
|
Warning Review limit reached
Next review available in: 55 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThis PR adds a Ceph entry to the architecture index and two Rook-Ceph installation guides covering Kubernetes prerequisites, deployment, configuration, storage provisioning, verification, troubleshooting, cleanup, and follow-up notes. ChangesRook-Ceph Documentation
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 7
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/architecture/rook-ceph-install.md`:
- Around line 92-95: The fenced code block showing the pod status lacks a
language tag (triggering MD040); update the block in rook-ceph-install.md that
contains the lines starting with "NAME READY
STATUS RESTARTS AGE" / "rook-ceph-operator-<pod-id>" to use a language
identifier (e.g., add ```text at the opening fence) so the snippet is fenced as
```text ... ``` as suggested.
- Around line 61-67: Update the git clone example so the branch placeholder is
explicit: change the --branch value shown as `release-` to a clear placeholder
token like `<rook-release-tag>` in the git clone command (the line containing
"git clone --single-branch --branch release- https://github.com/rook/rook.git")
and update the surrounding note to instruct users to replace
`<rook-release-tag>` with the desired Rook release tag.
- Around line 149-158: The fenced code block showing the Ceph cluster example
(the block starting with "cluster:" and the lines "id: <cluster-id>" and
"health: HEALTH_OK") lacks a language tag and triggers MD040; add a language
identifier (e.g., "text" or "yaml") after the opening backticks so the block
becomes ```text (or ```yaml) to satisfy the linter.
In `@docs/usage/rook-ceph-install.md`:
- Around line 154-163: The fenced code block that begins with ``` and contains
the YAML-like keys cluster: and services: is missing a language tag and triggers
MD040; fix it by adding an appropriate language identifier (e.g., "yaml") after
the opening ``` so the block becomes ```yaml, keeping the existing content
(cluster:, id:, health:, services:, mon:, mgr:, osd:) intact.
- Around line 97-100: The fenced code block showing the kubectl output (the
lines starting with "NAME READY STATUS
RESTARTS AGE" and the "rook-ceph-operator-<pod-id>…" line) needs a language
label to satisfy MD040; update the opening backticks from ``` to include a
language token such as "console", "bash", or "text" (e.g. ```console) so the
block is properly annotated.
- Around line 58-62: Remove the malformed emphasis markers around the paragraph
that starts with "Rook is the unique Kubernetes operator for managing Ceph
workloads" so it becomes a normal paragraph (no asterisks or surrounding italic
markup); ensure there are no spaces inside emphasis markers and replace the
entire emphasized block with a plain paragraph preserving the existing wording
about Rook, Kubernetes, and SAP cloud infrastructure.
- Around line 66-72: Update the git clone instruction that currently uses the
literal branch token 'git clone --single-branch --branch release-
https://github.com/rook/rook.git' to use an explicit placeholder (for example
'--branch <release-version>' or '--branch release-x.y') so readers cannot
accidentally copy a non-functional literal; change the command text to: git
clone --single-branch --branch <release-version>
https://github.com/rook/rook.git and update the surrounding note to reference
the <release-version> placeholder.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2c9f5039-20b4-417f-bdd9-07d7e9eb2f37
📒 Files selected for processing (3)
docs/architecture/index.mddocs/architecture/rook-ceph-install.mddocs/usage/rook-ceph-install.md
7631441 to
c2cdbec
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (7)
docs/usage/rook-ceph-install.md (4)
97-100: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd a language identifier to this fenced code block.
The block lacks a language tag, which triggers markdownlint MD040.
📝 Suggested fix
-``` +```text NAME READY STATUS RESTARTS AGE rook-ceph-operator-<pod-id> 1/1 Running 0 30s</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@docs/usage/rook-ceph-install.mdaround lines 97 - 100, Add a language
identifier to the fenced block in the rook-ceph installation docs by updating
the markdown code fence around the kubectl output so it uses a text-style label.
This fixes the MD040 lint issue; locate the fenced snippet in the usage guide
and keep the existing content unchanged while adding the language tag to the
opening fence.</details> <!-- cr-comment:v1:eb2e843b278ce90959148e90 --> --- `154-163`: _📐 Maintainability & Code Quality_ | _🟡 Minor_ | _⚡ Quick win_ **Add a language identifier to this fenced code block.** The block lacks a language tag, which triggers markdownlint MD040. <details> <summary>📝 Suggested fix</summary> ```diff -``` +```text cluster: id: <cluster-id> health: HEALTH_OK services: mon: 3 daemons, quorum a,b,c mgr: a(active), standbys: b osd: X osds: X up, X in</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@docs/usage/rook-ceph-install.mdaround lines 154 - 163, Add a language
identifier to the fenced markdown block in the Rook Ceph install docs so it
satisfies markdownlint MD040; update the code fence around the cluster status
example to use a text-style language tag, keeping the existing content unchanged
and ensuring the fenced block is consistently labeled wherever that example
appears.</details> <!-- cr-comment:v1:4ba1fb51ca9b5f791af76151 --> --- `65-72`: _📐 Maintainability & Code Quality_ | _🟡 Minor_ | _⚡ Quick win_ **Use an explicit branch placeholder to prevent copy-paste failures.** `--branch release-` is incomplete and will fail if copied verbatim. Replace it with a clear placeholder token directly in the command. <details> <summary>📝 Suggested fix</summary> ```diff ```bash -git clone --single-branch --branch release- https://github.com/rook/rook.git +git clone --single-branch --branch <rook-release-tag> https://github.com/rook/rook.git cd rook/deploy/examplesAlso update the note on line 70: ```diff -**Note:** Replace `release-` with the desired Rook version. Check the Rook +**Note:** Replace `<rook-release-tag>` with the desired Rook version. Check the Rook🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 65 - 72, The clone command in the Rook install docs uses an incomplete branch name, so update the git clone example in the documentation to use a clear placeholder token that readers can replace directly, using the same command block around the rook clone instructions. Also revise the adjacent note in that section to refer to the placeholder token instead of the partial release- text so the example is copy-paste safe and unambiguous.
58-61: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove malformed emphasis markers and make this normal paragraph text.
The asterisks create spaces-inside-emphasis (MD037) and unnecessarily italicize the entire paragraph. Convert to plain text for readability.
📝 Suggested fix
-*Rook is the unique Kubernetes operator for managing Ceph workloads, which is -why cloud-storage uses Rook. The SAP cloud infrastructure is built on top of -Kubernetes, and the automation and foundation stack is Kubernetes. Because -Rook is the Kubernetes operator, SAP has chosen it for managing Ceph workloads. * +Rook is the Kubernetes operator used to manage Ceph workloads. SAP cloud +infrastructure is built on Kubernetes, and this alignment is why SAP chose +Rook for Ceph lifecycle management.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 58 - 61, The paragraph in rook-ceph-install.md is wrapped in malformed emphasis markers, causing the whole block to render as italicized text and trigger MD037. Update the affected paragraph so it is plain paragraph content with no leading or trailing asterisks, keeping the existing wording in the Rook/Ceph explanation unchanged. Locate the text by the “Rook is the unique Kubernetes operator…” paragraph and remove only the emphasis markers.docs/architecture/rook-ceph-install.md (3)
60-67: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse an explicit branch placeholder to prevent copy-paste failures.
--branch release-is incomplete and will fail if copied verbatim. Replace it with a clear placeholder token directly in the command.📝 Suggested fix
```bash -git clone --single-branch --branch release- https://github.com/rook/rook.git +git clone --single-branch --branch <rook-release-tag> https://github.com/rook/rook.git cd rook/deploy/examplesAlso update the note on line 65: ```diff -**Note:** Replace `release-` with the desired Rook version. Check the Rook +**Note:** Replace `<rook-release-tag>` with the desired Rook version. Check the Rook🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 60 - 67, The clone command in the rook installation docs uses an incomplete --branch release- value that will fail when copied. Update the command in the rook install section to use a clear placeholder token instead, and make the accompanying note in the same snippet match that placeholder; use the nearby git clone and cd rook/deploy/examples instructions as the anchor when editing.
149-158: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd a language identifier to this fenced code block.
The block lacks a language tag, which triggers markdownlint MD040.
📝 Suggested fix
-``` +```text cluster: id: <cluster-id> health: HEALTH_OK services: mon: 3 daemons, quorum a,b,c mgr: a(active), standbys: b osd: X osds: X up, X in</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@docs/architecture/rook-ceph-install.mdaround lines 149 - 158, The fenced
code block in the documentation needs a language identifier to satisfy
markdownlint MD040. Update the Markdown snippet in the rook-ceph install doc by
adding an explicit language tag to the existing fenced block (using the same
code block around the cluster/service output), so the block is recognized as
text rather than an unlabeled fence.</details> <!-- cr-comment:v1:d80f0a0ca270f1d741e57441 --> --- `92-95`: _📐 Maintainability & Code Quality_ | _🟡 Minor_ | _⚡ Quick win_ **Add a language identifier to this fenced code block.** The block lacks a language tag, which triggers markdownlint MD040. <details> <summary>📝 Suggested fix</summary> ```diff -``` +```text NAME READY STATUS RESTARTS AGE rook-ceph-operator-<pod-id> 1/1 Running 0 30s</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@docs/architecture/rook-ceph-install.mdaround lines 92 - 95, The fenced
output example in the Rook-Ceph install doc is missing a language identifier,
which triggers markdownlint MD040. Update the code block around the
kubectl-style table to use an explicit text fence so the snippet remains plain
text while satisfying the linter.</details> <!-- cr-comment:v1:81967a45e6eb83dcfd9b6cff --> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.Duplicate comments:
In@docs/architecture/rook-ceph-install.md:
- Around line 60-67: The clone command in the rook installation docs uses an
incomplete --branch release- value that will fail when copied. Update the
command in the rook install section to use a clear placeholder token instead,
and make the accompanying note in the same snippet match that placeholder; use
the nearby git clone and cd rook/deploy/examples instructions as the anchor when
editing.- Around line 149-158: The fenced code block in the documentation needs a
language identifier to satisfy markdownlint MD040. Update the Markdown snippet
in the rook-ceph install doc by adding an explicit language tag to the existing
fenced block (using the same code block around the cluster/service output), so
the block is recognized as text rather than an unlabeled fence.- Around line 92-95: The fenced output example in the Rook-Ceph install doc is
missing a language identifier, which triggers markdownlint MD040. Update the
code block around the kubectl-style table to use an explicit text fence so the
snippet remains plain text while satisfying the linter.In
@docs/usage/rook-ceph-install.md:
- Around line 97-100: Add a language identifier to the fenced block in the
rook-ceph installation docs by updating the markdown code fence around the
kubectl output so it uses a text-style label. This fixes the MD040 lint issue;
locate the fenced snippet in the usage guide and keep the existing content
unchanged while adding the language tag to the opening fence.- Around line 154-163: Add a language identifier to the fenced markdown block in
the Rook Ceph install docs so it satisfies markdownlint MD040; update the code
fence around the cluster status example to use a text-style language tag,
keeping the existing content unchanged and ensuring the fenced block is
consistently labeled wherever that example appears.- Around line 65-72: The clone command in the Rook install docs uses an
incomplete branch name, so update the git clone example in the documentation to
use a clear placeholder token that readers can replace directly, using the same
command block around the rook clone instructions. Also revise the adjacent note
in that section to refer to the placeholder token instead of the partial
release- text so the example is copy-paste safe and unambiguous.- Around line 58-61: The paragraph in rook-ceph-install.md is wrapped in
malformed emphasis markers, causing the whole block to render as italicized text
and trigger MD037. Update the affected paragraph so it is plain paragraph
content with no leading or trailing asterisks, keeping the existing wording in
the Rook/Ceph explanation unchanged. Locate the text by the “Rook is the unique
Kubernetes operator…” paragraph and remove only the emphasis markers.</details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro **Run ID**: `5edfc07e-ed2e-4cbe-83e9-964254436c1b` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 76314416765ced23cf0a70844ae4f79763ec86f9 and c2cdbecca1cbf10fb9ba5ab1792f580c35011872. </details> <details> <summary>📒 Files selected for processing (3)</summary> * `docs/architecture/index.md` * `docs/architecture/rook-ceph-install.md` * `docs/usage/rook-ceph-install.md` </details> <details> <summary>✅ Files skipped from review due to trivial changes (1)</summary> * docs/architecture/index.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
|
@senolcolak would you please look into the failing check. There is some dead link...Thx |
I've fixed this dead link. I've put the fix in a commit separate from the main commit, which will make it easy to remove if we decide that this is not the fix we want. But if this is the fix we want, I will squash it and this PR can be merged. |
caad463 to
590dadf
Compare
$TITLE Signed-off-by: Zac Dover <zac.dover@clyso.com> fixup Signed-off-by: Zac Dover <zac.dover@proton.me>
590dadf to
8f448ee
Compare
There was a problem hiding this comment.
Actionable comments posted: 12
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/architecture/rook-ceph-install.md`:
- Around line 322-334: Update the “Test Storage Functionality” section to either
add RGW object-storage verification commands alongside the existing RBD and
CephFS tests, or revise the heading and introductory text to explicitly state
that only block and file storage are being tested.
- Around line 170-188: Update the explicit-device storage example to set
useAllNodes: false before storage.nodes, and clarify that each node name must
match its kubernetes.io/hostname label.
- Around line 170-223: Replace all non-breaking space characters (U+00A0) in the
YAML examples under storage, Resource Limits, and Network Configuration with
regular spaces, preserving the intended indentation and inline spacing so the
snippets can be copied and parsed as valid YAML.
- Around line 25-31: Update the one-node testing guidance in the Rook-Ceph
installation documentation: ensure the testing flow deploys cluster-test.yaml
instead of the production cluster.yaml, or remove the “1 node minimum for
testing” statement if no testing path is provided. Keep the production
deployment instructions using cluster.yaml.
- Around line 216-223: Update the YAML documentation snippet in both Rook-Ceph
installation documents to remove the implication that connections.encryption
configures dual networking. Add separate comments explaining dual-network
configuration and Ceph wire-encryption prerequisites, while preserving the
example encryption settings under the appropriate encryption documentation.
- Around line 377-390: Reorder the teardown commands so all storage consumers
are removed before the cluster: move the test PVC/workload cleanup and the
`kubectl delete -f object.yaml` and `kubectl delete -f filesystem.yaml` commands
ahead of `kubectl delete -f cluster.yaml`, while keeping operator resource
deletion afterward.
In `@docs/usage/rook-ceph-install.md`:
- Around line 327-339: The “Test Storage Functionality” section claims to test
each storage type but only covers RBD and CephFS. Update the section to include
an RGW object-storage verification workload and commands, or revise the heading
and introductory text to explicitly state that only block and file storage are
tested.
- Around line 175-228: Replace all non-breaking space characters in the fenced
YAML examples under the storage, Resource Limits, and Network Configuration
sections with ordinary ASCII spaces, preserving the existing YAML indentation
and formatting so the snippets can be copied and parsed correctly.
- Around line 221-228: Update the YAML example in the network configuration
section to remove the `connections.encryption` block from the dual-network
example. Document dual-network setup using the appropriate network selectors or
address ranges, and add a separate encryption section describing Ceph wire
encryption and its prerequisites.
- Around line 25-31: The prerequisites mention a one-node testing path that is
not supported by the documented manifest. Update the Rook installation
prerequisites to remove the “1 node minimum for testing” wording, or add and
document a corresponding cluster-test.yaml installation path alongside the
existing cluster.yaml steps.
- Around line 382-395: Update the cleanup section to delete the test PVCs, pods,
and StorageClasses created by the RBD/CephFS consumer examples before deleting
the cluster and other Ceph resources. Add the corresponding kubectl cleanup
commands near the existing teardown commands, ensuring all consumer objects are
removed first.
- Around line 175-193: Update the explicit-device storage example to set both
useAllNodes: false and useAllDevices: false, and clarify that each storage.nodes
name must match the corresponding node’s kubernetes.io/hostname label.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 46b150c3-2ef5-4c5c-8b40-451786d1d1d4
📒 Files selected for processing (3)
docs/architecture/index.mddocs/architecture/rook-ceph-install.mddocs/usage/rook-ceph-install.md
✅ Files skipped from review due to trivial changes (1)
- docs/architecture/index.md
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 12
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/architecture/rook-ceph-install.md`:
- Around line 322-334: Update the “Test Storage Functionality” section to either
add RGW object-storage verification commands alongside the existing RBD and
CephFS tests, or revise the heading and introductory text to explicitly state
that only block and file storage are being tested.
- Around line 170-188: Update the explicit-device storage example to set
useAllNodes: false before storage.nodes, and clarify that each node name must
match its kubernetes.io/hostname label.
- Around line 170-223: Replace all non-breaking space characters (U+00A0) in the
YAML examples under storage, Resource Limits, and Network Configuration with
regular spaces, preserving the intended indentation and inline spacing so the
snippets can be copied and parsed as valid YAML.
- Around line 25-31: Update the one-node testing guidance in the Rook-Ceph
installation documentation: ensure the testing flow deploys cluster-test.yaml
instead of the production cluster.yaml, or remove the “1 node minimum for
testing” statement if no testing path is provided. Keep the production
deployment instructions using cluster.yaml.
- Around line 216-223: Update the YAML documentation snippet in both Rook-Ceph
installation documents to remove the implication that connections.encryption
configures dual networking. Add separate comments explaining dual-network
configuration and Ceph wire-encryption prerequisites, while preserving the
example encryption settings under the appropriate encryption documentation.
- Around line 377-390: Reorder the teardown commands so all storage consumers
are removed before the cluster: move the test PVC/workload cleanup and the
`kubectl delete -f object.yaml` and `kubectl delete -f filesystem.yaml` commands
ahead of `kubectl delete -f cluster.yaml`, while keeping operator resource
deletion afterward.
In `@docs/usage/rook-ceph-install.md`:
- Around line 327-339: The “Test Storage Functionality” section claims to test
each storage type but only covers RBD and CephFS. Update the section to include
an RGW object-storage verification workload and commands, or revise the heading
and introductory text to explicitly state that only block and file storage are
tested.
- Around line 175-228: Replace all non-breaking space characters in the fenced
YAML examples under the storage, Resource Limits, and Network Configuration
sections with ordinary ASCII spaces, preserving the existing YAML indentation
and formatting so the snippets can be copied and parsed correctly.
- Around line 221-228: Update the YAML example in the network configuration
section to remove the `connections.encryption` block from the dual-network
example. Document dual-network setup using the appropriate network selectors or
address ranges, and add a separate encryption section describing Ceph wire
encryption and its prerequisites.
- Around line 25-31: The prerequisites mention a one-node testing path that is
not supported by the documented manifest. Update the Rook installation
prerequisites to remove the “1 node minimum for testing” wording, or add and
document a corresponding cluster-test.yaml installation path alongside the
existing cluster.yaml steps.
- Around line 382-395: Update the cleanup section to delete the test PVCs, pods,
and StorageClasses created by the RBD/CephFS consumer examples before deleting
the cluster and other Ceph resources. Add the corresponding kubectl cleanup
commands near the existing teardown commands, ensuring all consumer objects are
removed first.
- Around line 175-193: Update the explicit-device storage example to set both
useAllNodes: false and useAllDevices: false, and clarify that each storage.nodes
name must match the corresponding node’s kubernetes.io/hostname label.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 46b150c3-2ef5-4c5c-8b40-451786d1d1d4
📒 Files selected for processing (3)
docs/architecture/index.mddocs/architecture/rook-ceph-install.mddocs/usage/rook-ceph-install.md
✅ Files skipped from review due to trivial changes (1)
- docs/architecture/index.md
🛑 Comments failed to post (12)
docs/architecture/rook-ceph-install.md (6)
25-31: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '--- Target file excerpt ---\n' cat -n docs/architecture/rook-ceph-install.md | sed -n '1,120p' printf '\n--- Search for cluster-test.yaml and cluster.yaml references ---\n' rg -n --hidden --glob '!**/.git/**' 'cluster-test\.yaml|cluster\.yaml' docs . || trueRepository: cobaltcore-dev/docs
Length of output: 248
🏁 Script executed:
#!/bin/bash set -euo pipefail cat -n docs/architecture/rook-ceph-install.md | sed -n '1,120p' echo rg -n --hidden --glob '!**/.git/**' 'cluster-test\.yaml|cluster\.yaml' docs . || trueRepository: cobaltcore-dev/docs
Length of output: 6537
🌐 Web query:
Rook quickstart cluster.yaml cluster-test.yaml single-node testing production three-worker example💡 Result:
Rook provides specific example manifests to support different deployment needs, ranging from single-node testing to production environments [1][2]. Production Cluster (cluster.yaml) The standard cluster.yaml is designed for production environments and requires at least three worker nodes [3][1]. It configures high-availability features by default, such as setting the monitor (MON) count to 3 and enforcing that these monitors run on unique nodes [4][5]. Test Cluster (cluster-test.yaml) For development, testing, or environments like Minikube, Rook provides cluster-test.yaml [1][2]. This configuration is specifically tuned for single-node setups [6]: - Monitors and Managers: The count is set to 1, and allowMultiplePerNode is enabled to permit these components to run on the same node [6]. - Redundancy: It disables typical production checks (e.g., skipUpgradeChecks: true) and adjusts storage settings, such as setting the default pool size to 1 and disabling warnings for lack of redundancy [6]. Quickstart Summary To deploy a cluster, you generally use the Rook operator and apply the desired YAML file [1][7]: 1. Clone the Rook repository to access the example manifests: git clone --single-branch --branch v1.19.5 https://github.com/rook/rook.git [1] 2. Navigate to the examples directory: cd rook/deploy/examples [1] 3. Create the necessary resources (CRDs, common, operator): kubectl create -f crds.yaml -f common.yaml -f csi-operator.yaml -f operator.yaml [1] 4. Apply the cluster configuration (e.g., cluster.yaml or cluster-test.yaml): kubectl create -f cluster.yaml [1] For production, you should always use a specific version tag for the Ceph image (e.g., quay.io/ceph/ceph:v20.2.2) rather than a general tag to ensure consistency [3]. Do not enable allowUnsupported in production environments [3].
Citations:
- 1: https://www.rook.io/docs/rook/latest-release/Getting-Started/quickstart/
- 2: https://www.rook.io/docs/rook/latest-release/Getting-Started/example-configurations/
- 3: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster.yaml
- 4: https://github.com/rook/rook/blob/release-1.19/deploy/examples/cluster.yaml
- 5: https://github.com/rook/rook/blob/release-1.11/deploy/examples/cluster.yaml
- 6: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster-test.yaml
- 7: https://rook.github.io/docs/rook/latest/Getting-Started/quickstart/
Use
cluster-test.yamlfor the one-node path. The current steps still deploycluster.yaml, which is the production example; either switch the testing flow tocluster-test.yamlor remove the “1 node minimum for testing” note.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 25 - 31, Update the one-node testing guidance in the Rook-Ceph installation documentation: ensure the testing flow deploys cluster-test.yaml instead of the production cluster.yaml, or remove the “1 node minimum for testing” statement if no testing path is provided. Keep the production deployment instructions using cluster.yaml.
170-188: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail # Inspect the referenced section and surrounding context. file="docs/architecture/rook-ceph-install.md" wc -l "$file" sed -n '150,210p' "$file" # Look for other Rook-related examples or notes in the repo. rg -n "useAllNodes|useAllDevices|storage.nodes|deviceFilter|rook-ceph" docs -SRepository: cobaltcore-dev/docs
Length of output: 6065
🌐 Web query:
Rook Ceph Cluster CRD storage.nodes useAllNodes useAllDevices hostname labels💡 Result:
In a Rook Ceph Cluster CRD, storage selection is governed by the spec.storage configuration block [1][2]. The parameters work together as follows: useAllNodes: When set to true, Rook automatically uses all available nodes in the Kubernetes cluster as storage hosts [1][2]. For production, it is generally recommended to set this to false to maintain control over data reliability and prevent accidental inclusion of nodes [1]. When set to false, you must explicitly list individual nodes in the nodes configuration section [2][3]. useAllDevices: When set to true, Rook uses all available storage devices on the selected nodes (that match filters) [2][3]. Like useAllNodes, setting this to false allows for fine-grained control, where you can specify exactly which devices or partitions to use for each node [2][3]. nodes: This section is used to define specific storage behavior for individual nodes [2]. This configuration is only effective when useAllNodes is set to false [2][3]. Each node entry must include a name field, which must match the node's kubernetes.io/hostname label [1][2]. Within each node entry, you can specify individual devices (by name or udev path) and apply node-specific configuration that overrides global cluster settings [2][3]. Labels: While Rook does not currently support selecting storage nodes directly via arbitrary Kubernetes node labels in the storage selection section, you can control where OSD pods are scheduled using the placement configuration block [4][3]. By applying node affinity, anti-affinity, or tolerations within the placement section, you can restrict OSD services to run only on nodes with specific labels [4][3]. Summary of workflow: 1. Set useAllNodes and useAllDevices to false to enable specific node/device control [2][3]. 2. Add the target nodes to the nodes list, using their exact kubernetes.io/hostname value for the name field [1][2]. 3. Optionally, use placement settings elsewhere in the CephCluster CRD to schedule OSD pods only on nodes possessing certain labels [4][3].
Citations:
- 1: https://rook.io/docs/rook/v1.15/CRDs/Cluster/ceph-cluster-crd/
- 2: https://rook.io/docs/rook/latest/CRDs/Cluster/host-cluster/
- 3: https://www.rook.io/docs/rook/latest-release/CRDs/Cluster/host-cluster/
- 4: https://rook.io/docs/rook/v1.18/CRDs/Cluster/host-cluster/
Set
useAllNodes: falsein the explicit-device example
storage.nodesonly takes effect whenuseAllNodesis false, and eachnamemust match the node’skubernetes.io/hostnamelabel.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 170 - 188, Update the explicit-device storage example to set useAllNodes: false before storage.nodes, and clarify that each node name must match its kubernetes.io/hostname label.
170-223: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail file="docs/architecture/rook-ceph-install.md" echo "== Line numbers around the cited range ==" sed -n '160,230p' "$file" | cat -n echo echo "== Detect U+00A0 occurrences in the cited range ==" python3 - <<'PY' from pathlib import Path path = Path("docs/architecture/rook-ceph-install.md") text = path.read_text(encoding="utf-8") lines = text.splitlines() for i in range(169, 224): # 1-based lines 170-223 if i <= len(lines): line = lines[i-1] if "\u00a0" in line: print(f"line {i}: {line.encode('unicode_escape').decode()}") PY echo echo "== Show any raw non-ASCII whitespace bytes near the range ==" python3 - <<'PY' from pathlib import Path path = Path("docs/architecture/rook-ceph-install.md") data = path.read_bytes() needle = b"\xc2\xa0" idxs = [] start = 0 while True: idx = data.find(needle, start) if idx == -1: break idxs.append(idx) start = idx + 2 print(f"count={len(idxs)}") for idx in idxs[:50]: line = data[:idx].count(b"\n") + 1 print(f"bytes@{idx} line={line}") PYRepository: cobaltcore-dev/docs
Length of output: 4174
🏁 Script executed:
python3 - <<'PY' try: import yaml except Exception as e: print("PyYAML unavailable:", e) raise SystemExit(0) samples = { "leading_nbsp_indent": "storage:\n\u00a0\u00a0useAllNodes: true\n", "mixed_nbsp_comment": 'storage:\n deviceFilter: "^sd[b-z]"\u00a0 # Use sdb, sdc, etc.\n', "normal_spaces": "storage:\n useAllNodes: true\n", } for name, text in samples.items(): print(f"\n== {name} ==") try: print(yaml.safe_load(text)) except Exception as e: print(type(e).__name__ + ":", e) PYRepository: cobaltcore-dev/docs
Length of output: 623
Replace the non-breaking spaces in the YAML examples. The fenced snippets here contain U+00A0 characters in indentation and inline spacing, which makes the copied YAML parse incorrectly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 170 - 223, Replace all non-breaking space characters (U+00A0) in the YAML examples under storage, Resource Limits, and Network Configuration with regular spaces, preserving the intended indentation and inline spacing so the snippets can be copied and parsed as valid YAML.
216-223: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail echo '--- docs/architecture/rook-ceph-install.md context ---' nl -ba docs/architecture/rook-ceph-install.md | sed -n '190,250p' echo echo '--- search for related terms ---' rg -n "connections\.encryption|dual network|public and cluster networks|network selectors|address ranges|wire encryption|Ceph wire encryption|multus|provider: host" docs . -g '!**/node_modules/**' -g '!**/dist/**' -g '!**/build/**' || trueRepository: cobaltcore-dev/docs
Length of output: 252
🏁 Script executed:
#!/bin/bash set -euo pipefail echo '--- docs/architecture/rook-ceph-install.md context ---' sed -n '190,250p' docs/architecture/rook-ceph-install.md | cat -n echo echo '--- search for related terms ---' rg -n "connections\.encryption|dual network|public and cluster networks|network selectors|address ranges|wire encryption|Ceph wire encryption|multus|provider: host" docs . -g '!**/node_modules/**' -g '!**/dist/**' -g '!**/build/**' || trueRepository: cobaltcore-dev/docs
Length of output: 2572
🌐 Web query:
Rook Ceph Cluster CRD connections.encryption dual network configuration public cluster networks encryption prerequisites site:rook.io💡 Result:
In a Rook-managed Ceph cluster, configuring dual networks (public and cluster) and encryption are handled through specific sections of the CephCluster Custom Resource Definition (CRD) [1][2]. Network Configuration Ceph clusters can use up to two distinct networks: the public network (for client traffic) and the cluster network (for internal replication and recovery traffic) [2]. - Dual Network Setup: You can specify these networks using the network.selectors or network.addressRanges settings in the CephCluster CRD [1]. When using the multus provider, selectors are used to bind NetworkAttachmentDefinitions to the public and cluster networks [1][2]. - Isolation: If a cluster network is not defined, the public network is used for all traffic [2]. Encryption Prerequisites Encryption in Rook is primarily focused on protecting data at rest (OSD encryption) rather than data in transit, although the Ceph msgr2 protocol supports encryption for connections [1][3][4]. - OSD Encryption: To enable encryption for OSDs (on PVC-based clusters), you must set
encrypted: truewithin your storageClassDeviceSets template [4][5]. - Prerequisites for OSD Encryption: If using raw devices or partitions, OSDs have a dependency on the LVM (Logical Volume Manager) package being installed on all storage nodes [6]. When using PVCs with storageClassDeviceSets, this LVM dependency is typically managed by the underlying storage infrastructure [6]. - Key Management: By default, encryption keys are stored in Kubernetes Secrets [4]. For production environments, Rook supports integrating with external Key Management Systems (KMS) such as Vault, IBM Key Protect, or KMIP-compliant providers, which requires configuring the security.kms section in the CephCluster CRD [4][5]. Connections Encryption Encryption for connections (data in transit) relies on Ceph's internal msgr2 protocol capabilities [1]. Settings for these network connections are managed under the connections field in the network configuration section of the CephCluster CRD [1][3]. For detailed implementation, refer to the official Rook Ceph Documentation for your specific version, as configuration schemas can evolve [1][2][7].Citations:
- 1: https://www.rook.io/docs/rook/latest/CRDs/Cluster/ceph-cluster-crd/
- 2: https://www.rook.io/docs/rook/latest-release/CRDs/Cluster/network-providers/
- 3: https://rook.io/docs/rook/v1.20/CRDs/Cluster/ceph-cluster-crd/
- 4: https://rook.io/docs/rook/latest/Storage-Configuration/Advanced/key-management-system/
- 5: https://www.rook.io/docs/rook/latest/Storage-Configuration/Advanced/key-management-system/
- 6: https://www.rook.io/docs/rook/latest/Getting-Started/Prerequisites/prerequisites/
- 7: https://www.rook.io/docs/rook/latest/Storage-Configuration/Advanced/ceph-configuration/
🌐 Web query:
site:rook.io "connections.encryption" Rook CephCluster network configuration msgr2💡 Result:
In a Rook CephCluster, wire encryption for Ceph connections (leveraging the msgr2 protocol) is managed through the connections.encryption setting within the CephCluster custom resource [1][2][3]. When this setting is enabled, all traffic between Ceph components is encrypted [1][2]. If you enable this feature, you must also update your Ceph CSI configuration to ensure proper connectivity for CephFS mounts [1][3]. Specifically, you should set the CephFS kernel mount options to include ms_mode=secure [1][4][3]. Example configuration for the CephCluster CR: spec: network: connections: encryption: enabled: true After enabling this, ensure the CSI Helm chart configuration reflects the change [1][3]: csi: cephFSKernelMountOptions: ms_mode=secure This configuration ensures that the kernel client correctly negotiates the encrypted msgr2 connection required by the cluster [1][2].
Citations:
- 1: https://www.rook.io/docs/rook/latest-release/Helm-Charts/operator-chart/
- 2: https://rook.io/docs/rook/v1.14/Helm-Charts/operator-chart/
- 3: https://rook.io/docs/rook/v1.15/Helm-Charts/operator-chart/
- 4: https://rook.io/docs/rook/v1.16/Helm-Charts/operator-chart/
Separate encryption from dual-network configuration
connections.encryptionenables Ceph wire encryption, not the public/cluster network layout. Rewrite the comment here (and the duplicated snippet indocs/usage/rook-ceph-install.md) so dual-network settings and encryption prerequisites are documented separately.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 216 - 223, Update the YAML documentation snippet in both Rook-Ceph installation documents to remove the implication that connections.encryption configures dual networking. Add separate comments explaining dual-network configuration and Ceph wire-encryption prerequisites, while preserving the example encryption settings under the appropriate encryption documentation.
322-334: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Either test RGW or narrow the “all storage types” claim.
The verification commands exercise only RBD and CephFS. Add an object-storage test, or change the heading/text to state that only block and file storage are tested.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 322 - 334, Update the “Test Storage Functionality” section to either add RGW object-storage verification commands alongside the existing RBD and CephFS tests, or revise the heading and introductory text to explicitly state that only block and file storage are being tested.
377-390: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail # Inspect the target section and nearby context sed -n '330,430p' docs/architecture/rook-ceph-install.md # Search for any cleanup guidance elsewhere in the repo rg -n "kubectl delete -f (cluster|object|filesystem|operator|common|crds)\\.yaml|rook-ceph-block|rook-cephfs|cleanup|teardown" docs/architecture docs -g '*.md'Repository: cobaltcore-dev/docs
Length of output: 5246
🏁 Script executed:
#!/bin/bash set -euo pipefail # Check whether the repo documents the expected cleanup order or teardown steps rg -n "PVC|PersistentVolumeClaim|storage class|StorageClass|object storage|CephCluster|CephFilesystem|CephObjectStore|Delete the cluster|Delete the operator" docs/architecture/rook-ceph-install.md docs -g '*.md'Repository: cobaltcore-dev/docs
Length of output: 4453
🌐 Web query:
Rook Ceph teardown documentation PVC workloads delete storage class before cluster finalizers volumes hang nodes restart💡 Result:
When performing a Rook Ceph teardown, it is critical to delete applications, PVCs, and storage classes before removing the Rook operator and the CephCluster CRD [1][2]. Failing to follow this order can cause storage volumes to hang, which may lead to node instability requiring a system restart [1][2]. The Rook operator automatically adds finalizers to the CephCluster and other critical resources to ensure that block and file mounts are correctly cleaned up before the cluster is deleted [1][3]. If the operator is stopped or unable to complete this cleanup, these resources—and potentially the namespace—will remain stuck in a Terminating state [1][3]. To resolve a hang during teardown: 1. Identify the resources holding up deletion: If a namespace is stuck in Terminating, use the following command to identify the remaining resources [3]: kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n 2. Check for pending finalizers: If the CephCluster or other CRDs are stuck, the operator may be unable to remove the finalizer. You can manually remove the finalizer by patching the resource [1][3]: kubectl patch -n --type merge -p '{"metadata":{"finalizers": []}}' 3. Address underlying volume mounts: If you have already deleted the Rook operator, pods that were consuming storage may have hung mounts [1][2]. You may need to manually unmount these volumes from the affected nodes or, as a last resort, restart the nodes to clear the hung state [1][2]. For a clean teardown, ensure that you delete all resources consuming the storage (including PVCs and their associated StorageClasses) before initiating the deletion of the CephCluster CRD [2]. If using the cleanupPolicy feature, wait for the rook-ceph-cleanup jobs to finish on all nodes to ensure data is properly wiped from the host [2].
Citations:
- 1: https://rook.io/docs/rook/latest/Getting-Started/ceph-teardown/
- 2: https://www.rook.io/docs/rook/latest/Getting-Started/ceph-teardown/
- 3: https://www.rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
🌐 Web query:
site:rook.io ceph teardown delete pvc workload before deleting cluster finalizers nodes restart storageclass💡 Result:
To properly tear down a Ceph cluster managed by Rook in Kubernetes, you must follow a specific sequence to avoid hanging volumes and node-level issues [1]. Failure to clean up workloads before removing the cluster can lead to persistent volume (PV) finalizers failing to release, which may cause storage volumes to hang and require manual intervention or node reboots [1]. The recommended teardown procedure is: 1. Clean up Workloads: Before removing any Rook or Ceph resources, delete all applications (Pods, Deployments, StatefulSets) that consume Ceph storage [2][3][1]. This allows Kubernetes to detach and delete the corresponding Persistent Volume Claims (PVCs) and Persistent Volumes (PVs) [1]. 2. Delete PVCs and PVs: Ensure all PVCs provisioned by the Ceph cluster are deleted [4]. Rook waits for these to be removed before proceeding with cluster deletion unless you explicitly configure the cluster to allow uninstallation with volumes [4]. 3. Delete Ceph Resources: Once workloads and PVCs are cleared, you can delete the CephCluster custom resource (CR) [2][1]. - If you have enabled the cleanupPolicy in the CephCluster spec, Rook will trigger cleanup jobs (rook-ceph-cleanup) on all nodes to wipe data from OSD devices and remove files under the dataDirHostPath [2][1]. - Wait for these cleanup jobs to complete before proceeding [2][3][1]. 4. Manual Cleanup: If cleanup jobs were not used or if data persists, manually connect to each node to delete all files under the dataDirHostPath (defaulting to /var/lib/rook) and, if necessary, wipe the disks previously used for OSDs [2][1]. 5. StorageClass and Operator: After the Ceph cluster and its data are removed, you can safely delete the StorageClass and remove the Rook operator resources (e.g., operator.yaml) [2][5]. If you encounter finalizers preventing deletion, you can use the annotation rook.io/force-deletion="true" on the specific resource to force Rook to proceed with the removal [2][3]. Always prioritize graceful deletion by removing the dependent workloads first to ensure a clean state and avoid potential node issues [1].
Citations:
- 1: https://rook.io/docs/rook/v1.20/Storage-Configuration/ceph-teardown/
- 2: https://rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
- 3: https://rook.io/docs/rook/latest-release/Storage-Configuration/ceph-teardown/
- 4: https://rook.io/docs/rook/v1.12/CRDs/Cluster/ceph-cluster-crd/
- 5: https://rook.io/docs/rook/v1.9/ceph-block.html
🏁 Script executed:
#!/bin/bash set -euo pipefail sed -n '240,330p' docs/architecture/rook-ceph-install.mdRepository: cobaltcore-dev/docs
Length of output: 1654
🌐 Web query:
rook ceph teardown delete kubernetes resources pvc cephblockpool cephfilesystem cephobjectstore order💡 Result:
To teardown a Rook Ceph cluster safely, you must follow a specific sequence to avoid hanging resources and protect your data [1][2]. The core principle is to delete resources from the "top down," starting with the applications using the storage and ending with the Rook operator [1][2]. Recommended Teardown Order: 1. Clean up Applications: Remove all applications (Pods) that use storage provided by the Ceph cluster, including any PersistentVolumeClaims (PVCs) [1][2]. Rook prevents the deletion of critical resources if they are still in use by PVCs or other dependent resources to protect your data [3][4]. 2. Delete Sub-resources: Delete your Ceph-specific resources in the following order: - CephObjectStores, CephFilesystems, and CephBlockPools [2][5]. 3. Delete the CephCluster: After the above resources are removed, delete the CephCluster CR [1][2]. - If you want Rook to automatically wipe host paths and data disks, add the cleanupPolicy to your CephCluster CR before deleting it [6][7]. This will trigger the rook-ceph-cleanup jobs [6][7]. 4. Delete the Operator: Once the CephCluster is fully terminated and cleanup jobs are complete, you can safely remove the Rook operator and agent [1][2][5]. 5. Manual Data Cleanup: Finalize the teardown by removing the configuration data from each host (typically /var/lib/rook or the path defined in your dataDirHostPath) [1][6]. If resources remain stuck in a "Terminating" state, it is often due to finalizers [8][5]. While you can manually patch resources to remove finalizers (kubectl patch -p '{"metadata":{"finalizers":[]}}' --type=merge), this should be a last resort, as it bypasses safety checks and can lead to data loss or orphaned resources [8][5]. Alternatively, the kubectl-rook-ceph plugin provides a destroy-cluster command that automates this process by force-removing finalizers, though it is destructive and irreversible [9]. Top results: [1], [2], [6], [5], [9]
Citations:
- 1: https://rook.github.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
- 2: https://rook.io/docs/rook/v1.11/Storage-Configuration/ceph-teardown/
- 3: https://github.com/rook/rook/blob/master/design/ceph/resource-dependencies.md
- 4: rook/rook#7816
- 5: https://brettweir.com/blog/remove-rook-from-cluster/
- 6: https://rook.io/docs/rook/latest/Getting-Started/ceph-teardown/?h=cleanu
- 7: https://rook.github.io/docs/rook/latest/Getting-Started/ceph-teardown/
- 8: rook/rook#7890
- 9: https://github.com/rook/kubectl-rook-ceph/blob/master/docs/destroy-cluster.md
🌐 Web query:
Rook ceph teardown documentation delete application PVCs before CephCluster finalizers hang node restart💡 Result:
To properly tear down a Rook Ceph cluster and avoid hanging node restarts or stuck termination states, you must delete applications and their associated Persistent Volume Claims (PVCs) before removing the Rook operator and the CephCluster resource [1][2]. Rook uses Kubernetes finalizers on the CephCluster CRD and other critical resources to prevent accidental data loss [3][2]. These finalizers ensure that all block and file system mounts are unmounted and cleaned up before the resource is deleted [3]. If these resources are still in use by applications (i.e., PVCs exist), the finalizer will block deletion, and the cluster will remain in a "Terminating" state [3][4]. Failure to clean up these mounts before removing the operator or the cluster can lead to hung storage mounts, which may cause nodes to hang during a reboot [3][2]. Recommended Teardown Procedure: 1. Delete Applications and PVCs: Identify and delete all applications and PVCs that consume Rook-provided storage [5][6][7]. You can list PVCs using the Rook storage classes to ensure nothing remains [5]. 2. Delete CephCluster: Once all dependent resources (PVCs, BlockPools, Filesystems, ObjectStores) are removed, delete the CephCluster resource [3][4][8]. 3. Apply Cleanup Policy (Optional): To ensure host data is wiped, you can edit the CephCluster CR to add a cleanupPolicy before deletion. This triggers rook-ceph-cleanup jobs on the nodes [3][2]. 4. Remove Operator: Only after the CephCluster and its dependencies have been successfully deleted and the namespace is clear, should you remove the Rook operator [1][8]. If you encounter a "Terminating" state that will not clear: - Check for dependent resources: Use kubectl describe to see which resources are preventing the deletion of the CephCluster [3][4]. - Manual Finalizer Removal (Last Resort): If the operator is no longer running and the cluster is stuck, you may need to manually remove the finalizers from the affected CRs using kubectl patch or kubectl edit [3][9][8]. This should be done with caution, as it bypasses the safety mechanism intended to prevent hanging mounts [3].
Citations:
- 1: https://rook.io/docs/rook/latest-release/Getting-Started/ceph-teardown/
- 2: https://rook.io/docs/rook/latest/Getting-Started/ceph-teardown/
- 3: https://www.rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
- 4: rook/rook#16428
- 5: https://oneuptime.com/blog/post/2026-03-31-rook-allowuninstallwithvolumes/view
- 6: https://oneuptime.com/blog/post/2026-03-31-rook-how-to-completely-remove-a-rook-ceph-cluster-from-kubernetes/view
- 7: https://docs.alauda.io/docs/platform-docs/v3.18.1/en/platform-practice/storage/clean-rook/
- 8: https://brettweir.com/blog/remove-rook-from-cluster/
- 9: rook/rook#2188
Delete storage consumers before
cluster.yaml
Move the test PVC/workload cleanup, plusobject.yamlandfilesystem.yaml, ahead ofkubectl delete -f cluster.yaml; tearing down the cluster first can leave finalizers stuck and hang storage cleanup.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/architecture/rook-ceph-install.md` around lines 377 - 390, Reorder the teardown commands so all storage consumers are removed before the cluster: move the test PVC/workload cleanup and the `kubectl delete -f object.yaml` and `kubectl delete -f filesystem.yaml` commands ahead of `kubectl delete -f cluster.yaml`, while keeping operator resource deletion afterward.docs/usage/rook-ceph-install.md (6)
25-31: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n== file: docs/usage/rook-ceph-install.md ==\n' nl -ba docs/usage/rook-ceph-install.md | sed -n '1,120p' printf '\n== search: cluster-test.yaml / cluster.yaml references ==\n' rg -n "cluster-test\.yaml|cluster\.yaml|1 node minimum|production cluster|testing" docs/usage/rook-ceph-install.md docs -S || trueRepository: cobaltcore-dev/docs
Length of output: 242
🌐 Web query:
Rook Ceph quickstart cluster-test.yaml cluster.yaml production three-worker single-node testing💡 Result:
In Rook Ceph deployments, the choice between cluster.yaml and cluster-test.yaml is defined by the intended environment and hardware constraints [1][2][3]. Production Environments The cluster.yaml manifest is the standard configuration for production storage clusters [2][4]. It is designed for high availability and reliability, requiring a minimum of three worker nodes [2][5]. In this configuration, Rook enforces strict safety settings, such as multi-node monitor placement (mon.count: 3) and default data replication policies that ensure data durability across separate physical nodes [4][6][7]. Using this manifest in production helps prevent data loss in the event of a single node failure [3][5]. Testing Environments The cluster-test.yaml manifest is specifically tailored for local development, CI pipelines, or environments like minikube where redundancy is not required or feasible [1][2][3]. This configuration allows for deployment on a single node [8][5]. To achieve this, several production-safety features are relaxed, including allowing multiple monitors on a single node (allowMultiplePerNode: true), setting replica counts to 1, and skipping certain upgrade and health checks [8][6][9]. Summary of Differences - Production (cluster.yaml): Requires at least 3 nodes [2][3]. Optimizes for durability and high availability [4][7]. - Testing (cluster-test.yaml): Operates on 1 node [2][5]. Disables redundancy (size=1) and relaxes safety checks to permit operation on limited hardware [8][9]. It is strongly recommended never to use cluster-test.yaml or single-node configurations for production workloads, as a single node failure will result in total data loss [3][5][9].
Citations:
- 1: https://rook.github.io/docs/rook/latest/Getting-Started/quickstart/
- 2: https://rook.github.io/docs/rook/latest/Getting-Started/example-configurations/
- 3: https://www.rook.io/docs/rook/latest-release/Getting-Started/example-configurations/
- 4: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster.yaml
- 5: https://rook.io/docs/rook/latest/Getting-Started/example-configurations/
- 6: https://github.com/rook/rook/blob/master/Documentation/CRDs/Cluster/ceph-cluster-crd.md
- 7: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster-on-pvc.yaml
- 8: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster-test.yaml
- 9: https://oneuptime.com/blog/post/2026-03-31-rook-ceph-single-node-test-configuration/view
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n== docs/usage/rook-ceph-install.md ==\n' awk 'NR>=1 && NR<=140 { printf "%6d %s\n", NR, $0 }' docs/usage/rook-ceph-install.md printf '\n== related references in docs ==\n' rg -n "cluster-test\.yaml|cluster\.yaml|1 node minimum|production cluster|testing|rook" docs -SRepository: cobaltcore-dev/docs
Length of output: 20715
Align the testing note with the deployed manifest (
docs/usage/rook-ceph-install.md:25-31) The guide advertises a 1-node test path, but the install steps always usecluster.yaml. Either remove the single-node wording or add acluster-test.yamlpath for testing.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 25 - 31, The prerequisites mention a one-node testing path that is not supported by the documented manifest. Update the Rook installation prerequisites to remove the “1 node minimum for testing” wording, or add and document a corresponding cluster-test.yaml installation path alongside the existing cluster.yaml steps.
175-193: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
sed -n '160,210p' docs/usage/rook-ceph-install.mdRepository: cobaltcore-dev/docs
Length of output: 967
🏁 Script executed:
#!/bin/bash set -euo pipefail echo '--- docs/usage/rook-ceph-install.md (lines 160-210) ---' nl -ba docs/usage/rook-ceph-install.md | sed -n '160,210p'Repository: cobaltcore-dev/docs
Length of output: 253
🌐 Web query:
Rook Ceph storage.nodes useAllNodes useAllDevices hostname labels documentation💡 Result:
In Rook Ceph, storage configuration is managed within the CephCluster Custom Resource Definition (CRD) under the storage specification. Key settings for node and device management include useAllNodes, useAllDevices, and the nodes list [1][2]. useAllNodes: When set to true, Rook automatically consumes all eligible Kubernetes nodes for storage [3]. Rook will start using any usable node that comes online [3]. For production environments, it is recommended to set this to false to maintain explicit control over cluster membership and data reliability [3]. When false, you must manually specify nodes in the nodes list [1]. useAllDevices: When set to true, Rook automatically consumes all detected storage devices on the selected nodes [1]. This setting is not recommended unless the environment is strictly controlled, as it may lead to unintended formatting of devices containing existing data [1]. nodes: This field allows for fine-grained, node-specific storage configuration [4][5]. When providing a list of nodes, useAllNodes must be set to false [1][4]. Each entry in the nodes list requires a name, which must match the node's kubernetes.io/hostname label [5]. You can define specific devices or device filters per node, and override cluster-level configuration settings [1][4]. Hostname Labels: By default, Rook uses the kubernetes.io/hostname label to identify node hostnames [6][7]. If your environment uses a different convention, you can configure a custom label to identify the node hostname using the customHostnameLabel setting in the Rook Ceph operator Helm chart [6][7]. For detailed placement and scheduling, you can use the placement section in the CephCluster CRD, which allows the use of nodeAffinity, nodeSelector, and tolerations to target specific nodes based on custom labels (e.g., role: rook-osd-node) [5].
Citations:
- 1: https://github.com/rook/rook/blob/master/Documentation/CRDs/Cluster/ceph-cluster-crd.md
- 2: https://rook.io/docs/rook/latest/CRDs/Cluster/ceph-cluster-crd/
- 3: https://rook.github.io/docs/rook/latest-release/CRDs/Cluster/ceph-cluster-crd/
- 4: https://rook.io/docs/rook/latest/CRDs/Cluster/host-cluster/
- 5: https://rook.io/docs/rook/latest-release/CRDs/Cluster/host-cluster/
- 6: https://rook.io/docs/rook/latest-release/Helm-Charts/operator-chart/
- 7: https://github.com/rook/rook/blob/HEAD/deploy/charts/rook-ceph/values.yaml
🏁 Script executed:
#!/bin/bash set -euo pipefail rg -n "useAllNodes|useAllDevices|storage.nodes|hostname" docs/usage/rook-ceph-install.md .Repository: cobaltcore-dev/docs
Length of output: 649
🌐 Web query:
Rook Ceph useAllDevices false when nodes list explicit devices host-cluster docs💡 Result:
To explicitly list devices for nodes in a Rook Ceph cluster, you must set both useAllNodes and useAllDevices to false within the CephCluster custom resource [1][2]. Once these are disabled, Rook will only utilize the nodes and devices explicitly defined in the nodes configuration section [1][2]. Configuration Steps: 1. In the CephCluster CR, set spec.storage.useAllNodes to false and spec.storage.useAllDevices to false [1][2]. 2. Populate the spec.storage.nodes list [1][2]. 3. For each entry in the nodes list: - name: The hostname of the node (should match the kubernetes.io/hostname label) [3]. - devices: A list of specific devices or partitions to use [1][4]. You can specify short kernel names (e.g., sdb) or full udev paths (e.g., /dev/disk/by-id/ata-ST4000DM004-XXXX) [1][4]. Using udev paths is recommended as they are persistent across reboots [4][5]. Example configuration snippet: spec: storage: useAllNodes: false useAllDevices: false nodes: - name: "node-name" devices: - name: "sdb" - name: "/dev/disk/by-id/ata-example-disk-id" When useAllDevices is set to false, Rook ignores any devices not explicitly listed in the nodes configuration [1][2]. Note that if you are migrating an existing cluster from useAllDevices: true, existing OSDs will continue to run; the setting primarily controls future device discovery and OSD provisioning [6].
Citations:
- 1: https://www.rook.io/docs/rook/latest/CRDs/Cluster/host-cluster/
- 2: https://rook.io/docs/rook/latest/CRDs/Cluster/host-cluster/
- 3: https://github.com/rook/rook/blob/HEAD/deploy/examples/cluster.yaml
- 4: https://github.com/rook/rook/blob/master/Documentation/CRDs/Cluster/ceph-cluster-crd.md
- 5: https://www.rook.io/docs/rook/latest/CRDs/Cluster/ceph-cluster-crd/
- 6: rook/rook#13357
Set
useAllNodes: falsein the explicit-device example.storage.nodesis only honored when bothuseAllNodesanduseAllDevicesarefalse, and eachnamemust match the node’skubernetes.io/hostnamelabel.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 175 - 193, Update the explicit-device storage example to set both useAllNodes: false and useAllDevices: false, and clarify that each storage.nodes name must match the corresponding node’s kubernetes.io/hostname label.
175-228: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
python3 - <<'PY' from pathlib import Path path = Path('docs/usage/rook-ceph-install.md') data = path.read_bytes() print('contains_nbsp=', b'\xc2\xa0' in data) for i, line in enumerate(data.splitlines(), 1): if 175 <= i <= 228: if b'\xc2\xa0' in line: print(f'line {i}:', line) PYRepository: cobaltcore-dev/docs
Length of output: 1939
Replace the non-breaking spaces in these YAML snippets
docs/usage/rook-ceph-install.md:177-227The fenced YAML blocks contain U+00A0 characters in indentation and inline spacing, so copy-pasted manifests can fail YAML parsing. Normalize every YAML example in this section to plain ASCII spaces.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 175 - 228, Replace all non-breaking space characters in the fenced YAML examples under the storage, Resource Limits, and Network Configuration sections with ordinary ASCII spaces, preserving the existing YAML indentation and formatting so the snippets can be copied and parsed correctly.
221-228: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail # Inspect the referenced section with line numbers sed -n '200,240p' docs/usage/rook-ceph-install.md | cat -n # Find related network/encryption mentions in the repo rg -n "connections\.encryption|dual network|public and cluster|wire encryption|multus|network selectors|address ranges" docs -S # Map the relevant docs file structure ast-grep outline docs/usage/rook-ceph-install.md --view expandedRepository: cobaltcore-dev/docs
Length of output: 1634
🌐 Web query:
Rook Ceph cluster CRD connections encryption dual network public cluster networks kernel CSI prerequisites💡 Result:
In Rook Ceph, managing dual networks and encryption involves specific CRD configurations and kernel prerequisites. Network Configuration Ceph clusters can use two distinct networks: the public network (for client communication, including CSI) and the cluster network (for internal replication and recovery traffic) [1]. - Dual Network Setup: Rook supports these networks via the
networksection in the CephCluster CRD [2][3]. Using themultusprovider allows you to select specific NetworkAttachmentDefinitions for thepublicandclusterinterfaces [1]. - Isolation: If theclusternetwork is not explicitly configured, Ceph defaults to using thepublicnetwork for all traffic [1]. Only OSD pods typically attach to both networks; other components and CSI pods primarily utilize the public network [1]. - CIDRs: Rook attempts auto-discovery of CIDRs, but manual specification viaaddressRangesis recommended if auto-detection fails or network leases cannot be recycled automatically [1]. Encryption and Kernel Prerequisites Ceph supports encryption both at rest and in transit [4]. - In-Transit Encryption: Configuring encryption for communication between Ceph daemons requires the msgr2 protocol [2][3]. EnablingrequireMsgr2in the CephCluster CRD ensures traffic is restricted to the v2 port [2][3]. This feature necessitates a kernel version of at least 5.11 (or CentOS 8.4+) [3]. - At-Rest Encryption (OSDs): Rook supports OSD-level encryption using LUKS whenencrypted: trueis set in thestorageClassDeviceSets[5][4]. Keys can be managed via Kubernetes Secrets or integrated with an external KMS like HashiCorp Vault [5][4]. - CephFS Encryption (CSI): For CephFS fscrypt encryption, a Linux kernel version 6.6 or higher is required on all nodes, along with thecephkernel module andCONFIG_FS_ENCRYPTIONsupport enabled [6][7]. - General CSI Prerequisites: Ensure the required modules (RBD, CephFS) are available on host nodes. Ifmodprobe rbdfails, the kernel may need to be updated or rebuilt [8]. Rook CSI plugin pods must have bind-mount access to these modules [8]. Recent versions (e.g., Rook 1.19+) generally require kernel 5.11+ for standard RBD/block PVC operations [9]. Top Results: [2], [1], [3], [8], [7], [4]Citations:
- 1: https://rook.github.io/docs/rook/latest/CRDs/Cluster/network-providers/
- 2: https://rook.github.io/docs/rook/latest/CRDs/Cluster/ceph-cluster-crd/
- 3: https://github.com/rook/rook/blob/master/Documentation/CRDs/Cluster/ceph-cluster-crd.md
- 4: https://oneuptime.com/blog/post/2026-03-31-rook-ceph-encryption-compliance/view
- 5: https://rook.io/docs/rook/latest/Storage-Configuration/Advanced/key-management-system/
- 6: https://github.com/rook/rook/blob/master/Documentation/Storage-Configuration/Ceph-CSI/ceph-csi-drivers.md
- 7: https://oneuptime.com/blog/post/2026-03-31-rook-cephfs-fscrypt-encryption/view
- 8: https://www.rook.io/docs/rook/latest/Getting-Started/Prerequisites/prerequisites/
- 9: rook/rook#16988
🏁 Script executed:
#!/bin/bash set -euo pipefail # Look for the exact CRD docs in repo references, if any rg -n "ceph-cluster-crd|connections:|encryption:" docs -S # Show any mention of separate public/cluster networks in usage docs rg -n "public network|cluster network|cluster-networks|public-networks|address range|network selectors" docs -SRepository: cobaltcore-dev/docs
Length of output: 385
Separate dual-network and encryption settings
connections.encryptionis Ceph wire encryption, not the dual-network configuration. The dual-network example should stay undernetworkselectors/address ranges, and encryption should be documented separately with its prerequisites.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 221 - 228, Update the YAML example in the network configuration section to remove the `connections.encryption` block from the dual-network example. Document dual-network setup using the appropriate network selectors or address ranges, and add a separate encryption section describing Ceph wire encryption and its prerequisites.
327-339: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Either test RGW or narrow the “all storage types” claim.
The verification commands exercise only RBD and CephFS. Add an object-storage test, or state explicitly that only block and file storage are tested.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 327 - 339, The “Test Storage Functionality” section claims to test each storage type but only covers RBD and CephFS. Update the section to include an RGW object-storage verification workload and commands, or revise the heading and introductory text to explicitly state that only block and file storage are tested.
382-395: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n## Target file context\n' nl -ba docs/usage/rook-ceph-install.md | sed -n '320,430p' printf '\n## Search for storage consumer mentions in docs/usage/rook-ceph-install.md\n' rg -n "PVC|pvc|workload|storage class|StorageClass|object.yaml|filesystem.yaml|cluster.yaml|operator.yaml|cleanup|delete" docs/usage/rook-ceph-install.md printf '\n## Search repository for rook teardown guidance references\n' rg -n "teardown|Delete storage consumers|PVCs|StorageClass|rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown" docs -SRepository: cobaltcore-dev/docs
Length of output: 221
🏁 Script executed:
#!/bin/bash set -euo pipefail printf '\n## Target file context\n' awk 'NR>=320 && NR<=430 {printf "%6d %s\n", NR, $0}' docs/usage/rook-ceph-install.md printf '\n## Search for storage consumer mentions in docs/usage/rook-ceph-install.md\n' rg -n "PVC|pvc|workload|storage class|StorageClass|object.yaml|filesystem.yaml|cluster.yaml|operator.yaml|cleanup|delete" docs/usage/rook-ceph-install.md printf '\n## Search repository for rook teardown guidance references\n' rg -n "teardown|Delete storage consumers|PVCs|StorageClass|rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown" docs -SRepository: cobaltcore-dev/docs
Length of output: 5488
🌐 Web query:
Rook Ceph teardown documentation delete PVCs workloads storage classes finalizers node restart cleanup💡 Result:
To safely tear down a Rook-Ceph cluster, you must follow a specific sequence to avoid volume hangs, data loss, or "terminating" state deadlocks [1][2][3]. 1. Clean up Workloads and Storage Before removing the cluster, delete all applications consuming Rook storage [1][4]. - Delete workloads (Deployments, StatefulSets) using the storage [1][4]. - Delete PVCs backed by Rook-Ceph [2]. - Delete associated StorageClasses [1][4]. - If PVs remain in a "Released" state (due to Retain reclaimPolicy), delete them manually [2]. 2. Trigger Cluster Cleanup To ensure host-level cleanup (wiping drives/directories), enable the cleanup policy on the CephCluster CR [5][6]: kubectl -n rook-ceph patch cephcluster rook-ceph --type merge -p '{"spec":{"cleanupPolicy":{"confirmation":"yes-really-destroy-data"}}}' Then, delete the CephCluster CR: kubectl -n rook-ceph delete cephcluster rook-ceph The operator will launch
rook-ceph-cleanupjobs on each node to wipe thedataDirHostPath(default/var/lib/rook) and OSD disks [1][4][7]. Wait for these jobs to complete [4][7]. 3. Removing Stuck Resources (Finalizers) If the namespace or CR remains in "Terminating" indefinitely, the finalizer is likely stuck [3][8]. - First, try restarting the Rook operator to allow it to finish pending cleanup tasks [3][9]. - If it remains stuck because the operator is gone or failed to clean up mounts, you must manually remove the finalizer [3][10]. - To remove the finalizer from a stuck resource: kubectl -n rook-ceph patch --type merge -p '{"metadata":{"finalizers": []}}' 4. Node Cleanup If volumes are hung and pods are stuck terminating, nodes may require a reboot to release mounted storage [1][3][10]. Finally, manually clear any remaining files underdataDirHostPath(e.g.,/var/lib/rook) on every node to ensure no inconsistent state remains for future clusters [1][4][7]. Note: Thekubectl rook-ceph destroy-clustercommand is available as a tool to automate this process by force-removing finalizers, but it is destructive and should only be used if manual cleanup is not feasible [11]. Always back up data before beginning the teardown process [2].Citations:
- 1: https://rook.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
- 2: https://oneuptime.com/blog/post/2026-03-31-rook-decommission-cluster/view
- 3: https://rook.github.io/docs/rook/latest/Storage-Configuration/ceph-teardown/
- 4: https://rook.github.io/docs/rook/v1.9/Storage-Configuration/ceph-teardown/
- 5: https://github.com/rook/rook/blob/master/Documentation/Storage-Configuration/ceph-teardown.md
- 6: https://github.com/rook/rook/blob/master/design/ceph/ceph-cluster-cleanup.md
- 7: https://rook.io/docs/rook/latest/Getting-Started/ceph-teardown/
- 8: https://rook.github.io/docs/rook/v1.9/ceph-teardown.html
- 9: https://oneuptime.com/blog/post/2026-03-31-rook-remove-finalizers-stuck-resources/view
- 10: rook/rook#2988
- 11: https://github.com/rook/kubectl-rook-ceph/blob/master/docs/destroy-cluster.md
Delete the test PVCs, pods, and StorageClasses before tearing down the cluster. This guide creates RBD/CephFS consumers, but the cleanup block only removes the Ceph resources; leaving those objects behind can stall teardown and leave volumes stuck terminating.
docs/usage/rook-ceph-install.md:329-395🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/usage/rook-ceph-install.md` around lines 382 - 395, Update the cleanup section to delete the test PVCs, pods, and StorageClasses created by the RBD/CephFS consumer examples before deleting the cluster and other Ceph resources. Add the corresponding kubectl cleanup commands near the existing teardown commands, ensuring all consumer objects are removed first.
|
After repeated unsuccessful attempts at fixing the link and squashing the commit on the command line, I used the web editor to accept the "Incoming Changes". This should resolve the problem with the dead link, and should make it possible to merge this branch into cobaltcore-dev:main. |
Add a short paragraph explaining why SAP has chosen Rook as its
Kubernetes operator.
This material was co-authored by Senol Colak. (Really, Senol deserves
the lion's share of the credit.)
Signed-off-by: Zac Dover zac.dover@proton.me
Summary by CodeRabbit
Documentation