Skip to content

Commit a6c5ee7

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 b8cd3db commit a6c5ee7

50 files changed

Lines changed: 3526 additions & 11 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
@@ -32,6 +32,8 @@ include::../modules/proc_adopting-the-compute-service.adoc[leveloffset=+1]
3232

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

35+
include::../modules/proc_adopting-block-storage-service-with-dcn-backend.adoc[leveloffset=+1]
36+
3537
include::../modules/proc_adopting-the-openstack-dashboard.adoc[leveloffset=+1]
3638

3739
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
@@ -24,6 +24,8 @@ include::../modules/proc_stopping-infrastructure-management-and-compute-services
2424

2525
include::../modules/proc_adopting-compute-services-to-the-data-plane.adoc[leveloffset=+1]
2626

27+
include::../modules/proc_adopting-compute-services-with-dcn-backend.adoc[leveloffset=+1]
28+
2729
include::../modules/proc_performing-a-fast-forward-upgrade-on-compute-services.adoc[leveloffset=+1]
2830

2931
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: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
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 `ceph-conf-files` secret contains the configuration and keyrings for all {Ceph} clusters in your DCN deployment. 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-files -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 `cinderBackup` section to your patch file and re-apply it:
134+
+
135+
[subs="+quotes"]
136+
----
137+
$ cat << EOF >> cinder_dcn_patch.yaml
138+
cinderBackup:
139+
networkAttachments:
140+
- storage
141+
replicas: 1
142+
customServiceConfig: |
143+
[DEFAULT]
144+
backup_driver=cinder.backup.drivers.ceph.CephBackupDriver
145+
backup_ceph_conf=/etc/ceph/central.conf
146+
backup_ceph_user=openstack
147+
backup_ceph_pool=backups
148+
storage_availability_zone=az-central
149+
EOF
150+
$ oc patch openstackcontrolplane openstack --type=merge --patch-file cinder_dcn_patch.yaml
151+
----
152+
+
153+
[NOTE]
154+
====
155+
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.
156+
157+
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`.
158+
====
159+
160+
. Verify that the {block_storage} volume services are running for each availability zone:
161+
+
162+
----
163+
$ openstack volume service list --service cinder-volume
164+
165+
+------------------+---------------------+------------+---------+-------+----------------------------+
166+
| Binary | Host | Zone | Status | State | Updated At |
167+
+------------------+---------------------+------------+---------+-------+----------------------------+
168+
| cinder-volume | hostgroup@central | az-central | enabled | up | 2024-01-01T00:00:00.000000 |
169+
| cinder-volume | hostgroup@dcn1 | az-dcn1 | enabled | up | 2024-01-01T00:00:00.000000 |
170+
| cinder-volume | hostgroup@dcn2 | az-dcn2 | enabled | up | 2024-01-01T00:00:00.000000 |
171+
+------------------+---------------------+------------+---------+-------+----------------------------+
172+
----
173+
174+
. Verify that the {block_storage} backup service is running and in the correct availability zone:
175+
+
176+
----
177+
$ openstack volume service list --service cinder-backup
178+
179+
+---------------+-----------------+------------+---------+-------+----------------------------+
180+
| Binary | Host | Zone | Status | State | Updated At |
181+
+---------------+-----------------+------------+---------+-------+----------------------------+
182+
| cinder-backup | cinder-backup-0 | az-central | enabled | up | 2024-01-01T00:00:00.000000 |
183+
+---------------+-----------------+------------+---------+-------+----------------------------+
184+
----
185+
186+
. Test the backup service by creating a volume, backing it up, and restoring the backup:
187+
+
188+
----
189+
$ openstack volume create --size 1 backup-test-vol
190+
191+
$ openstack volume backup create --name backup-test-backup backup-test-vol
192+
193+
$ openstack volume backup show backup-test-backup
194+
+-----------------------+--------------------------------------+
195+
| Field | Value |
196+
+-----------------------+--------------------------------------+
197+
| container | backups |
198+
| fail_reason | None |
199+
| name | backup-test-backup |
200+
| size | 1 |
201+
| status | available |
202+
+-----------------------+--------------------------------------+
203+
204+
$ openstack volume backup restore backup-test-backup backup-test-restore
205+
----
206+
+
207+
[NOTE]
208+
====
209+
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.
210+
====
211+
+
212+
----
213+
$ openstack volume show backup-test-restore -c status -c availability_zone -c os-vol-host-attr:host -f value
214+
available
215+
az-central
216+
hostgroup@central#central
217+
----

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)