Skip to content

Commit 72d3436

Browse files
fultonjclaude
andcommitted
Add dcn_storage scenario for DCN adoption with Ceph HCI
Add a new scenario that deploys 3 Ceph clusters across DCN sites: - Central: 3 ComputeHCI nodes with Ceph - DCN1: 3 ComputeHCIDcn1 nodes with Ceph, Cinder, Glance - DCN2: 3 ComputeHCIDcn2 nodes with Ceph, Cinder, Glance Key Ceph changes: - New dcn_storage.yaml scenario with pre_oc_run hooks to deploy Ceph via adoption_deploy_ceph.yml for each stack - HCI compute roles include CephOSD service and StorageMgmt network - Update ceph_backend_configuration role to handle >1 ceph cluster - Document adoption for multiple ceph clusters Key Glance changes: - Update role stop_openstack_services to stop glance at DCN sites - Update role glance_adoption to adopt multibackend glance - Document adoption of DCN multibackend Glance Key Cinder changes: - Update role stop_openstack_services to stop cinder-volume and etcd at DCN sites - Update role cinder_adoption to add cinder_volume_backend: dcn - Adopt cinder-backup - Document adoption of DCN multisite Cinder Key Manila changes: - Add manila_cephfs_conf_path and manila_cephfs_cluster_name variables to manila_adoption role, replacing hardcoded ceph.conf/ceph values. - Override those variables to central in vars.dcn_storage.yaml - Updated proc_deploying-file-systems-service-control-plane.adoc with a NOTE that Manila was central-only in TripleO DCN but can be deployed at edge sites in RHOSO, and bullet explaining the cluster-specific conf path Key EDPM changes: - Update data-plane-adoption role to handle many nodesets each containing differnt ceph and glance configurations - Update proc_adopting-compute-services-to-the-data-plane.adoc to document how to adopt DCN compute nodes which ran storage services so that they access the APIs for those storage services on central OpenShift This extends dcn_nostorage to support storage adoption with independent Ceph clusters at each DCN site. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: John Fulton <fulton@redhat.com>
1 parent 5b46197 commit 72d3436

51 files changed

Lines changed: 3582 additions & 15 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs_user/assemblies/assembly_adopting-openstack-control-plane-services.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ include::../modules/proc_adopting-the-compute-service.adoc[leveloffset=+1]
3434

3535
include::../modules/proc_adopting-the-block-storage-service.adoc[leveloffset=+1]
3636

37+
include::../modules/proc_adopting-block-storage-service-with-dcn-backend.adoc[leveloffset=+1]
38+
3739
include::../modules/proc_adopting-the-openstack-dashboard.adoc[leveloffset=+1]
3840

3941
include::../assemblies/assembly_adopting-the-shared-file-systems-service.adoc[leveloffset=+1]

docs_user/assemblies/assembly_adopting-the-data-plane.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ include::../modules/proc_adopting-compute-services-to-the-data-plane.adoc[levelo
2626

2727
include::../modules/proc_configuring-dcn-data-plane-nodesets.adoc[leveloffset=+1]
2828

29+
include::../modules/proc_adopting-compute-services-with-dcn-backend.adoc[leveloffset=+1]
30+
2931
include::../modules/proc_performing-a-fast-forward-upgrade-on-compute-services.adoc[leveloffset=+1]
3032

3133
include::../modules/proc_adopting-networker-services-to-the-data-plane.adoc[leveloffset=+1]

docs_user/assemblies/assembly_adopting-the-image-service.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ include::../modules/proc_adopting-image-service-with-nfs-backend.adoc[leveloffse
3131

3232
include::../modules/proc_adopting-image-service-with-ceph-backend.adoc[leveloffset=+1]
3333

34+
include::../modules/proc_adopting-image-service-with-dcn-backend.adoc[leveloffset=+1]
35+
3436
include::../modules/proc_verifying-the-image-service-adoption.adoc[leveloffset=+1]
3537

3638
ifdef::parent-context[:context: {parent-context}]

docs_user/assemblies/assembly_migrating-ceph-cluster.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ already part of the {CephCluster} cluster.
3131

3232
Before you begin the migration, complete the tasks in your {rhos_prev_long} {rhos_prev_ver} environment. For more information, see xref:red-hat-ceph-storage-prerequisites_configuring-network[{Ceph} prerequisites].
3333

34+
include::../modules/con_ceph-migration-dcn.adoc[leveloffset=+1]
3435

3536
include::../modules/con_ceph-daemon-cardinality.adoc[leveloffset=+1]
3637

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
:_mod-docs-content-type: CONCEPT
2+
[id="ceph-migration-dcn_{context}"]
3+
4+
= {Ceph} migration for Distributed Compute Node deployments
5+
6+
[role="_abstract"]
7+
Distributed Compute Node (DCN) deployments that host {CephCluster} clusters on compute nodes at edge sites have additional {Ceph} migration considerations because multiple {CephCluster} clusters exist across sites. This section applies only to DCN deployments where {Ceph}, {image_service}, and {block_storage} services are deployed on edge compute nodes.
8+
9+
.Supported edge storage topologies
10+
11+
DCN deployments support the following storage topologies at edge sites:
12+
13+
* Hyperconverged Infrastructure (HCI): {Ceph} daemons run on Compute nodes at each edge site.
14+
* {OpenStackPreviousInstaller}-deployed dedicated storage: {Ceph} runs on separate storage nodes deployed by {OpenStackPreviousInstaller}.
15+
* External {Ceph} cluster: Edge sites connect to pre-existing {CephCluster} clusters not managed by {OpenStackPreviousInstaller}.
16+
17+
.Central site {Ceph} migration
18+
19+
For the central site, migrate {Ceph} daemons from the {OpenStackShort} Controller nodes by using the same process as a non-DCN deployment. For more information, see xref:ceph-daemon-cardinality_migrating-ceph[{Ceph} daemon cardinality].
20+
21+
.Edge site {Ceph} migration
22+
23+
For edge sites that use HCI or {OpenStackPreviousInstaller}-deployed dedicated storage, the {Ceph} daemons can continue to run on their current nodes without migration. The Compute nodes or dedicated storage nodes at edge sites are not decommissioned during adoption, so the {Ceph} daemons remain operational.
24+
25+
For edge sites that use external {Ceph} clusters, no migration is required because the {CephCluster} cluster is not managed by {OpenStackPreviousInstaller}.
26+
27+
.{Ceph} backend configuration and key distribution
28+
29+
In a DCN deployment, each site has its own {CephCluster} cluster with its own configuration file and {CephX} keyring. These must be stored in Kubernetes secrets and mounted into the appropriate {rhos_long} service pods.
30+
31+
Rather than storing all {CephX} keys in a single secret accessible to every pod, the recommended approach is to create one secret per site containing only the keys that site actually needs. This limits the security impact if a site is compromised: a pod at an edge site can authenticate only to its local {CephCluster} cluster and the central cluster, not to the {CephX} keyrings of other edge sites.
32+
33+
The key distribution rule for N sites is:
34+
35+
* The central site (site 0) receives the {CephX} keys and configuration for all clusters, because central services such as {image_service} use the `split` back end and must be able to copy images to and from any site.
36+
* Each edge site (site 1 through N) receives only the keys for the central cluster and its own local cluster.
37+
38+
For example, in a three-site deployment with a central site and two edge sites:
39+
40+
----
41+
ceph-conf-central -> central.conf + central.keyring
42+
dcn1.conf + dcn1.keyring
43+
dcn2.conf + dcn2.keyring
44+
45+
ceph-conf-dcn1 -> central.conf + central.keyring
46+
dcn1.conf + dcn1.keyring
47+
48+
ceph-conf-dcn2 -> central.conf + central.keyring
49+
dcn2.conf + dcn2.keyring
50+
----
51+
52+
The per-site secrets are created and then mounted into the appropriate pods using `extraMounts` propagation labels. The procedure in xref:configuring-a-ceph-backend_migrating-databases[Configuring a {Ceph} back end] covers both creating the secrets and applying the propagation labels so that each pod receives only its site-specific keys.
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
:_mod-docs-content-type: PROCEDURE
2+
[id="adopting-block-storage-service-with-dcn-backend_{context}"]
3+
4+
= Adopting the {block_storage} with multiple {Ceph} back ends (DCN)
5+
6+
[role="_abstract"]
7+
Adopt the {block_storage_first_ref} in a Distributed Compute Node (DCN) deployment where multiple {CephCluster} clusters provide storage at different sites. This configuration deploys multiple `CinderVolume` instances, one for each availability zone, with each volume service configured to use its local {Ceph} cluster.
8+
9+
.Architecture change during adoption
10+
11+
During adoption, the {block_storage} volume services that ran on edge site compute nodes are migrated to run on {rhocp_long} at the central site. Although the control path for API requests now traverses the WAN to reach the {block_storage} running on {rhocp_long}, the data path remains local. Volume data continues to be stored in the {Ceph} cluster at each edge site. When you create a volume or clone a volume from a snapshot, the operation occurs entirely within the local {Ceph} cluster. This architecture preserves data locality and avoids transferring volume data across the WAN.
12+
13+
.Prerequisites
14+
15+
* You have completed the previous adoption steps.
16+
* The per-site {Ceph} secrets (`ceph-conf-central`, `ceph-conf-dcn1`, `ceph-conf-dcn2`) exist and contain the configuration and keyrings for each site's {Ceph} cluster. For more information, see xref:configuring-a-ceph-backend_migrating-databases[Configuring a {Ceph} back end].
17+
* The `extraMounts` property of the `OpenStackControlPlane` CR is configured to mount the {Ceph} configuration to all {block_storage} instances.
18+
* You have stopped the {block_storage} on all DCN nodes. For more information, see xref:stopping-openstack-services_{context}[Stopping {rhos_prev_long} services]. On edge sites, the {block_storage} volume service runs on compute nodes with the service name `tripleo_cinder_volume.service`.
19+
20+
.Procedure
21+
22+
. Retrieve the `fsid` for each {Ceph} cluster in your DCN deployment. The `fsid` is used as the `rbd_secret_uuid` for libvirt integration:
23+
+
24+
----
25+
$ oc get secret ceph-conf-central -o json | jq -r '.data | to_entries[] | select(.key | endswith(".conf")) | "\(.key): \(.value | @base64d)"' | grep fsid
26+
----
27+
28+
. Create a patch file for the {block_storage} with multiple {Ceph} back ends. The following example shows a DCN deployment with a central site and two edge sites:
29+
+
30+
[subs="+quotes"]
31+
----
32+
$ cat << EOF > cinder_dcn_patch.yaml
33+
spec:
34+
cinder:
35+
enabled: true
36+
template:
37+
cinderAPI:
38+
customServiceConfig: |
39+
[DEFAULT]
40+
default_availability_zone = az-central
41+
cinderScheduler:
42+
replicas: 1
43+
cinderVolumes:
44+
central:
45+
networkAttachments:
46+
- storage
47+
replicas: 1
48+
customServiceConfig: |
49+
[DEFAULT]
50+
enabled_backends = central
51+
glance_api_servers = http://glance-central-internal.openstack.svc:9292
52+
[central]
53+
backend_host = hostgroup
54+
volume_backend_name = central
55+
volume_driver = cinder.volume.drivers.rbd.RBDDriver
56+
rbd_ceph_conf = /etc/ceph/central.conf
57+
rbd_user = openstack
58+
rbd_pool = volumes
59+
rbd_flatten_volume_from_snapshot = False
60+
report_discard_supported = True
61+
rbd_secret_uuid = *<central_fsid>*
62+
rbd_cluster_name = central
63+
backend_availability_zone = az-central
64+
dcn1:
65+
networkAttachments:
66+
- storage
67+
replicas: 1
68+
customServiceConfig: |
69+
[DEFAULT]
70+
enabled_backends = dcn1
71+
glance_api_servers = http://glance-dcn1-internal.openstack.svc:9292
72+
[dcn1]
73+
backend_host = hostgroup
74+
volume_backend_name = dcn1
75+
volume_driver = cinder.volume.drivers.rbd.RBDDriver
76+
rbd_ceph_conf = /etc/ceph/dcn1.conf
77+
rbd_user = openstack
78+
rbd_pool = volumes
79+
rbd_flatten_volume_from_snapshot = False
80+
report_discard_supported = True
81+
rbd_secret_uuid = *<dcn1_fsid>*
82+
rbd_cluster_name = dcn1
83+
backend_availability_zone = az-dcn1
84+
dcn2:
85+
networkAttachments:
86+
- storage
87+
replicas: 1
88+
customServiceConfig: |
89+
[DEFAULT]
90+
enabled_backends = dcn2
91+
glance_api_servers = http://glance-dcn2-internal.openstack.svc:9292
92+
[dcn2]
93+
backend_host = hostgroup
94+
volume_backend_name = dcn2
95+
volume_driver = cinder.volume.drivers.rbd.RBDDriver
96+
rbd_ceph_conf = /etc/ceph/dcn2.conf
97+
rbd_user = openstack
98+
rbd_pool = volumes
99+
rbd_flatten_volume_from_snapshot = False
100+
report_discard_supported = True
101+
rbd_secret_uuid = *<dcn2_fsid>*
102+
rbd_cluster_name = dcn2
103+
backend_availability_zone = az-dcn2
104+
EOF
105+
----
106+
+
107+
where:
108+
109+
<central_fsid>::
110+
Specifies the `fsid` of the central {Ceph} cluster, used as the libvirt secret UUID.
111+
112+
<dcn1_fsid>::
113+
Specifies the `fsid` of the DCN1 edge {Ceph} cluster.
114+
115+
<dcn2_fsid>::
116+
Specifies the `fsid` of the DCN2 edge {Ceph} cluster.
117+
118+
+
119+
[NOTE]
120+
====
121+
* Each `CinderVolume` is configured with `backend_availability_zone` matching the {compute_service} availability zone for that site. The {block_storage} availability zone names must match the {compute_service} availability zone names exactly, because `cross_az_attach = False` is set in the {compute_service} configuration. If the names do not match, instances cannot attach volumes. Replace the example availability zone names (`az-central`, `az-dcn1`, `az-dcn2`) with the names used in your {rhos_prev_long} deployment.
122+
* Each `CinderVolume` points to its local {image_service} API endpoint via `glance_api_servers`. This ensures that volume creation from images uses the local {image_service} and {Ceph} cluster. The examples use `http://` for the {image_service} endpoints. If your {rhos_prev_long} deployment uses TLS for internal endpoints, use `https://` instead, and ensure that you have completed the TLS migration. For more information, see xref:migrating-tls-everywhere_{context}[Migrating TLS-e to the RHOSO deployment].
123+
* The `rbd_cluster_name` setting identifies which {Ceph} cluster configuration to use from the mounted secrets.
124+
* Adjust the number of edge sites and their names to match your DCN deployment.
125+
====
126+
127+
. Patch the `OpenStackControlPlane` CR to deploy the {block_storage} with multiple {Ceph} back ends:
128+
+
129+
----
130+
$ oc patch openstackcontrolplane openstack --type=merge --patch-file cinder_dcn_patch.yaml
131+
----
132+
133+
. Configure the {block_storage} backup service. In this example DCN deployment the backup service runs at the central site and uses the central {Ceph} cluster. Add the `cinderBackups` section to your patch file and re-apply it:
134+
+
135+
[subs="+quotes"]
136+
----
137+
$ cat << EOF >> cinder_dcn_patch.yaml
138+
cinderBackups:
139+
central:
140+
networkAttachments:
141+
- storage
142+
replicas: 1
143+
customServiceConfig: |
144+
[DEFAULT]
145+
backup_driver=cinder.backup.drivers.ceph.CephBackupDriver
146+
backup_ceph_conf=/etc/ceph/central.conf
147+
backup_ceph_user=openstack
148+
backup_ceph_pool=backups
149+
storage_availability_zone=az-central
150+
EOF
151+
$ oc patch openstackcontrolplane openstack --type=merge --patch-file cinder_dcn_patch.yaml
152+
----
153+
+
154+
[NOTE]
155+
====
156+
Unlike a single-site {Ceph} deployment where the backup config references `/etc/ceph/ceph.conf`, in a DCN deployment the {Ceph} configuration files in the `ceph-conf-files` secret are named by cluster. Set `backup_ceph_conf` to the path of the {Ceph} configuration file for whichever cluster hosts your `backups` pool. In this example the file is named `central.conf`, so the path is `/etc/ceph/central.conf`. Using a path that does not match a file in the secret will cause the backup service to fail with a `conf_read_file` error.
157+
158+
Set `storage_availability_zone` to match the availability zone of the volumes you want to back up. The backup scheduler uses this to route backup requests to a service in the correct zone. If the backup service zone does not match the volume zone, backup creation fails with `Service not found for creating backup`.
159+
====
160+
161+
. Verify that the {block_storage} volume services are running for each availability zone:
162+
+
163+
----
164+
$ openstack volume service list --service cinder-volume
165+
166+
+------------------+---------------------+------------+---------+-------+----------------------------+
167+
| Binary | Host | Zone | Status | State | Updated At |
168+
+------------------+---------------------+------------+---------+-------+----------------------------+
169+
| cinder-volume | hostgroup@central | az-central | enabled | up | 2024-01-01T00:00:00.000000 |
170+
| cinder-volume | hostgroup@dcn1 | az-dcn1 | enabled | up | 2024-01-01T00:00:00.000000 |
171+
| cinder-volume | hostgroup@dcn2 | az-dcn2 | enabled | up | 2024-01-01T00:00:00.000000 |
172+
+------------------+---------------------+------------+---------+-------+----------------------------+
173+
----
174+
175+
. Verify that the {block_storage} backup service is running and in the correct availability zone:
176+
+
177+
----
178+
$ openstack volume service list --service cinder-backup
179+
180+
+---------------+-------------------------+------------+---------+-------+----------------------------+
181+
| Binary | Host | Zone | Status | State | Updated At |
182+
+---------------+-------------------------+------------+---------+-------+----------------------------+
183+
| cinder-backup | cinder-backup-central-0 | az-central | enabled | up | 2024-01-01T00:00:00.000000 |
184+
+---------------+-------------------------+------------+---------+-------+----------------------------+
185+
----
186+
187+
. Test the backup service by creating a volume, backing it up, and restoring the backup:
188+
+
189+
----
190+
$ openstack volume create --size 1 backup-test-vol
191+
192+
$ openstack volume backup create --name backup-test-backup backup-test-vol
193+
194+
$ openstack volume backup show backup-test-backup
195+
+-----------------------+--------------------------------------+
196+
| Field | Value |
197+
+-----------------------+--------------------------------------+
198+
| container | backups |
199+
| fail_reason | None |
200+
| name | backup-test-backup |
201+
| size | 1 |
202+
| status | available |
203+
+-----------------------+--------------------------------------+
204+
205+
$ openstack volume backup restore backup-test-backup backup-test-restore
206+
----
207+
+
208+
[NOTE]
209+
====
210+
Some versions of the {rhocp_long} client display a `cannot unpack non-iterable VolumeBackupsRestore object` error after the restore command. This is a display bug in the client so it does not necessarily mean that the restore operation failed. Verify by checking the restored volume status directly.
211+
====
212+
+
213+
----
214+
$ openstack volume show backup-test-restore -c status -c availability_zone -c os-vol-host-attr:host -f value
215+
available
216+
az-central
217+
hostgroup@central#central
218+
----

docs_user/modules/proc_adopting-compute-services-to-the-data-plane.adoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ EOF
264264
[NOTE]
265265
For {Ceph} environments with multi-cell configurations, you must name configuration maps and {rhos_prev_long} data plane services similar to the following examples: `nova-custom-ceph-cellX` and `nova-compute-extraconfig-cellX`.
266266

267+
+
268+
[NOTE]
269+
====
270+
For Distributed Compute Node (DCN) deployments where {Ceph}, {image_service}, and {block_storage} services run on edge compute nodes, do not use the single `nova-cells-global-config` ConfigMap shown above. Instead, create a per-site `ConfigMap` and per-site `OpenStackDataPlaneService` for each site in your DCN deployment. Each site's {compute_service} nodes require a different {Ceph} configuration and a different {image_service} endpoint. For more information, see xref:adopting-compute-services-with-dcn-backend_{context}[Adopting Compute services with multiple Ceph back ends (DCN)].
271+
====
272+
267273
. Create the data plane services for {compute_service} cells to enable pre-upgrade workarounds, and to configure the Compute services for your chosen storage back end:
268274
+
269275
[subs="+quotes"]

0 commit comments

Comments
 (0)