Compare commits

...

3 Commits

47 changed files with 237 additions and 237 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,338 +2,338 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://rook.io/latest/CRDs/ceph-client-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/ceph-nfs-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/specification/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Block-Storage/ceph-block-pool-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Block-Storage/ceph-block-pool-rados-namespace-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Block-Storage/ceph-rbd-mirror-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/ceph-cluster-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/host-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/network-providers/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/pvc-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/stretch-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/advance-external/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/consumer-import/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/external-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/provider-export/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/topology-for-external-mode/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Cluster/external-cluster/upgrade-external/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Object-Storage/ceph-object-realm-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Object-Storage/ceph-object-store-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Object-Storage/ceph-object-store-user-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Object-Storage/ceph-object-zone-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Object-Storage/ceph-object-zonegroup-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Shared-Filesystem/ceph-filesystem-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Shared-Filesystem/ceph-fs-mirror-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/CRDs/Shared-Filesystem/ceph-fs-subvolumegroup-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Contributing/ci-configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Contributing/development-environment/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Contributing/development-flow/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Contributing/documentation/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Contributing/rook-test-framework/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/ceph-openshift/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/ceph-teardown/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/example-configurations/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/glossary/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/intro/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/quickstart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/release-cycle/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/storage-architecture/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/Prerequisites/authenticated-registry/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Getting-Started/Prerequisites/prerequisites/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Helm-Charts/ceph-cluster-chart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Helm-Charts/helm-charts/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Helm-Charts/operator-chart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/ceph-teardown/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Advanced/ceph-configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Advanced/ceph-mon-health/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Advanced/ceph-osd-mgmt/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Advanced/configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Advanced/key-management-system/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Block-Storage-RBD/block-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Block-Storage-RBD/rbd-async-disaster-recovery-failover-failback/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Block-Storage-RBD/rbd-mirroring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Ceph-CSI/ceph-csi-drivers/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Ceph-CSI/ceph-csi-snapshot/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Ceph-CSI/ceph-csi-volume-clone/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Ceph-CSI/ceph-csi-volume-group-snapshot/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Ceph-CSI/custom-images/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Monitoring/ceph-dashboard/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Monitoring/ceph-monitoring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/NFS/nfs-advanced/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/NFS/nfs-csi-driver/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/NFS/nfs-security/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/NFS/nfs/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/ceph-object-bucket-claim/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/ceph-object-bucket-notifications/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/ceph-object-multisite/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/ceph-object-swift/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/cosi/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Object-Storage-RGW/object-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-mirroring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/ceph-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/ceph-csi-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/ceph-toolbox/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/direct-tools/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/disaster-recovery/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/kubectl-plugin/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/openshift-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Troubleshooting/performance-profiling/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Upgrade/ceph-upgrade/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Upgrade/health-verification/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Upgrade/node-maintenance/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/latest/Upgrade/rook-upgrade/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
</urlset>

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,13 +2,13 @@
<span class=normal><a href=#__codelineno-0-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1></a><span class=go>toolbox=$(kubectl get pod -l app=rook-ceph-tools -n rook-ceph -o jsonpath=&#39;{.items[*].metadata.name}&#39;)</span>
<a id=__codelineno-0-2 name=__codelineno-0-2></a><span class=go>kubectl -n rook-ceph cp deploy/examples/external/create-external-cluster-resources.py $toolbox:/etc/ceph</span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Exec to the toolbox pod and execute create-external-cluster-resources.py with needed options to create required <a href=../provider-export/#1-create-all-users-and-keys>users and keys</a>.</p> </li> </ol> <div class="admonition important"> <p class=admonition-title>Important</p> <p>For other clusters to connect to storage in this cluster, Rook must be configured with a networking configuration that is accessible from other clusters. Most commonly this is done by enabling host networking in the CephCluster CR so the Ceph daemons will be addressable by their host IPs.</p> </div> <h2 id=admin-privileges>Admin privileges<a class=headerlink href=#admin-privileges title="Permanent link">&para;</a></h2> <p>If in case the cluster needs the admin keyring to configure, update the admin key <code>rook-ceph-mon</code> secret with client.admin keyring</p> <div class="admonition note"> <p class=admonition-title>Note</p> <p>Sharing the admin key with the external cluster is not generally recommended</p> </div> <ol> <li> <p>Get the <code>client.admin</code> keyring from the ceph cluster</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-1-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1></a><span class=go>ceph auth get client.admin</span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Update two values in the <code>rook-ceph-mon</code> secret:</p> <ul> <li><code>ceph-username</code>: Set to <code>client.admin</code></li> <li><code>ceph-secret</code>: Set the client.admin keyring</li> </ul> </li> </ol> <p>After restarting the rook operator (and the toolbox if in use), rook will configure ceph with admin privileges.</p> <h2 id=connect-to-an-external-object-store>Connect to an External Object Store<a class=headerlink href=#connect-to-an-external-object-store title="Permanent link">&para;</a></h2> <p>Create the <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/external/object-external.yaml>external object store CR</a> to configure connection to external gateways.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-2-1>1</a></span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Update two values in the <code>rook-ceph-mon</code> secret:</p> <ul> <li><code>ceph-username</code>: Set to <code>client.admin</code></li> <li><code>ceph-secret</code>: Set the client.admin keyring</li> </ul> </li> </ol> <p>After restarting the rook operator (and the toolbox if in use), rook will configure ceph with admin privileges.</p> <h2 id=connect-to-an-external-object-store>Connect to an External Object Store<a class=headerlink href=#connect-to-an-external-object-store title="Permanent link">&para;</a></h2> <p>Create the <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/external/object-external.yaml>external object store CR</a> to configure connection to external gateways.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-2-1>1</a></span>
<span class=normal><a href=#__codelineno-2-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1></a><span class=go>cd deploy/examples/external</span>
<a id=__codelineno-2-2 name=__codelineno-2-2></a><span class=go>kubectl create -f object-external.yaml</span>
</code></pre></div></td></tr></table></div> <p>Consume the S3 Storage, in two different ways:</p> <ol> <li> <p>Create an <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/object-user.yaml>Object store user</a> for credentials to access the S3 endpoint.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-3-1>1</a></span>
</code></pre></div></td></tr></table></div> <p>Consume the S3 Storage, in two different ways:</p> <ol> <li> <p>Create an <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/object-user.yaml>Object store user</a> for credentials to access the S3 endpoint.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-3-1>1</a></span>
<span class=normal><a href=#__codelineno-3-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1></a><span class=go>cd deploy/examples</span>
<a id=__codelineno-3-2 name=__codelineno-3-2></a><span class=go>kubectl create -f object-user.yaml</span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Create a <a href=https://github.com/rook/rook/blob/master/deploy/examples/external/storageclass-bucket-delete.yaml>bucket storage class</a> where a client can request creating buckets and then create the <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/external/object-bucket-claim-delete.yaml>Object Bucket Claim</a>, which will create an individual bucket for reading and writing objects.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Create a <a href=https://github.com/rook/rook/blob/master/deploy/examples/external/storageclass-bucket-delete.yaml>bucket storage class</a> where a client can request creating buckets and then create the <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/external/object-bucket-claim-delete.yaml>Object Bucket Claim</a>, which will create an individual bucket for reading and writing objects.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
<span class=normal><a href=#__codelineno-4-2>2</a></span>
<span class=normal><a href=#__codelineno-4-3>3</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1></a><span class=go>cd deploy/examples/external</span>
<a id=__codelineno-4-2 name=__codelineno-4-2></a><span class=go>kubectl create -f storageclass-bucket-delete.yaml</span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -67,7 +67,7 @@
</code></pre></div></td></tr></table></div> <h3 id=validating-multus-configuration>Validating Multus configuration<a class=headerlink href=#validating-multus-configuration title="Permanent link">&para;</a></h3> <p>We <strong>highly</strong> recommend validating your Multus configuration before you install a CephCluster. A tool exists to facilitate validating the Multus configuration. After installing the Rook operator and before installing any Custom Resources, run the tool from the operator pod.</p> <p>The tool's CLI is designed to be as helpful as possible. Get help text for the multus validation tool like so:</p> <ol> <li> <p>Exec into the Rook operator pod</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1></a><span class=go>kubectl --namespace rook-ceph exec -it deploy/rook-ceph-operator -- bash</span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Output and read the tool's help text</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-5-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1></a><span class=go>rook multus validation run --help</span>
</code></pre></div></td></tr></table></div> </li> <li> <p>Use the validation tool config file for advanced configuration.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-6-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-6-1 name=__codelineno-6-1></a><span class=go>rook multus validation config --help</span>
</code></pre></div></td></tr></table></div> <p>Generate a sample config, that includes commented help text, using one of the available templates.</p> </li> <li> <p>Run the tool after configuring. If the tool fails, it will suggest what things may be preventing Multus networks from working properly, and it will request the logs and outputs that will help debug issues.</p> </li> </ol> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The tool requires host network access. Many Kubernetes distros have security limitations. Use the tool's <code>serviceAccountName</code> config option or <code>--service-account-name</code> CLI flag to instruct the tool to run using a particular ServiceAccount in order to allow necessary permissions. An example compatible with openshift is provided in the Rook repository at <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/multus-validation-test-openshift.yaml>deploy/examples/multus-validation-test-openshift.yaml</a></p> </div> <h3 id=known-limitations-with-multus>Known limitations with Multus<a class=headerlink href=#known-limitations-with-multus title="Permanent link">&para;</a></h3> <p>Daemons leveraging Kubernetes service IPs (Monitors, Managers, Rados Gateways) are not listening on the NAD specified in the <code>selectors</code>. Instead the daemon listens on the default network, however the NAD is attached to the container, allowing the daemon to communicate with the rest of the cluster. There is work in progress to fix this issue in the <a href=https://github.com/k8snetworkplumbingwg/multus-service>multus-service</a> repository. At the time of writing it's unclear when this will be supported.</p> <h3 id=multus-examples>Multus examples<a class=headerlink href=#multus-examples title="Permanent link">&para;</a></h3> <h4 id=macvlan-whereabouts-node-dynamic-ips>Macvlan, Whereabouts, Node Dynamic IPs<a class=headerlink href=#macvlan-whereabouts-node-dynamic-ips title="Permanent link">&para;</a></h4> <p>The network plan for this cluster will be as follows:</p> <ul> <li>The underlying network supporting the public network will be attached to hosts at <code>eth0</code></li> <li>Macvlan will be used to attach pods to <code>eth0</code></li> <li>Pods and nodes will have separate IP ranges</li> <li>Nodes will get the IP range 192.168.252.0/22 (this allows up to 1024 hosts)</li> <li>Nodes will have IPs assigned dynamically via DHCP (DHCP configuration is outside the scope of this document)</li> <li>Pods will get the IP range 192.168.0.0/18 (this allows up to 16,384 Rook/Ceph pods)</li> <li>Whereabouts will be used to assign IPs to the Multus public network</li> </ul> <p>Node configuration must allow nodes to route to pods on the Multus public network.</p> <p>Because pods will be connecting via Macvlan, and because Macvlan does not allow hosts and pods to route between each other, the host must also be connected via Macvlan.</p> <p>Because the host IP range is different from the pod IP range, a route must be added to include the pod range.</p> <p>Such a configuration should be equivalent to the following:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-7-1>1</a></span>
</code></pre></div></td></tr></table></div> <p>Generate a sample config, that includes commented help text, using one of the available templates.</p> </li> <li> <p>Run the tool after configuring. If the tool fails, it will suggest what things may be preventing Multus networks from working properly, and it will request the logs and outputs that will help debug issues.</p> </li> </ol> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The tool requires host network access. Many Kubernetes distros have security limitations. Use the tool's <code>serviceAccountName</code> config option or <code>--service-account-name</code> CLI flag to instruct the tool to run using a particular ServiceAccount in order to allow necessary permissions. An example compatible with openshift is provided in the Rook repository at <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/multus-validation-test-openshift.yaml>deploy/examples/multus-validation-test-openshift.yaml</a></p> </div> <h3 id=known-limitations-with-multus>Known limitations with Multus<a class=headerlink href=#known-limitations-with-multus title="Permanent link">&para;</a></h3> <p>Daemons leveraging Kubernetes service IPs (Monitors, Managers, Rados Gateways) are not listening on the NAD specified in the <code>selectors</code>. Instead the daemon listens on the default network, however the NAD is attached to the container, allowing the daemon to communicate with the rest of the cluster. There is work in progress to fix this issue in the <a href=https://github.com/k8snetworkplumbingwg/multus-service>multus-service</a> repository. At the time of writing it's unclear when this will be supported.</p> <h3 id=multus-examples>Multus examples<a class=headerlink href=#multus-examples title="Permanent link">&para;</a></h3> <h4 id=macvlan-whereabouts-node-dynamic-ips>Macvlan, Whereabouts, Node Dynamic IPs<a class=headerlink href=#macvlan-whereabouts-node-dynamic-ips title="Permanent link">&para;</a></h4> <p>The network plan for this cluster will be as follows:</p> <ul> <li>The underlying network supporting the public network will be attached to hosts at <code>eth0</code></li> <li>Macvlan will be used to attach pods to <code>eth0</code></li> <li>Pods and nodes will have separate IP ranges</li> <li>Nodes will get the IP range 192.168.252.0/22 (this allows up to 1024 hosts)</li> <li>Nodes will have IPs assigned dynamically via DHCP (DHCP configuration is outside the scope of this document)</li> <li>Pods will get the IP range 192.168.0.0/18 (this allows up to 16,384 Rook/Ceph pods)</li> <li>Whereabouts will be used to assign IPs to the Multus public network</li> </ul> <p>Node configuration must allow nodes to route to pods on the Multus public network.</p> <p>Because pods will be connecting via Macvlan, and because Macvlan does not allow hosts and pods to route between each other, the host must also be connected via Macvlan.</p> <p>Because the host IP range is different from the pod IP range, a route must be added to include the pod range.</p> <p>Such a configuration should be equivalent to the following:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-7-1>1</a></span>
<span class=normal><a href=#__codelineno-7-2>2</a></span>
<span class=normal><a href=#__codelineno-7-3>3</a></span>
<span class=normal><a href=#__codelineno-7-4>4</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-7-1 name=__codelineno-7-1></a><span class=go>ip link add public-shim link eth0 type macvlan mode bridge</span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -44,7 +44,7 @@
<a id=__codelineno-7-2 name=__codelineno-7-2></a><span class=go>export CEPH_KEYRING=/libsqliteceph/ceph.keyring;</span>
<a id=__codelineno-7-3 name=__codelineno-7-3></a><span class=go>export CEPH_ARGS=--id example;</span>
<a id=__codelineno-7-4 name=__codelineno-7-4></a><span class=go>ceph status</span>
</code></pre></div></td></tr></table></div> <p>With this config, the ceph tools (<code>ceph</code> CLI, in-program access, etc) can connect to and utilize the Ceph cluster.</p> <h2 id=use-case-sqlite>Use Case: SQLite<a class=headerlink href=#use-case-sqlite title="Permanent link">&para;</a></h2> <p>The Ceph project contains a <a href=https://www.sqlite.org/vfs.html>SQLite VFS</a> that interacts with RADOS directly, called <a href=https://docs.ceph.com/en/latest/rados/api/libcephsqlite/ ><code>libcephsqlite</code></a>.</p> <p>First, on your workload ensure that you have the appropriate packages installed that make <code>libcephsqlite.so</code> available:</p> <ul> <li><a href=https://pkgs.alpinelinux.org/package/edge/community/x86_64/ceph><code>ceph</code> on Alpine</a></li> <li><a href=https://pkgs.alpinelinux.org/package/edge/community/x86_64/ceph><code>libsqlite3-mod-ceph</code> on Ubuntu</a></li> <li><a href="https://pkgs.org/search/?q=libcephsqlite"><code>libcephsqlite</code> on Fedora</a></li> <li><a href="https://cbs.centos.org/koji/packageinfo?packageID=534"><code>ceph</code> on CentOS</a></li> </ul> <p>Without the appropriate package (or a from-scratch build of SQLite), you will be unable to load <code>libcephsqlite.so</code>.</p> <p>After creating a <code>CephClient</code> similar to <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/sqlitevfs-client.yaml><code>deploy/examples/sqlitevfs-client.yaml</code></a> and retrieving it's credentials, you may set the following ENV variables:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
</code></pre></div></td></tr></table></div> <p>With this config, the ceph tools (<code>ceph</code> CLI, in-program access, etc) can connect to and utilize the Ceph cluster.</p> <h2 id=use-case-sqlite>Use Case: SQLite<a class=headerlink href=#use-case-sqlite title="Permanent link">&para;</a></h2> <p>The Ceph project contains a <a href=https://www.sqlite.org/vfs.html>SQLite VFS</a> that interacts with RADOS directly, called <a href=https://docs.ceph.com/en/latest/rados/api/libcephsqlite/ ><code>libcephsqlite</code></a>.</p> <p>First, on your workload ensure that you have the appropriate packages installed that make <code>libcephsqlite.so</code> available:</p> <ul> <li><a href=https://pkgs.alpinelinux.org/package/edge/community/x86_64/ceph><code>ceph</code> on Alpine</a></li> <li><a href=https://pkgs.alpinelinux.org/package/edge/community/x86_64/ceph><code>libsqlite3-mod-ceph</code> on Ubuntu</a></li> <li><a href="https://pkgs.org/search/?q=libcephsqlite"><code>libcephsqlite</code> on Fedora</a></li> <li><a href="https://cbs.centos.org/koji/packageinfo?packageID=534"><code>ceph</code> on CentOS</a></li> </ul> <p>Without the appropriate package (or a from-scratch build of SQLite), you will be unable to load <code>libcephsqlite.so</code>.</p> <p>After creating a <code>CephClient</code> similar to <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/sqlitevfs-client.yaml><code>deploy/examples/sqlitevfs-client.yaml</code></a> and retrieving it's credentials, you may set the following ENV variables:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
<span class=normal><a href=#__codelineno-8-2>2</a></span>
<span class=normal><a href=#__codelineno-8-3>3</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-8-1 name=__codelineno-8-1></a><span class=go>export CEPH_CONF=/libsqliteceph/ceph.conf;</span>
<a id=__codelineno-8-2 name=__codelineno-8-2></a><span class=go>export CEPH_KEYRING=/libsqliteceph/ceph.keyring;</span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,7 @@
<a id=__codelineno-0-7 name=__codelineno-0-7></a><span class=gp># </span>On<span class=w> </span>MacOS<span class=w> </span>with<span class=w> </span>Apple<span class=w> </span>silicon
<a id=__codelineno-0-8 name=__codelineno-0-8></a><span class=go>minikube start --disk-size=40g --extra-disks 1 --driver qemu</span>
</code></pre></div></td></tr></table></div> <p>It is recommended to install a Docker client on your host system too. Depending on your operating system follow the <a href=https://docs.docker.com/engine/install/binaries/ >official guide</a>.</p> <p>Stopping the cluster and destroying the Minikube virtual machine can be done with:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-1-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1></a><span class=go>minikube delete</span>
</code></pre></div></td></tr></table></div> <h2 id=install-helm>Install Helm<a class=headerlink href=#install-helm title="Permanent link">&para;</a></h2> <p>Use <a href=https://github.com/rook/rook/blob/HEAD/tests/scripts/helm.sh>helm.sh</a> to install Helm and set up Rook charts defined under <code>_output/charts</code> (generated by build):</p> <ul> <li>To install and set up Helm charts for Rook run <code>tests/scripts/helm.sh up</code>.</li> <li>To clean up <code>tests/scripts/helm.sh clean</code>.</li> </ul> <div class="admonition note"> <p class=admonition-title>Note</p> <p>These helper scripts depend on some artifacts under the <code>_output/</code> directory generated during build time. These scripts should be run from the project root.</p> </div> <div class="admonition note"> <p class=admonition-title>Note</p> <p>If Helm is not available in your <code>PATH</code>, Helm will be downloaded to a temporary directory (<code>/tmp/rook-tests-scripts-helm</code>) and used from that directory.</p> </div> <h2 id=using-local-rook-image-on-minikube-cluster>Using local Rook image on minikube cluster<a class=headerlink href=#using-local-rook-image-on-minikube-cluster title="Permanent link">&para;</a></h2> <p>Developers can test quickly their changes by building and using the local Rook image on their minikube cluster.</p> <p>1) Set the local Docker environment to use minikube:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal>1</span>
</code></pre></div></td></tr></table></div> <h2 id=install-helm>Install Helm<a class=headerlink href=#install-helm title="Permanent link">&para;</a></h2> <p>Use <a href=https://github.com/rook/rook/blob/release-1.17/tests/scripts/helm.sh>helm.sh</a> to install Helm and set up Rook charts defined under <code>_output/charts</code> (generated by build):</p> <ul> <li>To install and set up Helm charts for Rook run <code>tests/scripts/helm.sh up</code>.</li> <li>To clean up <code>tests/scripts/helm.sh clean</code>.</li> </ul> <div class="admonition note"> <p class=admonition-title>Note</p> <p>These helper scripts depend on some artifacts under the <code>_output/</code> directory generated during build time. These scripts should be run from the project root.</p> </div> <div class="admonition note"> <p class=admonition-title>Note</p> <p>If Helm is not available in your <code>PATH</code>, Helm will be downloaded to a temporary directory (<code>/tmp/rook-tests-scripts-helm</code>) and used from that directory.</p> </div> <h2 id=using-local-rook-image-on-minikube-cluster>Using local Rook image on minikube cluster<a class=headerlink href=#using-local-rook-image-on-minikube-cluster title="Permanent link">&para;</a></h2> <p>Developers can test quickly their changes by building and using the local Rook image on their minikube cluster.</p> <p>1) Set the local Docker environment to use minikube:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal>1</span>
<span class=normal>2</span>
<span class=normal>3</span></pre></div></td><td class=code><div><pre><span></span><code>```console
eval $(minikube docker-env -p minikube)

View File

@ -108,7 +108,7 @@
<a id=__codelineno-3-38 name=__codelineno-3-38></a>    │   └── utils
<a id=__codelineno-3-39 name=__codelineno-3-39></a>    ├── integration # integration test cases that will be invoked during golang testing
<a id=__codelineno-3-40 name=__codelineno-3-40></a>    └── scripts # scripts for setting up integration and manual testing environments
</code></pre></div></td></tr></table></div> <h2 id=development>Development<a class=headerlink href=#development title="Permanent link">&para;</a></h2> <p>To submit a change, create a branch in your fork and then submit a pull request (PR) from the branch.</p> <h3 id=design-document>Design Document<a class=headerlink href=#design-document title="Permanent link">&para;</a></h3> <p>For new features of significant scope and complexity, a design document is recommended before work begins on the implementation. Create a design document if:</p> <ul> <li>Adding a new CRD</li> <li>Adding a significant feature.</li> </ul> <p>For smaller, straightforward features and bug fixes, there is no need for a design document. Authoring a design document has many advantages:</p> <ul> <li>Forces the author to think critically about the feature and identify potential issues early in the design</li> <li>Obtain agreement amongst the community before code is written to avoid wasted effort in the wrong direction</li> <li>Newcomers may more quickly understand the feature</li> </ul> <div class="admonition note"> <p class=admonition-title>Note</p> <p>Writing code to prototype the feature while working on the design may be very useful to help flesh out the approach.</p> </div> <p>A design document should be written as a markdown file in the <a href=https://github.com/rook/rook/tree/HEAD/design>design folder</a>. Follow the process outlined in the <a href=https://github.com/rook/rook/tree/HEAD/design/design_template.md>design template</a>. There are many examples of previous design documents in that folder. Submit a pull request for the design to be discussed and approved by the community, just like any other change to the repository.</p> <h3 id=create-a-branch>Create a Branch<a class=headerlink href=#create-a-branch title="Permanent link">&para;</a></h3> <p>From a console, create a new branch based on your fork where changes will be developed:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
</code></pre></div></td></tr></table></div> <h2 id=development>Development<a class=headerlink href=#development title="Permanent link">&para;</a></h2> <p>To submit a change, create a branch in your fork and then submit a pull request (PR) from the branch.</p> <h3 id=design-document>Design Document<a class=headerlink href=#design-document title="Permanent link">&para;</a></h3> <p>For new features of significant scope and complexity, a design document is recommended before work begins on the implementation. Create a design document if:</p> <ul> <li>Adding a new CRD</li> <li>Adding a significant feature.</li> </ul> <p>For smaller, straightforward features and bug fixes, there is no need for a design document. Authoring a design document has many advantages:</p> <ul> <li>Forces the author to think critically about the feature and identify potential issues early in the design</li> <li>Obtain agreement amongst the community before code is written to avoid wasted effort in the wrong direction</li> <li>Newcomers may more quickly understand the feature</li> </ul> <div class="admonition note"> <p class=admonition-title>Note</p> <p>Writing code to prototype the feature while working on the design may be very useful to help flesh out the approach.</p> </div> <p>A design document should be written as a markdown file in the <a href=https://github.com/rook/rook/tree/release-1.17/design>design folder</a>. Follow the process outlined in the <a href=https://github.com/rook/rook/tree/release-1.17/design/design_template.md>design template</a>. There are many examples of previous design documents in that folder. Submit a pull request for the design to be discussed and approved by the community, just like any other change to the repository.</p> <h3 id=create-a-branch>Create a Branch<a class=headerlink href=#create-a-branch title="Permanent link">&para;</a></h3> <p>From a console, create a new branch based on your fork where changes will be developed:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
<span class=normal><a href=#__codelineno-4-2>2</a></span>
<span class=normal><a href=#__codelineno-4-3>3</a></span>
<span class=normal><a href=#__codelineno-4-4>4</a></span>
@ -126,7 +126,7 @@
</code></pre></div></td></tr></table></div> <p>Unit tests for individual packages can be run with the standard <code>go test</code> command.</p> <p>To see code coverage on the packages that you changed, view the <code>coverage.html</code> in a browser to inspect your new code.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-7-1>1</a></span>
<span class=normal><a href=#__codelineno-7-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-7-1 name=__codelineno-7-1></a><span class=go>go test -coverprofile=coverage.out</span>
<a id=__codelineno-7-2 name=__codelineno-7-2></a><span class=go>go tool cover -html=coverage.out -o coverage.html</span>
</code></pre></div></td></tr></table></div> <h3 id=writing-unit-tests>Writing unit tests<a class=headerlink href=#writing-unit-tests title="Permanent link">&para;</a></h3> <p>Good unit tests start with easily testable code. Small chunks ("units") of code can be easily tested for every possible input. Higher-level code units that are built from smaller, already-tested units can more easily verify that the units are combined together correctly.</p> <p>Common cases that may need tests:</p> <ul> <li>the feature is enabled</li> <li>the feature is disabled</li> <li>the feature is only partially enabled, for every possible way it can be partially enabled</li> <li>every error that can be encountered during execution of the feature</li> <li>the feature can be disabled (including partially) after it was enabled</li> <li>the feature can be modified (including partially) after it was enabled</li> <li>if there is a slice/array involved, test length = 0, length = 1, length = 3, length == max, length &gt; max</li> <li>an input is not specified, for each input</li> <li>an input is specified incorrectly, for each input</li> <li>a resource the code relies on doesn't exist, for each dependency</li> </ul> <h2 id=linting>Linting<a class=headerlink href=#linting title="Permanent link">&para;</a></h2> <p>Run <code>make lint</code> to run all linters. This will require the following CLI tools to be installed on the system:</p> <ul> <li><a href=https://www.yamllint.com/ >yamllint</a></li> <li><a href=https://www.shellcheck.net/ >shellcheck</a></li> <li><a href=https://www.pylint.org/ >pylint</a></li> <li><a href=https://github.com/DavidAnson/markdownlint-cli2>markdownlint-cli2</a></li> </ul> <p>Many of those tools are available via <code>brew</code> for MacOS or as Linux distribution packages. Otherwise refer to the respective project websites for installation instructions.</p> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>Run <code>make help</code> to see a list of all possible make targets</p> </div> <h2 id=integration-tests>Integration Tests<a class=headerlink href=#integration-tests title="Permanent link">&para;</a></h2> <p>Rook's upstream continuous integration (CI) tests will run integration tests against your changes automatically.</p> <h2 id=tmate-session>Tmate Session<a class=headerlink href=#tmate-session title="Permanent link">&para;</a></h2> <p>Integration tests will be run in Github actions. If an integration test fails, enable a tmate session to troubleshoot the issue by one of the following steps:</p> <ul> <li>Restart the CI action and click the "Enable debug logging" checkbox from the github UI, or</li> <li>Add the label <code>debug-ci</code> to the PR and push your changes again.</li> </ul> <p>See the action details for an ssh connection to the Github runner.</p> <h2 id=commit-structure>Commit structure<a class=headerlink href=#commit-structure title="Permanent link">&para;</a></h2> <p>Rook maintainers value clear and detailed commit messages.</p> <p>Requirements for commits:</p> <ul> <li>A commit prefix from the <a href=https://github.com/rook/rook/blob/HEAD/.commitlintrc.json>list of known prefixes</a></li> <li>At least one paragraph that explains the original issue and the changes in the commit</li> <li>The <code>Signed-off-by</code> tag is at the end of the commit message, achieved by committing with <code>git commit -s</code></li> </ul> <p>An example acceptable commit message:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
</code></pre></div></td></tr></table></div> <h3 id=writing-unit-tests>Writing unit tests<a class=headerlink href=#writing-unit-tests title="Permanent link">&para;</a></h3> <p>Good unit tests start with easily testable code. Small chunks ("units") of code can be easily tested for every possible input. Higher-level code units that are built from smaller, already-tested units can more easily verify that the units are combined together correctly.</p> <p>Common cases that may need tests:</p> <ul> <li>the feature is enabled</li> <li>the feature is disabled</li> <li>the feature is only partially enabled, for every possible way it can be partially enabled</li> <li>every error that can be encountered during execution of the feature</li> <li>the feature can be disabled (including partially) after it was enabled</li> <li>the feature can be modified (including partially) after it was enabled</li> <li>if there is a slice/array involved, test length = 0, length = 1, length = 3, length == max, length &gt; max</li> <li>an input is not specified, for each input</li> <li>an input is specified incorrectly, for each input</li> <li>a resource the code relies on doesn't exist, for each dependency</li> </ul> <h2 id=linting>Linting<a class=headerlink href=#linting title="Permanent link">&para;</a></h2> <p>Run <code>make lint</code> to run all linters. This will require the following CLI tools to be installed on the system:</p> <ul> <li><a href=https://www.yamllint.com/ >yamllint</a></li> <li><a href=https://www.shellcheck.net/ >shellcheck</a></li> <li><a href=https://www.pylint.org/ >pylint</a></li> <li><a href=https://github.com/DavidAnson/markdownlint-cli2>markdownlint-cli2</a></li> </ul> <p>Many of those tools are available via <code>brew</code> for MacOS or as Linux distribution packages. Otherwise refer to the respective project websites for installation instructions.</p> <div class="admonition tip"> <p class=admonition-title>Tip</p> <p>Run <code>make help</code> to see a list of all possible make targets</p> </div> <h2 id=integration-tests>Integration Tests<a class=headerlink href=#integration-tests title="Permanent link">&para;</a></h2> <p>Rook's upstream continuous integration (CI) tests will run integration tests against your changes automatically.</p> <h2 id=tmate-session>Tmate Session<a class=headerlink href=#tmate-session title="Permanent link">&para;</a></h2> <p>Integration tests will be run in Github actions. If an integration test fails, enable a tmate session to troubleshoot the issue by one of the following steps:</p> <ul> <li>Restart the CI action and click the "Enable debug logging" checkbox from the github UI, or</li> <li>Add the label <code>debug-ci</code> to the PR and push your changes again.</li> </ul> <p>See the action details for an ssh connection to the Github runner.</p> <h2 id=commit-structure>Commit structure<a class=headerlink href=#commit-structure title="Permanent link">&para;</a></h2> <p>Rook maintainers value clear and detailed commit messages.</p> <p>Requirements for commits:</p> <ul> <li>A commit prefix from the <a href=https://github.com/rook/rook/blob/release-1.17/.commitlintrc.json>list of known prefixes</a></li> <li>At least one paragraph that explains the original issue and the changes in the commit</li> <li>The <code>Signed-off-by</code> tag is at the end of the commit message, achieved by committing with <code>git commit -s</code></li> </ul> <p>An example acceptable commit message:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
<span class=normal><a href=#__codelineno-8-2>2</a></span>
<span class=normal><a href=#__codelineno-8-3>3</a></span>
<span class=normal><a href=#__codelineno-8-4>4</a></span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -195,7 +195,7 @@
<a id=__codelineno-12-8 name=__codelineno-12-8></a><span class=w> </span><span class=no>[global]</span>
<a id=__codelineno-12-9 name=__codelineno-12-9></a><span class=w> </span><span class=no>osd crush update on start = false</span>
<a id=__codelineno-12-10 name=__codelineno-12-10></a><span class=w> </span><span class=no>osd pool default size = 2</span>
</code></pre></div></td></tr></table></div> <h2 id=custom-csi-cephconf-settings>Custom CSI <code>ceph.conf</code> Settings<a class=headerlink href=#custom-csi-cephconf-settings title="Permanent link">&para;</a></h2> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>It is highly recommended to use the default setting that comes with CephCSI and this can only be used when absolutely necessary. The <code>ceph.conf</code> should be reset back to default values if/when the configurations are no longer necessary.</p> </div> <p>If the <code>csi-ceph-conf-override</code> ConfigMap is created before the cluster is started, the CephCSI pods will automatically pick up the settings. If you add the settings to the ConfigMap after the cluster has been initialized, you can restart the Rook operator pod and wait for Rook to recreate CSI pods to take immediate effect.</p> <p>After the CSI pods are restarted, the new settings should be in effect.</p> <h3 id=example-csi-cephconf-settings>Example CSI <code>ceph.conf</code> Settings<a class=headerlink href=#example-csi-cephconf-settings title="Permanent link">&para;</a></h3> <p>In this <a href=https://github.com/rook/rook/tree/HEAD/deploy/examples/csi-ceph-conf-override.yaml>Example</a> we will set the <code>rbd_validate_pool</code> to <code>false</code> to skip rbd pool validation.</p> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Modify Ceph settings carefully to avoid modifying the default configuration. Changing the settings could result in unexpected results if used incorrectly.</p> </div> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-13-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-13-1 name=__codelineno-13-1></a><span class=go>kubectl create -f csi-ceph-conf-override.yaml</span>
</code></pre></div></td></tr></table></div> <h2 id=custom-csi-cephconf-settings>Custom CSI <code>ceph.conf</code> Settings<a class=headerlink href=#custom-csi-cephconf-settings title="Permanent link">&para;</a></h2> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>It is highly recommended to use the default setting that comes with CephCSI and this can only be used when absolutely necessary. The <code>ceph.conf</code> should be reset back to default values if/when the configurations are no longer necessary.</p> </div> <p>If the <code>csi-ceph-conf-override</code> ConfigMap is created before the cluster is started, the CephCSI pods will automatically pick up the settings. If you add the settings to the ConfigMap after the cluster has been initialized, you can restart the Rook operator pod and wait for Rook to recreate CSI pods to take immediate effect.</p> <p>After the CSI pods are restarted, the new settings should be in effect.</p> <h3 id=example-csi-cephconf-settings>Example CSI <code>ceph.conf</code> Settings<a class=headerlink href=#example-csi-cephconf-settings title="Permanent link">&para;</a></h3> <p>In this <a href=https://github.com/rook/rook/tree/release-1.17/deploy/examples/csi-ceph-conf-override.yaml>Example</a> we will set the <code>rbd_validate_pool</code> to <code>false</code> to skip rbd pool validation.</p> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Modify Ceph settings carefully to avoid modifying the default configuration. Changing the settings could result in unexpected results if used incorrectly.</p> </div> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-13-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-13-1 name=__codelineno-13-1></a><span class=go>kubectl create -f csi-ceph-conf-override.yaml</span>
</code></pre></div></td></tr></table></div> <p>Restart the Rook operator pod and wait for CSI pods to be recreated.</p> <h2 id=osd-crush-settings>OSD CRUSH Settings<a class=headerlink href=#osd-crush-settings title="Permanent link">&para;</a></h2> <p>A useful view of the <a href=http://docs.ceph.com/docs/master/rados/operations/crush-map/ >CRUSH Map</a> is generated with the following command:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-14-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-14-1 name=__codelineno-14-1></a><span class=go>ceph osd tree</span>
</code></pre></div></td></tr></table></div> <p>In this section we will be tweaking some of the values seen in the output.</p> <h3 id=osd-weight>OSD Weight<a class=headerlink href=#osd-weight title="Permanent link">&para;</a></h3> <p>The CRUSH weight controls the ratio of data that should be distributed to each OSD. This also means a higher or lower amount of disk I/O operations for an OSD with higher/lower weight, respectively.</p> <p>By default OSDs get a weight relative to their storage capacity, which maximizes overall cluster capacity by filling all drives at the same rate, even if drive sizes vary. This should work for most use-cases, but the following situations could warrant weight changes:</p> <ul> <li>Your cluster has some relatively slow OSDs or nodes. Lowering their weight can reduce the impact of this bottleneck.</li> <li>You're using bluestore drives provisioned with Rook v0.3.1 or older. In this case you may notice OSD weights did not get set relative to their storage capacity. Changing the weight can fix this and maximize cluster capacity.</li> </ul> <p>This example sets the weight of osd.0 which is 600GiB</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-15-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-15-1 name=__codelineno-15-1></a><span class=go>ceph osd crush reweight osd.0 .600</span>
</code></pre></div></td></tr></table></div> <h3 id=osd-primary-affinity>OSD Primary Affinity<a class=headerlink href=#osd-primary-affinity title="Permanent link">&para;</a></h3> <p>When pools are set with a size setting greater than one, data is replicated between nodes and OSDs. For every chunk of data a Primary OSD is selected to be used for reading that data to be sent to clients. You can control how likely it is for an OSD to become a Primary using the Primary Affinity setting. This is similar to the OSD weight setting, except it only affects reads on the storage device, not capacity or writes.</p> <p>In this example we will ensure that <code>osd.0</code> is only selected as Primary if all other OSDs holding data replicas are unavailable:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-16-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-16-1 name=__codelineno-16-1></a><span class=go>ceph osd primary-affinity osd.0 0</span>

View File

@ -32,9 +32,9 @@
<a id=__codelineno-5-7 name=__codelineno-5-7></a><span class=c1># 2022-09-14 08:58:28.899567 I | cephclient: generated admin config in /var/lib/rook/rook-ceph</span>
<a id=__codelineno-5-8 name=__codelineno-5-8></a><span class=c1># 2022-09-14 08:58:29.421345 I | cephosd: validating status of osd.0</span>
<a id=__codelineno-5-9 name=__codelineno-5-9></a>---
</code></pre></div></td></tr></table></div> <h3 id=purge-the-osd-with-a-job>Purge the OSD with a Job<a class=headerlink href=#purge-the-osd-with-a-job title="Permanent link">&para;</a></h3> <p>OSD removal can be automated with the example found in the <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/osd-purge.yaml>rook-ceph-purge-osd job</a>. In the osd-purge.yaml, change the <code>&lt;OSD-IDs&gt;</code> to the ID(s) of the OSDs you want to remove.</p> <ol> <li>Run the job: <code>kubectl create -f osd-purge.yaml</code></li> <li>When the job is completed, review the logs to ensure success: <code>kubectl -n rook-ceph logs -l app=rook-ceph-purge-osd</code></li> <li>When finished, you can delete the job: <code>kubectl delete -f osd-purge.yaml</code></li> </ol> <p>If you want to remove OSDs by hand, continue with the following sections. However, we recommend you use the above-mentioned steps to avoid operation errors.</p> <h3 id=purge-the-osd-manually>Purge the OSD manually<a class=headerlink href=#purge-the-osd-manually title="Permanent link">&para;</a></h3> <p>If the OSD purge job fails or you need fine-grained control of the removal, here are the individual commands that can be run from the toolbox.</p> <ol> <li>Detach the OSD PVC from Rook<ul> <li><code>kubectl -n rook-ceph label pvc &lt;orphaned-pvc&gt; ceph.rook.io/DeviceSetPVCId-</code></li> </ul> </li> <li>Mark the OSD as <code>out</code> if not already marked as such by Ceph. This signals Ceph to start moving (backfilling) the data that was on that OSD to another OSD.<ul> <li><code>ceph osd out osd.&lt;ID&gt;</code> (for example if the OSD ID is 23 this would be <code>ceph osd out osd.23</code>)</li> </ul> </li> <li>Wait for the data to finish backfilling to other OSDs.<ul> <li><code>ceph status</code> will indicate the backfilling is done when all of the PGs are <code>active+clean</code>. If desired, it's safe to remove the disk after that.</li> </ul> </li> <li>Remove the OSD from the Ceph cluster<ul> <li><code>ceph osd purge &lt;ID&gt; --yes-i-really-mean-it</code></li> </ul> </li> <li>Verify the OSD is removed from the node in the CRUSH map<ul> <li><code>ceph osd tree</code></li> </ul> </li> </ol> <p>The operator can automatically remove OSD deployments that are considered "safe-to-destroy" by Ceph. After the steps above, the OSD will be considered safe to remove since the data has all been moved to other OSDs. But this will only be done automatically by the operator if you have this setting in the cluster CR:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-6-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-6-1 name=__codelineno-6-1></a><span class=nt>removeOSDsIfOutAndSafeToRemove</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
</code></pre></div></td></tr></table></div> <h3 id=purge-the-osd-with-a-job>Purge the OSD with a Job<a class=headerlink href=#purge-the-osd-with-a-job title="Permanent link">&para;</a></h3> <p>OSD removal can be automated with the example found in the <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/osd-purge.yaml>rook-ceph-purge-osd job</a>. In the osd-purge.yaml, change the <code>&lt;OSD-IDs&gt;</code> to the ID(s) of the OSDs you want to remove.</p> <ol> <li>Run the job: <code>kubectl create -f osd-purge.yaml</code></li> <li>When the job is completed, review the logs to ensure success: <code>kubectl -n rook-ceph logs -l app=rook-ceph-purge-osd</code></li> <li>When finished, you can delete the job: <code>kubectl delete -f osd-purge.yaml</code></li> </ol> <p>If you want to remove OSDs by hand, continue with the following sections. However, we recommend you use the above-mentioned steps to avoid operation errors.</p> <h3 id=purge-the-osd-manually>Purge the OSD manually<a class=headerlink href=#purge-the-osd-manually title="Permanent link">&para;</a></h3> <p>If the OSD purge job fails or you need fine-grained control of the removal, here are the individual commands that can be run from the toolbox.</p> <ol> <li>Detach the OSD PVC from Rook<ul> <li><code>kubectl -n rook-ceph label pvc &lt;orphaned-pvc&gt; ceph.rook.io/DeviceSetPVCId-</code></li> </ul> </li> <li>Mark the OSD as <code>out</code> if not already marked as such by Ceph. This signals Ceph to start moving (backfilling) the data that was on that OSD to another OSD.<ul> <li><code>ceph osd out osd.&lt;ID&gt;</code> (for example if the OSD ID is 23 this would be <code>ceph osd out osd.23</code>)</li> </ul> </li> <li>Wait for the data to finish backfilling to other OSDs.<ul> <li><code>ceph status</code> will indicate the backfilling is done when all of the PGs are <code>active+clean</code>. If desired, it's safe to remove the disk after that.</li> </ul> </li> <li>Remove the OSD from the Ceph cluster<ul> <li><code>ceph osd purge &lt;ID&gt; --yes-i-really-mean-it</code></li> </ul> </li> <li>Verify the OSD is removed from the node in the CRUSH map<ul> <li><code>ceph osd tree</code></li> </ul> </li> </ol> <p>The operator can automatically remove OSD deployments that are considered "safe-to-destroy" by Ceph. After the steps above, the OSD will be considered safe to remove since the data has all been moved to other OSDs. But this will only be done automatically by the operator if you have this setting in the cluster CR:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-6-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-6-1 name=__codelineno-6-1></a><span class=nt>removeOSDsIfOutAndSafeToRemove</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
</code></pre></div></td></tr></table></div> <p>Otherwise, you will need to delete the deployment directly:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-7-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-7-1 name=__codelineno-7-1></a><span class=go>kubectl delete deployment -n rook-ceph rook-ceph-osd-&lt;ID&gt;</span>
</code></pre></div></td></tr></table></div> <p>In PVC-based cluster, remove the orphaned PVC, if necessary.</p> <h3 id=delete-the-underlying-data>Delete the underlying data<a class=headerlink href=#delete-the-underlying-data title="Permanent link">&para;</a></h3> <p>If you want to clean the device where the OSD was running, see in the instructions to wipe a disk on the <a href=../../ceph-teardown/#delete-the-data-on-hosts>Cleaning up a Cluster</a> topic.</p> <h2 id=replace-an-osd>Replace an OSD<a class=headerlink href=#replace-an-osd title="Permanent link">&para;</a></h2> <p>To replace a disk that has failed:</p> <ol> <li>Run the steps in the previous section to <a href=#remove-an-osd>Remove an OSD</a>.</li> <li>Replace the physical device and verify the new device is attached.</li> <li>Check if your cluster CR will find the new device. If you are using <code>useAllDevices: true</code> you can skip this step. If your cluster CR lists individual devices or uses a device filter you may need to update the CR.</li> <li>The operator ideally will automatically create the new OSD within a few minutes of adding the new device or updating the CR. If you don't see a new OSD automatically created, restart the operator (by deleting the operator pod) to trigger the OSD creation.</li> <li>Verify if the OSD is created on the node by running <code>ceph osd tree</code> from the toolbox.</li> </ol> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The OSD might have a different ID than the previous OSD that was replaced.</p> </div> <h2 id=osd-migration>OSD Migration<a class=headerlink href=#osd-migration title="Permanent link">&para;</a></h2> <p>Ceph does not support changing certain settings on existing OSDs. To support changing these settings on an OSD, the OSD must be destroyed and re-created with the new settings. Rook will automate this by migrating only one OSD at a time. The operator waits for the data to rebalance (PGs to become <code>active+clean</code>) before migrating the next OSD. This ensures that there is no data loss. Refer to the <a href=https://github.com/rook/rook/blob/HEAD/design/ceph/osd-migration.md>OSD migration</a> design doc for more information. </p> <p>The following scenarios are supported for OSD migration:</p> <ul> <li>Enable or disable OSD encryption for existing PVC-based OSDs by changing the <code>encrypted</code> setting under the <code>storageClassDeviceSets</code></li> </ul> <p>For example:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
</code></pre></div></td></tr></table></div> <p>In PVC-based cluster, remove the orphaned PVC, if necessary.</p> <h3 id=delete-the-underlying-data>Delete the underlying data<a class=headerlink href=#delete-the-underlying-data title="Permanent link">&para;</a></h3> <p>If you want to clean the device where the OSD was running, see in the instructions to wipe a disk on the <a href=../../ceph-teardown/#delete-the-data-on-hosts>Cleaning up a Cluster</a> topic.</p> <h2 id=replace-an-osd>Replace an OSD<a class=headerlink href=#replace-an-osd title="Permanent link">&para;</a></h2> <p>To replace a disk that has failed:</p> <ol> <li>Run the steps in the previous section to <a href=#remove-an-osd>Remove an OSD</a>.</li> <li>Replace the physical device and verify the new device is attached.</li> <li>Check if your cluster CR will find the new device. If you are using <code>useAllDevices: true</code> you can skip this step. If your cluster CR lists individual devices or uses a device filter you may need to update the CR.</li> <li>The operator ideally will automatically create the new OSD within a few minutes of adding the new device or updating the CR. If you don't see a new OSD automatically created, restart the operator (by deleting the operator pod) to trigger the OSD creation.</li> <li>Verify if the OSD is created on the node by running <code>ceph osd tree</code> from the toolbox.</li> </ol> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The OSD might have a different ID than the previous OSD that was replaced.</p> </div> <h2 id=osd-migration>OSD Migration<a class=headerlink href=#osd-migration title="Permanent link">&para;</a></h2> <p>Ceph does not support changing certain settings on existing OSDs. To support changing these settings on an OSD, the OSD must be destroyed and re-created with the new settings. Rook will automate this by migrating only one OSD at a time. The operator waits for the data to rebalance (PGs to become <code>active+clean</code>) before migrating the next OSD. This ensures that there is no data loss. Refer to the <a href=https://github.com/rook/rook/blob/release-1.17/design/ceph/osd-migration.md>OSD migration</a> design doc for more information. </p> <p>The following scenarios are supported for OSD migration:</p> <ul> <li>Enable or disable OSD encryption for existing PVC-based OSDs by changing the <code>encrypted</code> setting under the <code>storageClassDeviceSets</code></li> </ul> <p>For example:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-8-1>1</a></span>
<span class=normal><a href=#__codelineno-8-2>2</a></span>
<span class=normal><a href=#__codelineno-8-3>3</a></span>
<span class=normal><a href=#__codelineno-8-4>4</a></span>

View File

@ -161,7 +161,7 @@
<a id=__codelineno-8-2 name=__codelineno-8-2></a><span class=go>kubectl delete -f mysql.yaml</span>
<a id=__codelineno-8-3 name=__codelineno-8-3></a><span class=go>kubectl delete -n rook-ceph cephblockpools.ceph.rook.io replicapool</span>
<a id=__codelineno-8-4 name=__codelineno-8-4></a><span class=go>kubectl delete storageclass rook-ceph-block</span>
</code></pre></div></td></tr></table></div> <h2 id=advanced-example-erasure-coded-block-storage>Advanced Example: Erasure Coded Block Storage<a class=headerlink href=#advanced-example-erasure-coded-block-storage title="Permanent link">&para;</a></h2> <p>If you want to use erasure coded pool with RBD, your OSDs must use <code>bluestore</code> as their <code>storeType</code>. Additionally the nodes that are going to mount the erasure coded RBD block storage must have Linux kernel &gt;= <code>4.11</code>.</p> <div class="admonition attention"> <p class=admonition-title>Attention</p> <p>This example requires <em>at least 3 bluestore OSDs</em>, with each OSD located on a <em>different node</em>.</p> </div> <p>The OSDs must be located on different nodes, because the <a href=../../../CRDs/Block-Storage/ceph-block-pool-crd/#spec><code>failureDomain</code></a> is set to <code>host</code> and the <code>erasureCoded</code> chunk settings require at least 3 different OSDs (2 <code>dataChunks</code> + 1 <code>codingChunks</code>).</p> <p>To be able to use an erasure coded pool you need to create two pools (as seen below in the definitions): one erasure coded and one replicated.</p> <div class="admonition attention"> <p class=admonition-title>Attention</p> <p>This example requires <em>at least 3 bluestore OSDs</em>, with each OSD located on a <em>different node</em>.</p> </div> <p>The OSDs must be located on different nodes, because the <a href=../../../CRDs/Block-Storage/ceph-block-pool-crd/#spec><code>failureDomain</code></a> is set to <code>host</code> and the <code>erasureCoded</code> chunk settings require at least 3 different OSDs (2 <code>dataChunks</code> + 1 <code>codingChunks</code>).</p> <h3 id=erasure-coded-csi-driver>Erasure Coded CSI Driver<a class=headerlink href=#erasure-coded-csi-driver title="Permanent link">&para;</a></h3> <p>The erasure coded pool must be set as the <code>dataPool</code> parameter in <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/csi/rbd/storage-class-ec.yaml><code>storageclass-ec.yaml</code></a> It is used for the data of the RBD images.</p> <h2 id=node-loss>Node Loss<a class=headerlink href=#node-loss title="Permanent link">&para;</a></h2> <p>If a node goes down where a pod is running where a RBD RWO volume is mounted, the volume cannot automatically be mounted on another node. The node must be guaranteed to be offline before the volume can be mounted on another node.</p> <h3 id=configure-csi-addons>Configure CSI-Addons<a class=headerlink href=#configure-csi-addons title="Permanent link">&para;</a></h3> <p>Deploy csi-addons controller and enable <code>csi-addons</code> sidecar as mentioned in the <a href=../Ceph-CSI/ceph-csi-drivers#CSI-Addons-Controller>CSI Addons</a> guide.</p> <h3 id=handling-node-loss>Handling Node Loss<a class=headerlink href=#handling-node-loss title="Permanent link">&para;</a></h3> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Automated node loss handling is currently disabled, please refer to the <a href=../../../Troubleshooting/ceph-csi-common-issues/#node-loss>manual steps</a> to recover from the node loss. We are actively working on a new design for this feature. For more details see the <a href=https://github.com/rook/rook/issues/14832>tracking issue</a>.</p> </div> <p>When a node is confirmed to be down, add the following taints to the node:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-9-1>1</a></span>
</code></pre></div></td></tr></table></div> <h2 id=advanced-example-erasure-coded-block-storage>Advanced Example: Erasure Coded Block Storage<a class=headerlink href=#advanced-example-erasure-coded-block-storage title="Permanent link">&para;</a></h2> <p>If you want to use erasure coded pool with RBD, your OSDs must use <code>bluestore</code> as their <code>storeType</code>. Additionally the nodes that are going to mount the erasure coded RBD block storage must have Linux kernel &gt;= <code>4.11</code>.</p> <div class="admonition attention"> <p class=admonition-title>Attention</p> <p>This example requires <em>at least 3 bluestore OSDs</em>, with each OSD located on a <em>different node</em>.</p> </div> <p>The OSDs must be located on different nodes, because the <a href=../../../CRDs/Block-Storage/ceph-block-pool-crd/#spec><code>failureDomain</code></a> is set to <code>host</code> and the <code>erasureCoded</code> chunk settings require at least 3 different OSDs (2 <code>dataChunks</code> + 1 <code>codingChunks</code>).</p> <p>To be able to use an erasure coded pool you need to create two pools (as seen below in the definitions): one erasure coded and one replicated.</p> <div class="admonition attention"> <p class=admonition-title>Attention</p> <p>This example requires <em>at least 3 bluestore OSDs</em>, with each OSD located on a <em>different node</em>.</p> </div> <p>The OSDs must be located on different nodes, because the <a href=../../../CRDs/Block-Storage/ceph-block-pool-crd/#spec><code>failureDomain</code></a> is set to <code>host</code> and the <code>erasureCoded</code> chunk settings require at least 3 different OSDs (2 <code>dataChunks</code> + 1 <code>codingChunks</code>).</p> <h3 id=erasure-coded-csi-driver>Erasure Coded CSI Driver<a class=headerlink href=#erasure-coded-csi-driver title="Permanent link">&para;</a></h3> <p>The erasure coded pool must be set as the <code>dataPool</code> parameter in <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/csi/rbd/storage-class-ec.yaml><code>storageclass-ec.yaml</code></a> It is used for the data of the RBD images.</p> <h2 id=node-loss>Node Loss<a class=headerlink href=#node-loss title="Permanent link">&para;</a></h2> <p>If a node goes down where a pod is running where a RBD RWO volume is mounted, the volume cannot automatically be mounted on another node. The node must be guaranteed to be offline before the volume can be mounted on another node.</p> <h3 id=configure-csi-addons>Configure CSI-Addons<a class=headerlink href=#configure-csi-addons title="Permanent link">&para;</a></h3> <p>Deploy csi-addons controller and enable <code>csi-addons</code> sidecar as mentioned in the <a href=../Ceph-CSI/ceph-csi-drivers#CSI-Addons-Controller>CSI Addons</a> guide.</p> <h3 id=handling-node-loss>Handling Node Loss<a class=headerlink href=#handling-node-loss title="Permanent link">&para;</a></h3> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Automated node loss handling is currently disabled, please refer to the <a href=../../../Troubleshooting/ceph-csi-common-issues/#node-loss>manual steps</a> to recover from the node loss. We are actively working on a new design for this feature. For more details see the <a href=https://github.com/rook/rook/issues/14832>tracking issue</a>.</p> </div> <p>When a node is confirmed to be down, add the following taints to the node:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-9-1>1</a></span>
<span class=normal><a href=#__codelineno-9-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-9-1 name=__codelineno-9-1></a><span class=go>kubectl taint nodes &lt;node-name&gt; node.kubernetes.io/out-of-service=nodeshutdown:NoExecute</span>
<a id=__codelineno-9-2 name=__codelineno-9-2></a><span class=go>kubectl taint nodes &lt;node-name&gt; node.kubernetes.io/out-of-service=nodeshutdown:NoSchedule</span>
</code></pre></div></td></tr></table></div> <p>After the taint is added to the node, Rook will automatically blocklist the node to prevent connections to Ceph from the RBD volume on that node. To verify a node is blocklisted:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-10-1>1</a></span>

View File

@ -46,7 +46,7 @@
<a id=__codelineno-3-11 name=__codelineno-3-11></a><span class=w> </span><span class=nt>resources</span><span class=p>:</span>
<a id=__codelineno-3-12 name=__codelineno-3-12></a><span class=w> </span><span class=nt>requests</span><span class=p>:</span>
<a id=__codelineno-3-13 name=__codelineno-3-13></a><span class=w> </span><span class=nt>storage</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">1Gi</span>
</code></pre></div></td></tr></table></div> <p>A volume claim template is defined inside the pod spec, and defines a volume to be provisioned and used by the pod within its lifecycle. Volumes are provisioned when a pod is spawned and destroyed when the pod is deleted.</p> <p>Refer to the <a href=https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes>ephemeral-doc</a> for more info. See example manifests for an <a href=https://github.com/rook/rook/tree/HEAD/deploy/examples/csi/rbd/pod-ephemeral.yaml>RBD ephemeral volume</a> and a <a href=https://github.com/rook/rook/tree/HEAD/deploy/examples/csi/cephfs/pod-ephemeral.yaml>CephFS ephemeral volume</a>.</p> <h2 id=csi-addons-controller>CSI-Addons Controller<a class=headerlink href=#csi-addons-controller title="Permanent link">&para;</a></h2> <p>The CSI-Addons Controller handles requests from users. Users create a CR that the controller inspects and forwards to one or more CSI-Addons sidecars for execution.</p> <h3 id=deploying-the-controller>Deploying the controller<a class=headerlink href=#deploying-the-controller title="Permanent link">&para;</a></h3> <p>Deploy the controller by running the following commands:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
</code></pre></div></td></tr></table></div> <p>A volume claim template is defined inside the pod spec, and defines a volume to be provisioned and used by the pod within its lifecycle. Volumes are provisioned when a pod is spawned and destroyed when the pod is deleted.</p> <p>Refer to the <a href=https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes>ephemeral-doc</a> for more info. See example manifests for an <a href=https://github.com/rook/rook/tree/release-1.17/deploy/examples/csi/rbd/pod-ephemeral.yaml>RBD ephemeral volume</a> and a <a href=https://github.com/rook/rook/tree/release-1.17/deploy/examples/csi/cephfs/pod-ephemeral.yaml>CephFS ephemeral volume</a>.</p> <h2 id=csi-addons-controller>CSI-Addons Controller<a class=headerlink href=#csi-addons-controller title="Permanent link">&para;</a></h2> <p>The CSI-Addons Controller handles requests from users. Users create a CR that the controller inspects and forwards to one or more CSI-Addons sidecars for execution.</p> <h3 id=deploying-the-controller>Deploying the controller<a class=headerlink href=#deploying-the-controller title="Permanent link">&para;</a></h3> <p>Deploy the controller by running the following commands:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-4-1>1</a></span>
<span class=normal><a href=#__codelineno-4-2>2</a></span>
<span class=normal><a href=#__codelineno-4-3>3</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1></a><span class=go>kubectl create -f https://github.com/csi-addons/kubernetes-csi-addons/releases/download/v0.12.0/crds.yaml</span>
<a id=__codelineno-4-2 name=__codelineno-4-2></a><span class=go>kubectl create -f https://github.com/csi-addons/kubernetes-csi-addons/releases/download/v0.12.0/rbac.yaml</span>
@ -91,7 +91,7 @@
<a id=__codelineno-8-5 name=__codelineno-8-5></a><span class=w> </span><span class=nt>namespace</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">rook-ceph</span>
<a id=__codelineno-8-6 name=__codelineno-8-6></a><span class=nt>stringData</span><span class=p>:</span>
<a id=__codelineno-8-7 name=__codelineno-8-7></a><span class=w> </span><span class=nt>encryptionPassphrase</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">test-encryption</span>
</code></pre></div></td></tr></table></div> <ul> <li>Create a new <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/csi/rbd/storageclass.yaml>RBD storageclass</a> or <a href=https://github.com/rook/rook/blob/HEAD/deploy/examples/csi/cephfs/storageclass.yaml>CephFS storageclass</a> with additional parameters <code>encrypted: "true"</code> and <code>encryptionKMSID: "&lt;key used in configmap&gt;"</code>. An example is shown below:</li> </ul> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-9-1>1</a></span>
</code></pre></div></td></tr></table></div> <ul> <li>Create a new <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/csi/rbd/storageclass.yaml>RBD storageclass</a> or <a href=https://github.com/rook/rook/blob/release-1.17/deploy/examples/csi/cephfs/storageclass.yaml>CephFS storageclass</a> with additional parameters <code>encrypted: "true"</code> and <code>encryptionKMSID: "&lt;key used in configmap&gt;"</code>. An example is shown below:</li> </ul> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-9-1>1</a></span>
<span class=normal><a href=#__codelineno-9-2>2</a></span>
<span class=normal><a href=#__codelineno-9-3>3</a></span>
<span class=normal><a href=#__codelineno-9-4>4</a></span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -83,7 +83,7 @@
</code></pre></div></td></tr></table></div> <p>Finally, run kustomize to update the desired prometheus rules:</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-14-1>1</a></span>
<span class=normal><a href=#__codelineno-14-2>2</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-14-1 name=__codelineno-14-1></a><span class=go>kustomize build . &gt; updated-chart.yaml</span>
<a id=__codelineno-14-2 name=__codelineno-14-2></a><span class=go>kubectl create -f updated-chart.yaml</span>
</code></pre></div></td></tr></table></div> <h2 id=grafana-dashboards>Grafana Dashboards<a class=headerlink href=#grafana-dashboards title="Permanent link">&para;</a></h2> <p>The dashboards have been created by <a href=https://github.com/galexrt>@galexrt</a>. For feedback on the dashboards please reach out to him on the <a href=https://slack.rook.io>Rook.io Slack</a>.</p> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The dashboards are only compatible with Grafana 7.2.0 or higher. Also note that the dashboards are updated from time to time, to fix issues and improve them.</p> </div> <p>The following Grafana dashboards are available:</p> <ul> <li><a href=https://grafana.com/grafana/dashboards/2842>Ceph - Cluster (ID: 2842)</a></li> <li><a href=https://grafana.com/grafana/dashboards/5336>Ceph - OSD (Single) (ID: 5336)</a></li> <li><a href=https://grafana.com/grafana/dashboards/5342>Ceph - Pools (ID: 5342)</a></li> </ul> <p>The dashboard JSON files are also available on <a href=https://github.com/rook/rook/tree/HEAD/deploy/examples/monitoring/grafana/ >GitHub here <code>/deploy/examples/monitoring/grafana/</code></a>.</p> <h2 id=updates-and-upgrades>Updates and Upgrades<a class=headerlink href=#updates-and-upgrades title="Permanent link">&para;</a></h2> <p>When updating Rook, there may be updates to RBAC for monitoring. It is easy to apply the changes with each update or upgrade. This should be done at the same time you update Rook common resources like <code>common.yaml</code>.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-15-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-15-1 name=__codelineno-15-1></a><span class=go>kubectl apply -f deploy/examples/monitoring/rbac.yaml</span>
</code></pre></div></td></tr></table></div> <h2 id=grafana-dashboards>Grafana Dashboards<a class=headerlink href=#grafana-dashboards title="Permanent link">&para;</a></h2> <p>The dashboards have been created by <a href=https://github.com/galexrt>@galexrt</a>. For feedback on the dashboards please reach out to him on the <a href=https://slack.rook.io>Rook.io Slack</a>.</p> <div class="admonition note"> <p class=admonition-title>Note</p> <p>The dashboards are only compatible with Grafana 7.2.0 or higher. Also note that the dashboards are updated from time to time, to fix issues and improve them.</p> </div> <p>The following Grafana dashboards are available:</p> <ul> <li><a href=https://grafana.com/grafana/dashboards/2842>Ceph - Cluster (ID: 2842)</a></li> <li><a href=https://grafana.com/grafana/dashboards/5336>Ceph - OSD (Single) (ID: 5336)</a></li> <li><a href=https://grafana.com/grafana/dashboards/5342>Ceph - Pools (ID: 5342)</a></li> </ul> <p>The dashboard JSON files are also available on <a href=https://github.com/rook/rook/tree/release-1.17/deploy/examples/monitoring/grafana/ >GitHub here <code>/deploy/examples/monitoring/grafana/</code></a>.</p> <h2 id=updates-and-upgrades>Updates and Upgrades<a class=headerlink href=#updates-and-upgrades title="Permanent link">&para;</a></h2> <p>When updating Rook, there may be updates to RBAC for monitoring. It is easy to apply the changes with each update or upgrade. This should be done at the same time you update Rook common resources like <code>common.yaml</code>.</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-15-1>1</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-15-1 name=__codelineno-15-1></a><span class=go>kubectl apply -f deploy/examples/monitoring/rbac.yaml</span>
</code></pre></div></td></tr></table></div> <div class="admonition hint"> <p class=admonition-title>Hint</p> <p>This is updated automatically if you are upgrading via the helm chart</p> </div> <h2 id=teardown>Teardown<a class=headerlink href=#teardown title="Permanent link">&para;</a></h2> <p>To clean up all the artifacts created by the monitoring walk-through, copy/paste the entire block below (note that errors about resources "not found" can be ignored):</p> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-16-1>1</a></span>
<span class=normal><a href=#__codelineno-16-2>2</a></span>
<span class=normal><a href=#__codelineno-16-3>3</a></span>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,338 +2,338 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://rook.io/v1.17/CRDs/ceph-client-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/ceph-nfs-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/specification/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Block-Storage/ceph-block-pool-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Block-Storage/ceph-block-pool-rados-namespace-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Block-Storage/ceph-rbd-mirror-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/ceph-cluster-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/host-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/network-providers/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/pvc-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/stretch-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/advance-external/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/consumer-import/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/external-cluster/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/provider-export/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/topology-for-external-mode/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Cluster/external-cluster/upgrade-external/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Object-Storage/ceph-object-realm-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Object-Storage/ceph-object-store-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Object-Storage/ceph-object-store-user-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Object-Storage/ceph-object-zone-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Object-Storage/ceph-object-zonegroup-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Shared-Filesystem/ceph-filesystem-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Shared-Filesystem/ceph-fs-mirror-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/CRDs/Shared-Filesystem/ceph-fs-subvolumegroup-crd/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Contributing/ci-configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Contributing/development-environment/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Contributing/development-flow/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Contributing/documentation/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Contributing/rook-test-framework/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/ceph-openshift/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/ceph-teardown/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/example-configurations/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/glossary/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/intro/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/quickstart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/release-cycle/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/storage-architecture/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/Prerequisites/authenticated-registry/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Getting-Started/Prerequisites/prerequisites/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Helm-Charts/ceph-cluster-chart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Helm-Charts/helm-charts/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Helm-Charts/operator-chart/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/ceph-teardown/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Advanced/ceph-configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Advanced/ceph-mon-health/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Advanced/ceph-osd-mgmt/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Advanced/configuration/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Advanced/key-management-system/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Block-Storage-RBD/block-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Block-Storage-RBD/rbd-async-disaster-recovery-failover-failback/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Block-Storage-RBD/rbd-mirroring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Ceph-CSI/ceph-csi-drivers/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Ceph-CSI/ceph-csi-snapshot/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Ceph-CSI/ceph-csi-volume-clone/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Ceph-CSI/ceph-csi-volume-group-snapshot/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Ceph-CSI/custom-images/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Monitoring/ceph-dashboard/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Monitoring/ceph-monitoring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/NFS/nfs-advanced/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/NFS/nfs-csi-driver/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/NFS/nfs-security/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/NFS/nfs/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/ceph-object-bucket-claim/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/ceph-object-bucket-notifications/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/ceph-object-multisite/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/ceph-object-swift/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/cosi/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Object-Storage-RGW/object-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-mirroring/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-storage/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/ceph-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/ceph-csi-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/ceph-toolbox/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/direct-tools/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/disaster-recovery/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/kubectl-plugin/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/openshift-common-issues/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Troubleshooting/performance-profiling/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Upgrade/ceph-upgrade/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Upgrade/health-verification/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Upgrade/node-maintenance/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
<url>
<loc>https://rook.io/v1.17/Upgrade/rook-upgrade/</loc>
<lastmod>2025-06-05</lastmod>
<lastmod>2025-06-06</lastmod>
</url>
</urlset>

Binary file not shown.