From 803e981281d07c26a0d57deb93e263bf304c7c3a Mon Sep 17 00:00:00 2001 From: James Slagle Date: Mon, 8 Dec 2025 17:54:47 -0500 Subject: [PATCH] Add comprehensive dataplane scaling and performance documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds comprehensive documentation for scaling and performance tuning of dataplane deployments: - New: dataplane_performance_tuning_large_scale.adoc - Comprehensive guide covering NodeSet grouping strategies, parallel execution patterns, Ansible performance tuning, ansible-limit usage, scaling strategy comparisons, best practices, and troubleshooting. - Renamed: scaling.adoc -> dataplane_scaling_out.adoc - Existing scaling out/in procedures now in more descriptively named file. - Updated: dataplane.adoc - Added includes for both new performance tuning guide and renamed scaling operations guide. Key topics covered: - Single vs. multiple NodeSet strategies with performance comparisons - Ansible environment variables for tuning (ANSIBLE_FORKS, pipelining, etc.) - Using ansible-limit for gradual rollouts and targeted deployments - Detailed 100-node deployment comparison showing 2x speedup with multiple NodeSets - Best practices for monitoring, optimization, and troubleshooting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Jira: OSPRH-18952 Signed-off-by: James Slagle --- docs/assemblies/creating-the-data-plane.adoc | 2 +- docs/assemblies/ctlplane_resources.adoc | 1219 ++++++++++++++--- ...aplane_performance_tuning_large_scale.adoc | 725 ++++++++++ docs/assemblies/dataplane_resources.adoc | 2 +- ...caling.adoc => dataplane_scaling_out.adoc} | 2 +- docs/dataplane.adoc | 4 + 6 files changed, 1777 insertions(+), 177 deletions(-) create mode 100644 docs/assemblies/dataplane_performance_tuning_large_scale.adoc rename docs/assemblies/{scaling.adoc => dataplane_scaling_out.adoc} (99%) diff --git a/docs/assemblies/creating-the-data-plane.adoc b/docs/assemblies/creating-the-data-plane.adoc index 5a2402758..7ec24961a 100644 --- a/docs/assemblies/creating-the-data-plane.adoc +++ b/docs/assemblies/creating-the-data-plane.adoc @@ -51,7 +51,7 @@ include::proc_troubleshooting-data-plane-creation-and-deployment.adoc[leveloffse include::tls.adoc[leveloffset=+1] -include::scaling.adoc[leveloffset=+1] +include::dataplane_scaling_out.adoc[leveloffset=+1] include::ansible.adoc[leveloffset=+1] diff --git a/docs/assemblies/ctlplane_resources.adoc b/docs/assemblies/ctlplane_resources.adoc index 9be298ddc..12c2ca04d 100644 --- a/docs/assemblies/ctlplane_resources.adoc +++ b/docs/assemblies/ctlplane_resources.adoc @@ -477,7 +477,6 @@ * <> * <> * <> -* <> * <> * <> * <> @@ -492,6 +491,30 @@ * <> * <> * <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> +* <> * <> * <> * <> @@ -503,10 +526,13 @@ * <> * <> * <> +* <> * <> * <> * <> * <> +* <> +* <> * <> * <> * <> @@ -583,6 +609,7 @@ * <> * <> * <> +* <> * <> * <> * <> @@ -1799,6 +1826,11 @@ TelemetrySection defines the desired state of OpenStack Telemetry services | <> | false +| cloudKittyApiOverride +| CloudKittyAPIOverride, provides the ability to override the generated manifest of several child resources. +| <> +| false + | prometheusOverride | PrometheusOverride, provides the ability to override the generated manifest of several child resources. | <> @@ -1993,6 +2025,16 @@ ContainerTemplate - struct that contains container image URLs for each service i | *string | false +| cloudkittyAPIImage +| +| *string +| false + +| cloudkittyProcImage +| +| *string +| false + | designateAPIImage | | *string @@ -2385,7 +2427,7 @@ CustomContainerImages - struct for custom container images [#openstackversion] ==== OpenStackVersion -OpenStackVersion is the Schema for the openstackversionupdates API +OpenStackVersion defines the Schema for the openstackversionupdates API |=== | Field | Description | Scheme | Required @@ -2921,7 +2963,7 @@ BarbicanSpecBase - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -3174,7 +3216,7 @@ BarbicanComponentTemplate - Variables used by every sub-component of Barbican (e | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -3989,7 +4031,7 @@ CinderSpec defines the desired state of Cinder | true | customServiceConfig -| CustomServiceConfig - customize the service config for all Cinder services using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config for all Cinder services using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -4329,7 +4371,7 @@ CinderServiceTemplate defines the input parameters that can be defined for a giv | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -4433,7 +4475,7 @@ DesignateServiceTemplate defines the input parameters that can be defined for a | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -5465,7 +5507,7 @@ DesignateSpecBase - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -5955,7 +5997,7 @@ GlanceAPITemplate defines the desired state of GlanceAPI | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -6392,7 +6434,7 @@ GlanceSpecCore defines the desired state of Glance | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -6613,7 +6655,7 @@ HeatServiceTemplate - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/heat/heat.conf.d directory as 02-custom-service.conf file. +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/heat/heat.conf.d directory as 02-custom-service.conf file. | string | false @@ -7231,7 +7273,7 @@ HeatSpec defines the desired state of Heat | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/heat/heat.conf.d directory as 01-custom.conf file. +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/heat/heat.conf.d directory as 01-custom.conf file. | string | false @@ -7494,7 +7536,7 @@ HorizonSpecCore - | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/openstack-dashboard/local_settings.d directory as 9999_custom_settings.py file. +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/openstack-dashboard/local_settings.d directory as 9999_custom_settings.py file. | string | true @@ -7596,7 +7638,7 @@ IronicServiceTemplate defines the common input parameters for Ironic services | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -8301,7 +8343,7 @@ IronicInspectorTemplate defines the input parameters for Ironic Inspector servic | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -8697,7 +8739,7 @@ IronicSpec defines the desired state of Ironic | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -8912,6 +8954,8 @@ KeystoneAPIList contains a list of KeystoneAPI [#keystoneapispec] ==== KeystoneAPISpec +KeystoneAPISpec defines the desired state of KeystoneAPI + |=== | Field | Description | Scheme | Required @@ -8926,7 +8970,7 @@ KeystoneAPIList contains a list of KeystoneAPI [#keystoneapispeccore] ==== KeystoneAPISpecCore -KeystoneAPISpec defines the desired state of KeystoneAPI +KeystoneAPISpecCore defines the desired state of KeystoneAPI core spec |=== | Field | Description | Scheme | Required @@ -9017,7 +9061,7 @@ KeystoneAPISpec defines the desired state of KeystoneAPI | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -9143,7 +9187,7 @@ KeystoneAPIStatus defines the observed state of KeystoneAPI [#keystoneextramounts] ==== KeystoneExtraMounts -KeystoneExtraVolMounts exposes additional parameters processed by keystone-operator and defines the common VolMounts structure provided by the main storage module +KeystoneExtraMounts exposes additional parameters processed by keystone-operator and defines the common VolMounts structure provided by the main storage module |=== | Field | Description | Scheme | Required @@ -9440,9 +9484,9 @@ ManilaServiceTemplate defines the input parameters that can be defined for a giv | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory a custom config file.++++++++++++ | string -| false +| true | customServiceConfigSecrets | CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets that contain sensitive service config data. The content of each Secret gets added to the /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ @@ -9493,7 +9537,7 @@ ManilaTemplate defines common input parameters used by all Manila services | passwordSelectors | PasswordSelectors - Selectors to identify the ServiceUser password from the Secret | <> -| false +| true |=== <> @@ -9509,7 +9553,7 @@ PasswordSelector to identify the DB and AdminUser password from the Secret | service | Service - Selector to get the manila service password from the Secret | string -| false +| true |=== <> @@ -10091,7 +10135,7 @@ ManilaDebug contains flags related to multiple debug activities. See the individ | dbPurge | DBPurge increases log verbosity by executing the db_purge command with "--debug". | bool -| false +| true |=== <> @@ -10200,12 +10244,12 @@ ManilaSpecBase - | preserveJobs | PreserveJobs - do not delete jobs after they finished e.g. to check logs | bool -| false +| true | customServiceConfig -| CustomServiceConfig - customize the service config for all Manila services using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config for all Manila services using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory a custom config file.++++++++++++ | string -| false +| true | extraMounts | ExtraMounts containing conf files and credentials @@ -10220,7 +10264,7 @@ ManilaSpecBase - | dbPurge | DBPurge parameters - | <> -| false +| true | apiTimeout | APITimeout for HAProxy, Apache, and rpc_response_timeout @@ -10750,6 +10794,11 @@ MariaDBAccountSpec defines the desired state of MariaDBAccount | Account must use TLS to connect to the database | bool | true + +| accountType +| +| AccountType +| false |=== <> @@ -10762,6 +10811,11 @@ MariaDBAccountStatus defines the observed state of MariaDBAccount |=== | Field | Description | Scheme | Required +| currentSecret +| the Secret that's currently in use for the account. keeping a handle to this secret allows us to remove its finalizer when it's replaced with a new one. It also is useful for storing the current "root" secret separate from a newly proposed one which is needed when changing the database root password. +| string +| false + | conditions | Deployment Conditions | condition.Conditions @@ -11037,7 +11091,7 @@ NeutronAPISpecCore - | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -11204,6 +11258,8 @@ PasswordSelector to identify the DB and AdminUser password from the Secret [#novacellimages] ==== NovaCellImages +NovaCellImages defines container images used by NovaCell services + |=== | Field | Description | Scheme | Required @@ -11233,6 +11289,8 @@ PasswordSelector to identify the DB and AdminUser password from the Secret [#novaimages] ==== NovaImages +NovaImages defines container images used by top level Nova CR + |=== | Field | Description | Scheme | Required @@ -11273,7 +11331,7 @@ NovaServiceBase contains the fields that are needed for each nova service CRD | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -11530,7 +11588,7 @@ NovaAPITemplate defines the input parameters specified by the user to create a N | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -12057,7 +12115,7 @@ NovaComputeTemplate defines the input parameters specified by the user to create | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -12267,7 +12325,7 @@ NovaConductorTemplate defines the input parameters specified by the user to crea | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -12503,7 +12561,7 @@ NovaMetadataTemplate defines the input parameters specified by the user to creat | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -12713,7 +12771,7 @@ NovaNoVNCProxyTemplate defines the input parameters specified by the user to cre | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -12955,7 +13013,7 @@ NovaSchedulerTemplate defines the input parameters specified by the user to crea | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -13288,7 +13346,7 @@ OctaviaAmphoraControllerSpecCore - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -13564,7 +13622,7 @@ OctaviaAPISpecCore - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -14104,7 +14162,7 @@ OctaviaSpecBase - | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -14748,22 +14806,27 @@ OpenStackBaremetalSetStatus defines the observed state of OpenStackBaremetalSet | Field | Description | Scheme | Required | osImage -| OSImage - OS qcow2 image Name +| OSImage - OS qcow2 image Name. Ignored when osImageDeploymentType is PassThrough. | string | true | osContainerImageUrl -| OSContainerImageURL - Container image URL for init with the OS qcow2 image (osImage) +| OSContainerImageURL - When osImageDeploymentType is SelfExtracting, container image URL for init with the OS qcow2 image (osImage). When osImageDeploymentType is PassThrough this can be any image URL which the underlying Metal3 instance supports. | string | false +| osImageDeploymentType +| OSImageDeploymentType - Whether the OS image deployment is self-extracting or pass-through based +| OSImageDeploymentType +| true + | apacheImageUrl -| ApacheImageURL - Container image URL for the main container that serves the downloaded OS qcow2 image (osImage) +| ApacheImageURL - Container image URL for the main container that serves the downloaded OS qcow2 image (osImage). Ignored when osImageDeploymentType is PassThrough. | string | false | agentImageUrl -| AgentImageURL - Container image URL for the sidecar container that discovers provisioning network IPs +| AgentImageURL - Container image URL for the sidecar container that discovers provisioning network IPs. Ignored when osImageDeploymentType is PassThrough. | string | false @@ -14773,17 +14836,17 @@ OpenStackBaremetalSetStatus defines the observed state of OpenStackBaremetalSet | true | provisionServerName -| ProvisionServerName - Optional. Existing OpenStackProvisionServer to use, else one would be created. +| ProvisionServerName - Optional. Existing OpenStackProvisionServer to use, else one would be created. Ignored when osImageDeploymentType is PassThrough. | string | false | provisionServerNodeSelector -| ProvisonServerNodeSelector to target subset of worker nodes running provision server +| ProvisonServerNodeSelector to target subset of worker nodes running provision server, ignored when osImageDeploymentType is PassThrough. | map[string]string | false | provisioningInterface -| ProvisioningInterface - Optional. If not provided along with ProvisionServerName, it would be discovered from CBO. This is the provisioning interface on the OCP masters/workers. +| ProvisioningInterface - Optional. If not provided along with ProvisionServerName, it would be discovered from CBO. This is the provisioning interface on the OCP masters/workers. Ignored when osImageDeploymentType is PassThrough. | string | false @@ -15167,6 +15230,16 @@ OVNControllerSpecCore - | string | true +| ovnLogLevel +| OVNLogLevel - Set log level off, emer, err, warn, info, or dbg. Default is info. +| string +| false + +| ovsLogLevel +| OVSLogLevel - Set log level off, emer, err, warn, info, or dbg. Default is info. +| string +| false + | tls | TLS - Parameters related to TLS | tls.SimpleService @@ -15822,7 +15895,7 @@ PlacementAPISpecCore - | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | true @@ -16647,22 +16720,6 @@ SwiftStatus defines the observed state of Swift <> -[#apioverridespec-2] -==== APIOverrideSpec - -APIOverrideSpec to override the generated manifest of several child resources. - -|=== -| Field | Description | Scheme | Required - -| service -| Override configuration for the Service created to serve traffic to the cluster. The key must be the endpoint type (public, internal) -| map[service.Endpoint]service.RoutedOverrideSpec -| false -|=== - -<> - [#aodh] ==== Aodh @@ -16738,7 +16795,7 @@ Aodh defines the aodh component spec | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -17103,7 +17160,7 @@ CeilometerSpecCore defines the desired state of Ceilometer. This version is used | true | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as custom.conf file.++++++++++++ | string | false @@ -17262,10 +17319,10 @@ KSMStatus defines the observed state of kube-state-metrics [DEPRECATED, Status i <> -[#logging] -==== Logging +[#cloudkittyapi] +==== CloudKittyAPI -Logging is the Schema for the loggings API +CloudKittyAPI is the Schema for the cloudkittyapis API |=== | Field | Description | Scheme | Required @@ -17277,21 +17334,21 @@ Logging is the Schema for the loggings API | spec | -| <> +| <> | false | status | -| <> +| <> | false |=== <> -[#logginglist] -==== LoggingList +[#cloudkittyapilist] +==== CloudKittyAPIList -LoggingList contains a list of Logging +CloudKittyAPIList contains a list of CloudKittyAPI |=== | Field | Description | Scheme | Required @@ -17303,62 +17360,42 @@ LoggingList contains a list of Logging | items | -| []<> +| []<> | true |=== <> -[#loggingspec] -==== LoggingSpec +[#cloudkittyapispec] +==== CloudKittyAPISpec -LoggingSpec defines the desired state of Logging +CloudKittyAPISpec defines the desired state of CloudKittyAPI |=== | Field | Description | Scheme | Required -| port -| Port is the port where the service will listen on -| int32 -| true - -| targetPort -| TargetPort is the port where the logging syslog receiver is listening -| int -| true - -| cloNamespace -| CLONamespace points to the namespace where the cluster-logging-operator is deployed +| databaseHostname +| DatabaseHostname - CloudKitty Database Hostname | string | true -| annotations -| Annotations is a way to configure certain LoadBalancers, like MetalLB -| map[string]string -| true - -| rsyslogRetries -| The number of retries rsyslog will attempt before abandoning -| int32 -| true - -| rsyslogQueueType -| The type of the local queue of logs +| transportURLSecret +| Secret containing RabbitMq transport URL | string | true -| rsyslogQueueSize -| The size of the local queue of logs -| int32 +| serviceAccount +| ServiceAccount - service account name used internally to provide CloudKitty services the default SA name +| string | true |=== <> -[#loggingstatus] -==== LoggingStatus +[#cloudkittyapistatus] +==== CloudKittyAPIStatus -LoggingStatus defines the observed state of Logging +CloudKittyAPIStatus defines the observed state of CloudKittyAPI |=== | Field | Description | Scheme | Required @@ -17368,23 +17405,90 @@ LoggingStatus defines the observed state of Logging | map[string]string | false +| apiEndpoints +| API endpoints +| map[string]map[string]string +| false + | conditions | Conditions | condition.Conditions | false +| readyCount +| ReadyCount of CloudKitty API instances +| int32 +| true + +| serviceIDs +| ServiceIDs +| map[string]string +| false + +| networkAttachments +| NetworkAttachments status of the deployment pods +| map[string][]string +| false + | observedGeneration -| ObservedGeneration - the most recent generation observed for this service. If the observed generation is less than the spec generation, then the controller has not processed the latest changes injected by the openstack-operator in the top-level CR (e.g. the ContainerImage) +| ObservedGeneration - the most recent generation observed for this service. If the observed generation is different than the spec generation, then the controller has not started processing the latest changes, and the status and its conditions are likely stale. | int64 | false + +| lastAppliedTopology +| LastAppliedTopology - the last applied Topology +| *topologyv1.TopoRef +| false |=== <> -[#metricstorage] -==== MetricStorage +[#cloudkittyapitemplate] +==== CloudKittyAPITemplate -MetricStorage is the Schema for the metricstorages API +CloudKittyAPITemplate defines the input parameters for the CloudKitty API service + +|=== +| Field | Description | Scheme | Required + +| containerImage +| ContainerImage - CloudKitty Container Image URL (will be set to environmental default if empty) +| string +| true +|=== + +<> + +[#cloudkittyapitemplatecore] +==== CloudKittyAPITemplateCore + +CloudKittyAPITemplateCore defines the input parameters for the CloudKitty API service + +|=== +| Field | Description | Scheme | Required + +| replicas +| Replicas - CloudKitty API Replicas +| *int32 +| true + +| override +| Override, provides the ability to override the generated manifest of several child resources. +| <> +| false + +| tls +| TLS - Parameters related to the TLS +| tls.API +| false +|=== + +<> + +[#cloudkittyproc] +==== CloudKittyProc + +CloudKittyProc is the Schema for the cloudkittprocs API |=== | Field | Description | Scheme | Required @@ -17396,21 +17500,21 @@ MetricStorage is the Schema for the metricstorages API | spec | -| <> +| <> | false | status | -| <> +| <> | false |=== <> -[#metricstoragelist] -==== MetricStorageList +[#cloudkittyproclist] +==== CloudKittyProcList -MetricStorageList contains a list of MetricStorage +CloudKittyProcList contains a list of CloudKittyProc |=== | Field | Description | Scheme | Required @@ -17422,99 +17526,771 @@ MetricStorageList contains a list of MetricStorage | items | -| []<> +| []<> | true |=== <> -[#metricstoragespec] -==== MetricStorageSpec +[#cloudkittyprocspec] +==== CloudKittyProcSpec -MetricStorageSpec defines the desired state of MetricStorage +CloudKittyProcSpec defines the desired state of CloudKitty Processor |=== | Field | Description | Scheme | Required -| dashboardsEnabled -| DashboardsEnabled allows to enable or disable dashboards and related artifacts -| bool +| databaseHostname +| DatabaseHostname - CloudKitty Database Hostname +| string | true -| dataplaneNetwork -| DataplaneNetwork defines the network that will be used to scrape dataplane node_exporter endpoints -| *infranetworkv1.NetNameStr +| transportURLSecret +| Secret containing RabbitMq transport URL +| string | true -| networkAttachments -| NetworkAttachments is a list of NetworkAttachment resource names to expose the services to the given network -| []string -| false - -| monitoringStack -| MonitoringStack allows to define a metric storage with options supported by Red Hat -| *<> -| false - -| customMonitoringStack -| CustomMonitoringStack allows to deploy a custom monitoring stack when the options in "MonitoringStack" aren't enough -| *obov1.MonitoringStackSpec -| false - -| prometheusTls -| TLS - Parameters related to the TLS -| tls.SimpleService -| false +| serviceAccount +| ServiceAccount - service account name used internally to provide CloudKitty services the default SA name +| string +| true |=== <> -[#metricstoragestatus] -==== MetricStorageStatus +[#cloudkittyprocstatus] +==== CloudKittyProcStatus -MetricStorageStatus defines the observed state of MetricStorage +CloudKittyProcStatus defines the observed state of CloudKitty Processor |=== | Field | Description | Scheme | Required +| hash +| Map of hashes to track e.g. job status +| map[string]string +| false + | conditions -| +| Conditions | condition.Conditions | false -| prometheusTLSPatched -| -| bool +| readyCount +| ReadyCount of CloudKitty Processor instances +| int32 +| true + +| networkAttachments +| NetworkAttachments status of the deployment pods +| map[string][]string | false | observedGeneration -| ObservedGeneration - the most recent generation observed for this service. If the observed generation is less than the spec generation, then the controller has not processed the latest changes injected by the openstack-operator in the top-level CR (e.g. the ContainerImage) +| ObservedGeneration - the most recent generation observed for this service. If the observed generation is different than the spec generation, then the controller has not started processing the latest changes, and the status and its conditions are likely stale. | int64 | false -| networkAttachments -| NetworkAttachments status of the Prometheus pods -| map[string]string +| lastAppliedTopology +| LastAppliedTopology - the last applied Topology +| *topologyv1.TopoRef | false |=== <> -[#monitoringstack] -==== MonitoringStack +[#cloudkittyproctemplate] +==== CloudKittyProcTemplate -MonitoringStack defines the options for a Red Hat supported metric storage +CloudKittyProcTemplate defines the input parameters for the CloudKitty Processor service |=== | Field | Description | Scheme | Required -| alertingEnabled -| AlertingEnabled allows to enable or disable alertmanager -| bool -| true - -| scrapeInterval -| ScrapeInterval sets the interval between scrapes +| containerImage +| ContainerImage - CloudKitty Container Image URL (will be set to environmental default if empty) +| string +| true +|=== + +<> + +[#cloudkittyproctemplatecore] +==== CloudKittyProcTemplateCore + +CloudKittyProcTemplateCore defines the input parameters for the CloudKitty Processor service + +|=== +| Field | Description | Scheme | Required + +| replicas +| Replicas - CloudKitty API Replicas +| *int32 +| true + +| tls +| TLS - Parameters related to the TLS +| tls.SimpleService +| false +|=== + +<> + +[#caspec] +==== CASpec + +|=== +| Field | Description | Scheme | Required + +| caKey +| Key is the data key of a ConfigMap containing a CA certificate. It needs to be in the same namespace as the CloudKitty custom resource. If empty, it defaults to "service-ca.crt". +| string +| false + +| caName +| CA is the name of a ConfigMap containing a CA certificate. It needs to be in the same namespace as the CloudKitty custom resource. +| string +| false +|=== + +<> + +[#cloudkitty] +==== CloudKitty + +CloudKitty is the Schema for the cloudkitties API + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ObjectMeta +| false + +| spec +| +| <> +| false + +| status +| +| <> +| false +|=== + +<> + +[#cloudkittylist] +==== CloudKittyList + +CloudKittyList contains a list of CloudKitty + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ListMeta +| false + +| items +| +| []<> +| true +|=== + +<> + +[#cloudkittyservicetemplate] +==== CloudKittyServiceTemplate + +CloudKittyServiceTemplate defines the input parameters that can be defined for a given CloudKitty service + +|=== +| Field | Description | Scheme | Required + +| nodeSelector +| NodeSelector to target subset of worker nodes running this service. Setting here overrides any global NodeSelector settings within the CloudKitty CR. +| *map[string]string +| false + +| customServiceConfig +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| string +| false + +| customServiceConfigSecrets +| CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets that contain sensitive service config data. The content of each Secret gets added to the /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| []string +| false + +| resources +| Resources - Compute Resources required by this service (Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ +| corev1.ResourceRequirements +| false + +| networkAttachments +| NetworkAttachments is a list of NetworkAttachment resource names to expose the services to the given network +| []string +| false + +| topologyRef +| TopologyRef to apply the Topology defined by the associated CR referenced by name +| *topologyv1.TopoRef +| false +|=== + +<> + +[#cloudkittyspec] +==== CloudKittySpec + +CloudKittySpec defines the desired state of CloudKitty + +|=== +| Field | Description | Scheme | Required + +| cloudKittyAPI +| CloudKittyAPI - Spec definition for the API service of this CloudKitty deployment +| <> +| true + +| cloudKittyProc +| CloudKittyProc - Spec definition for the Scheduler service of this CloudKitty deployment +| <> +| true +|=== + +<> + +[#cloudkittyspecbase] +==== CloudKittySpecBase + +|=== +| Field | Description | Scheme | Required + +| databaseInstance +| MariaDB instance name Right now required by the maridb-operator to get the credentials from the instance to create the DB Might not be required in future +| string +| true + +| rabbitMqClusterName +| RabbitMQ instance name Needed to request a transportURL that is created and used in CloudKitty +| string +| true + +| memcachedInstance +| Memcached instance name. +| string +| true + +| preserveJobs +| PreserveJobs - do not delete jobs after they finished e.g. to check logs +| bool +| true + +| customServiceConfig +| CustomServiceConfig - customize the service config for all CloudKitty services using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| string +| false + +| nodeSelector +| NodeSelector to target subset of worker nodes running this service. Setting NodeSelector here acts as a default value and can be overridden by service specific NodeSelector Settings. +| *map[string]string +| false + +| apiTimeout +| APITimeout for HAProxy, Apache, and rpc_response_timeout +| int +| true + +| topologyRef +| TopologyRef to apply the Topology defined by the associated CR referenced by name +| *topologyv1.TopoRef +| false + +| prometheusHost +| Host of user deployed prometheus +| string +| false + +| prometheusPort +| Port of user deployed prometheus +| int32 +| false + +| prometheusTLSCaCertSecret +| If defined, specifies which CA certificate to use for user deployed prometheus +| *corev1.SecretKeySelector +| false + +| period +| Period for collecting metrics in seconds +| int32 +| true + +| s3StorageConfig +| S3 related configuration passed to Loki +| <> +| true + +| storageClass +| Storage class used for Loki +| string +| false + +| lokiStackSize +| Size of the LokiStack. Supported are "1x.demo" (default), "1x.pico", "1x.extra-small", "1x.small", "1x.medium" +| string +| true +|=== + +<> + +[#cloudkittyspeccore] +==== CloudKittySpecCore + +CloudKittySpecCore the same as CloudKittySpec without ContainerImage references + +|=== +| Field | Description | Scheme | Required + +| cloudKittyAPI +| CloudKittyAPI - Spec definition for the API service of this CloudKitty deployment +| <> +| true + +| cloudKittyProc +| CloudKittyProc - Spec definition for the Scheduler service of this CloudKitty deployment +| <> +| true +|=== + +<> + +[#cloudkittystatus] +==== CloudKittyStatus + +CloudKittyStatus defines the observed state of CloudKitty + +|=== +| Field | Description | Scheme | Required + +| hash +| Map of hashes to track e.g. job status +| map[string]string +| false + +| conditions +| Conditions +| condition.Conditions +| false + +| databaseHostname +| CloudKitty Database Hostname +| string +| false + +| transportURLSecret +| TransportURLSecret - Secret containing RabbitMQ transportURL +| string +| false + +| apiEndpoints +| API endpoints +| map[string]map[string]string +| false + +| serviceIDs +| ServiceIDs +| map[string]string +| false + +| cloudKittyAPIReadyCount +| ReadyCount of CloudKitty API instance +| int32 +| true + +| cloudKittyProcReadyCounts +| ReadyCount of CloudKitty Processor instances +| int32 +| true + +| observedGeneration +| ObservedGeneration - the most recent generation observed for this service. If the observed generation is different than the spec generation, then the controller has not started processing the latest changes, and the status and its conditions are likely stale. +| int64 +| false + +| prometheusHostname +| PrometheusHost - Hostname for prometheus used for autoscaling +| string +| false + +| prometheusPort +| PrometheusPort - Port for prometheus used for autoscaling +| int32 +| false + +| prometheusTLS +| PrometheusTLS - Determines if TLS should be used for accessing prometheus +| bool +| false +|=== + +<> + +[#cloudkittytemplate] +==== CloudKittyTemplate + +CloudKittyTemplate defines common input parameters used by all CloudKitty services + +|=== +| Field | Description | Scheme | Required + +| serviceUser +| ServiceUser - optional username used for this service to register in cloudkitty +| string +| true + +| databaseAccount +| DatabaseAccount - optional MariaDBAccount used for cloudkitty DB, defaults to cloudkitty +| string +| true + +| secret +| Secret containing OpenStack password information +| string +| true + +| passwordSelector +| PasswordsSelectors - Selectors to identify the ServiceUser password from the Secret +| <> +| true +|=== + +<> + +[#objectstorageschema] +==== ObjectStorageSchema + +|=== +| Field | Description | Scheme | Required + +| version +| Version for writing and reading logs. +| string +| true + +| effectiveDate +| EffectiveDate contains a date in YYYY-MM-DD format which is interpreted in the UTC time zone.\n\nThe configuration always needs at least one schema that is currently valid. This means that when creating a new CloudKitty it is recommended to add a schema with the latest available version and an effective date of "yesterday". New schema versions added to the configuration always needs to be placed "in the future", so that Loki can start using it once the day rolls over. +| string +| true +|=== + +<> + +[#objectstoragesecretspec] +==== ObjectStorageSecretSpec + +|=== +| Field | Description | Scheme | Required + +| type +| Type of object storage that should be used +| string +| true + +| name +| Name of a secret in the namespace configured for object storage secrets. +| string +| true + +| credentialMode +| CredentialMode can be used to set the desired credential mode for authenticating with the object storage. If this is not set, then the operator tries to infer the credential mode from the provided secret and its own configuration. +| string +| false +|=== + +<> + +[#objectstoragespec] +==== ObjectStorageSpec + +|=== +| Field | Description | Scheme | Required + +| schemas +| Schemas for reading and writing logs. +| []<> +| true + +| secret +| Secret for object storage authentication. Name of a secret in the same namespace as the CloudKitty custom resource. +| <> +| true + +| tls +| TLS configuration for reaching the object storage endpoint. +| *<> +| false +|=== + +<> + +[#logging] +==== Logging + +Logging is the Schema for the loggings API + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ObjectMeta +| false + +| spec +| +| <> +| false + +| status +| +| <> +| false +|=== + +<> + +[#logginglist] +==== LoggingList + +LoggingList contains a list of Logging + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ListMeta +| false + +| items +| +| []<> +| true +|=== + +<> + +[#loggingspec] +==== LoggingSpec + +LoggingSpec defines the desired state of Logging + +|=== +| Field | Description | Scheme | Required + +| port +| Port is the port where the service will listen on +| int32 +| true + +| targetPort +| TargetPort is the port where the logging syslog receiver is listening +| int +| true + +| cloNamespace +| CLONamespace points to the namespace where the cluster-logging-operator is deployed +| string +| true + +| annotations +| Annotations is a way to configure certain LoadBalancers, like MetalLB +| map[string]string +| true + +| rsyslogRetries +| The number of retries rsyslog will attempt before abandoning +| int32 +| true + +| rsyslogQueueType +| The type of the local queue of logs +| string +| true + +| rsyslogQueueSize +| The size of the local queue of logs +| int32 +| true +|=== + +<> + +[#loggingstatus] +==== LoggingStatus + +LoggingStatus defines the observed state of Logging + +|=== +| Field | Description | Scheme | Required + +| hash +| Map of hashes to track e.g. job status +| map[string]string +| false + +| conditions +| Conditions +| condition.Conditions +| false + +| observedGeneration +| ObservedGeneration - the most recent generation observed for this service. If the observed generation is less than the spec generation, then the controller has not processed the latest changes injected by the openstack-operator in the top-level CR (e.g. the ContainerImage) +| int64 +| false +|=== + +<> + +[#metricstorage] +==== MetricStorage + +MetricStorage is the Schema for the metricstorages API + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ObjectMeta +| false + +| spec +| +| <> +| false + +| status +| +| <> +| false +|=== + +<> + +[#metricstoragelist] +==== MetricStorageList + +MetricStorageList contains a list of MetricStorage + +|=== +| Field | Description | Scheme | Required + +| metadata +| +| metav1.ListMeta +| false + +| items +| +| []<> +| true +|=== + +<> + +[#metricstoragespec] +==== MetricStorageSpec + +MetricStorageSpec defines the desired state of MetricStorage + +|=== +| Field | Description | Scheme | Required + +| dashboardsEnabled +| DashboardsEnabled allows to enable or disable dashboards and related artifacts +| bool +| true + +| dataplaneNetwork +| DataplaneNetwork defines the network that will be used to scrape dataplane node_exporter endpoints +| *infranetworkv1.NetNameStr +| true + +| networkAttachments +| NetworkAttachments is a list of NetworkAttachment resource names to expose the services to the given network +| []string +| false + +| monitoringStack +| MonitoringStack allows to define a metric storage with options supported by Red Hat +| *<> +| false + +| customMonitoringStack +| CustomMonitoringStack allows to deploy a custom monitoring stack when the options in "MonitoringStack" aren't enough +| *obov1.MonitoringStackSpec +| false + +| prometheusTls +| TLS - Parameters related to the TLS +| tls.SimpleService +| false +|=== + +<> + +[#metricstoragestatus] +==== MetricStorageStatus + +MetricStorageStatus defines the observed state of MetricStorage + +|=== +| Field | Description | Scheme | Required + +| conditions +| +| condition.Conditions +| false + +| prometheusTLSPatched +| +| bool +| false + +| observedGeneration +| ObservedGeneration - the most recent generation observed for this service. If the observed generation is less than the spec generation, then the controller has not processed the latest changes injected by the openstack-operator in the top-level CR (e.g. the ContainerImage) +| int64 +| false + +| networkAttachments +| NetworkAttachments status of the Prometheus pods +| map[string]string +| false +|=== + +<> + +[#monitoringstack] +==== MonitoringStack + +MonitoringStack defines the options for a Red Hat supported metric storage + +|=== +| Field | Description | Scheme | Required + +| alertingEnabled +| AlertingEnabled allows to enable or disable alertmanager +| bool +| true + +| scrapeInterval +| ScrapeInterval sets the interval between scrapes | string | true @@ -17578,6 +18354,22 @@ Storage defines the options used for storage of metrics <> +[#apioverridespec-2] +==== APIOverrideSpec + +APIOverrideSpec to override the generated manifest of several child resources. + +|=== +| Field | Description | Scheme | Required + +| service +| Override configuration for the Service created to serve traffic to the cluster. The key must be the endpoint type (public, internal) +| map[service.Endpoint]service.RoutedOverrideSpec +| false +|=== + +<> + [#autoscalingsection] ==== AutoscalingSection @@ -17642,6 +18434,38 @@ CeilometerSectionCore defines the desired state of the ceilometer service <> +[#cloudkittysection] +==== CloudKittySection + +CloudKittySpec defines the desired state of the cloudkitty service + +|=== +| Field | Description | Scheme | Required + +| enabled +| Enabled - Whether OpenStack CloudKitty service should be deployed and managed +| *bool +| true +|=== + +<> + +[#cloudkittysectioncore] +==== CloudKittySectionCore + +CloudKittySpec defines the desired state of the cloudkitty service + +|=== +| Field | Description | Scheme | Required + +| enabled +| Enabled - Whether OpenStack CloudKitty service should be deployed and managed +| *bool +| true +|=== + +<> + [#loggingsection] ==== LoggingSection @@ -17691,6 +18515,11 @@ PasswordsSelector to identify the Service password from the Secret | AodhService - Selector to get the aodh service password from the Secret | string | true + +| cloudKittyService +| CloudKittyService - Selector to get the CloudKitty service password from the Secret +| string +| true |=== <> @@ -17759,6 +18588,11 @@ TelemetrySpec defines the desired state of Telemetry | Ceilometer - Parameters related to the ceilometer service | <> | false + +| cloudkitty +| CloudKitty - Parameters related to the cloudkitty service +| <> +| false |=== <> @@ -17811,6 +18645,11 @@ TelemetrySpecCore defines the desired state of Telemetry. This version has no im | Ceilometer - Parameters related to the ceilometer service | <> | false + +| cloudkitty +| CloudKitty - Parameters related to the cloudkitty service +| <> +| false |=== <> @@ -17896,7 +18735,7 @@ WatcherCommon defines a spec based reusable for all the CRDs | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -17916,6 +18755,8 @@ WatcherCommon defines a spec based reusable for all the CRDs [#watcherimages] ==== WatcherImages +WatcherImages defines the container images for all Watcher services + |=== | Field | Description | Scheme | Required @@ -18001,7 +18842,7 @@ WatcherSpecCore defines the fields used from the OpenStackControlPlane CR (does [#watchersubcrscommon] ==== WatcherSubCrsCommon -WatcherSubCrsCommon +WatcherSubCrsCommon defines the common fields for Watcher sub-CRs |=== | Field | Description | Scheme | Required @@ -18043,7 +18884,7 @@ WatcherSubCrsTemplate define de common part of the input parameters specified by | false | customServiceConfig -| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ +| CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to to /etc/++++++/++++++.conf.d directory as a custom config file.++++++++++++ | string | false @@ -18328,7 +19169,7 @@ WatcherApplierStatus defines the observed state of WatcherApplier [#watcherappliertemplate] ==== WatcherApplierTemplate -WatcherApplierTemplatce defines the input parameters specified by the user to create a WatcherApplier via higher level CRDs. +WatcherApplierTemplate defines the input parameters specified by the user to create a WatcherApplier via higher level CRDs. |=== | Field | Description | Scheme | Required @@ -18495,6 +19336,8 @@ Watcher is the Schema for the watchers API [#watcherdbpurge] ==== WatcherDBPurge +WatcherDBPurge defines the parameters for the Watcher database purging cron job + |=== | Field | Description | Scheme | Required @@ -18581,6 +19424,8 @@ WatcherStatus defines the observed state of Watcher [#mtlssection] ==== MTLSSection +MTLSSection contains mutual TLS configuration + |=== | Field | Description | Scheme | Required @@ -18765,7 +19610,7 @@ MemcachedStatus defines the observed state of Memcached [#tlssection-2] ==== TLSSection -TLSSection +TLSSection contains TLS and MTLS configuration |=== | Field | Description | Scheme | Required @@ -19657,6 +20502,22 @@ ReservationSpec defines the desired state of Reservation <> +[#podoverride] +==== PodOverride + +PodOverride defines per-pod service configurations + +|=== +| Field | Description | Scheme | Required + +| services +| Services - list of per-pod service overrides +| []service.OverrideSpec +| false +|=== + +<> + [#rabbitmq] ==== RabbitMq @@ -19739,9 +20600,14 @@ RabbitMqSpecCore - this version is used by the OpenStackControlplane CR (no cont | false | queueType -| QueueType to eventually apply the ha-all policy or configure default queue type for the cluster -| string -| true +| QueueType to eventually apply the ha-all policy or configure default queue type for the cluster. Allowed values are: None, Mirrored, Quorum. Defaults to Quorum if not specified. +| *string +| false + +| podOverride +| PodOverride - Override configuration for per-pod services. When specified, individual LoadBalancer services will be created for each pod with the provided configuration, and the transport URL will be configured to use these per-pod services. +| *<> +| false |=== <> @@ -19773,6 +20639,11 @@ RabbitMqStatus defines the observed state of RabbitMq | QueueType - store whether default ha-all policy is present or not | string | false + +| serviceHostnames +| ServiceHostnames - list of per-pod service hostnames for RabbitMQ cluster. When populated, transport URLs use these hostnames instead of pod names. +| []string +| false |=== <> diff --git a/docs/assemblies/dataplane_performance_tuning_large_scale.adoc b/docs/assemblies/dataplane_performance_tuning_large_scale.adoc new file mode 100644 index 000000000..952477beb --- /dev/null +++ b/docs/assemblies/dataplane_performance_tuning_large_scale.adoc @@ -0,0 +1,725 @@ += DataPlane Performance Tuning for large scale deployments + +This guide covers strategies for scaling and optimizing performance when +deploying and managing OpenStack External Data Plane Management (EDPM) nodes +using the openstack-operator. + +== Overview + +The openstack-operator uses Ansible to configure and manage external compute +nodes through its DataPlane functionality. Understanding how to structure your +NodeSets and tune Ansible execution is critical for achieving optimal +deployment performance, especially in large-scale environments. + +=== Key Performance Factors + +* *NodeSet organization*: How nodes are grouped affects parallelism +* *Ansible parallelism*: Configuration of forks and execution strategy +* *Service execution order*: Services run sequentially within each NodeSet +* *Network and hardware resources*: Available SSH connections, CPU, memory + +== NodeSet Grouping Strategies + +A `OpenStackDataPlaneNodeSet` represents a group of nodes with similar +configuration. How you group nodes significantly impacts deployment performance +and manageability. + +=== Strategy 1: Single Large NodeSet + +Group all similar nodes (e.g., all compute nodes) into one NodeSet. + +.Single Large NodeSet Example +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-nodes +spec: + nodes: + compute-0: + hostName: compute-0 + ansible: + ansibleHost: 192.168.122.100 + compute-1: + hostName: compute-1 + ansible: + ansibleHost: 192.168.122.101 + # ... Up to any large number of computes + compute-99: + hostName: compute-99 + ansible: + ansibleHost: 192.168.122.199 +---- + +*Advantages:* + +* Single Ansible execution handles all nodes +* Ansible's built-in parallelism (forks) manages concurrency +* Simpler to manage - one OpenStackDataPlaneNodeSet CR to track +* Consistent configuration across all nodes +* Efficient OpenShift resource usage - less ansible-runner pods during + OpenStackDataPlaneDeployment execution + +*Disadvantages:* + +* Limited parallelism by Ansible forks setting +* Single failure point - one playbook error may affect all nodes in the NodeSet +* Harder to isolate problems to specific node subsets +* Longer serial operations (e.g., gathering facts from 100 nodes) + +=== Strategy 2: Multiple Smaller NodeSets + +Divide nodes into multiple NodeSets, each with a subset of nodes. + +.Multiple NodeSets Example +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-group-1 +spec: + nodes: + compute-0: + hostName: compute-0 + ansible: + ansibleHost: 192.168.122.100 + # ... compute-1 through compute-24 +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-group-2 +spec: + nodes: + compute-25: + hostName: compute-25 + ansible: + ansibleHost: 192.168.122.125 + # ... compute-26 through compute-49 +---- + +*Advantages:* + +* *Increased parallelism*: Multiple ansible-runner pods execute simultaneously + for each NodeSet. +* Better failure isolation - one NodeSet's failure doesn't block others +* Easier troubleshooting and isolation of issues +* Can deploy groups incrementally or independently +* Lower memory per ansible-runner pod + +*Disadvantages:* + +* More NodeSet CRs to manage and monitor +* Potential for configuration drift between NodeSets +* Higher OpenShift overhead - multiple ansible-runner pods +* More complex deployment orchestration + +=== Strategy 3: Role-Based NodeSets + +Group nodes by their role or function rather than arbitrarily. + +.Role-Based NodeSets Example +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-standard +spec: + nodes: + compute-0: + hostName: compute-0 + ansible: + ansibleHost: 192.168.122.100 + # ... standard compute nodes +--- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-gpu +spec: + nodeTemplate: + ansible: + ansibleVars: + edpm_nova_pci_passthrough_whitelist: + - '{"vendor_id": "10de", "product_id": "1b38"}' + nodes: + compute-gpu-0: + hostName: compute-gpu-0 + ansible: + ansibleHost: 192.168.122.210 + # ... GPU compute nodes +---- + +*Advantages:* + +* Different configurations for different node types +* Clear organizational structure +* Natural parallelism across different roles +* Easier capacity planning and management + +*Disadvantages:* + +* May not maximize parallelism if roles have different node counts +* Configuration must be carefully managed across NodeSets + +Shares similar advantages and disadvantages as using multiple smaller NodeSets. + +== Parallel Execution Patterns + +Understanding how the openstack-operator executes deployments is key to optimization. + +=== NodeSet-Level Parallelism + +When you create an `OpenStackDataPlaneDeployment` with multiple NodeSets, the operator starts them sequentially but they execute in parallel: + +.Multiple NodeSets Deployment +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: edpm-deployment +spec: + nodeSets: + - compute-group-1 + - compute-group-2 + - compute-group-3 + - compute-group-4 +---- + +*Execution flow:* + +1. Operator starts deployment for `compute-group-1` → ansible-runner pod launches +2. Operator starts deployment for `compute-group-2` → ansible-runner pod launches +3. Operator starts deployment for `compute-group-3` → ansible-runner pod launches +4. Operator starts deployment for `compute-group-4` → ansible-runner pod launches +5. All four ansible-runner pods execute in parallel + +This means *4 separate Ansible executions run simultaneously*, each processing +their respective NodeSets. + +=== Service-Level Execution + +Within each NodeSet, services execute *sequentially* (one after another). You +cannot parallelize service execution within a single NodeSet, but multiple +NodeSets executing in parallel means those services run in parallel across +NodeSets. + +=== Node-Level Parallelism Within Ansible + +Within a single Ansible execution (one NodeSet), parallelism is controlled by +Ansible's `forks` setting. This determines how many nodes Ansible configures +simultaneously. + +*Default behavior* (from edpm-ansible playbooks): + +* *Strategy*: `linear` (waits for all hosts to complete a task before moving to next task) +* *Forks*: Defaults to 5 (can be overridden with `ANSIBLE_FORKS`) + +== Ansible Performance Tuning + +=== Environment Variables + +You can configure Ansible behavior by setting Ansible specific environment +variables in the NodeSet spec: + +.Complete Tuned NodeSet Example +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-optimized +spec: + env: + # Enable colored output for easier log reading + - name: ANSIBLE_FORCE_COLOR + value: "True" + + # Increase parallel execution (default: 5) + # Set based on your control plane resources + - name: ANSIBLE_FORKS + value: "50" + + # Increase SSH connection timeout (default: 10) + # Useful for slow networks or heavily loaded nodes + - name: ANSIBLE_TIMEOUT + value: "30" + + # Enable pipelining to reduce SSH overhead + # Requires sudo without requiretty + - name: ANSIBLE_PIPELINING + value: "True" + + # Increase SSH connection persistence + # Reuses SSH connections for better performance + - name: ANSIBLE_SSH_PIPELINING + value: "True" + + # Control SSH connection multiplexing + - name: ANSIBLE_SSH_CONTROL_PATH_DIR + value: "/tmp/ansible-ssh-%%h-%%p-%%r" + + # Set callback plugins for better output + - name: ANSIBLE_STDOUT_CALLBACK + value: "yaml" + + # Increase async job status polling + - name: ANSIBLE_POLL_INTERVAL + value: "5" + nodes: + compute-0: + # ... node definitions +---- + +=== Common Ansible Tuning Techniques + +See +https://docs.ansible.com/projects/ansible/latest/reference_appendices/config.html +for a comprehensive list of ansible configuration settings. + +The following are the more common configuration settings related to performance +tuning for large environments. + +==== Optimize Fork Count + +The `ANSIBLE_FORKS` setting is the most impactful tuning parameter. + +*Considerations:* + +* *Control plane resources*: More forks require more CPU/memory in the ansible-runner pod +* *Network capacity*: More simultaneous SSH connections +* *Target node capacity*: Nodes must handle concurrent configuration tasks + +*Recommendations:* + +* Small deployments (< 10 nodes): `ANSIBLE_FORKS=5-10` +* Medium deployments (10-50 nodes): `ANSIBLE_FORKS=20-30` +* Large deployments (50-100 nodes): `ANSIBLE_FORKS=50-75` +* Very large (100+ nodes): Consider multiple NodeSets instead of very high fork count + +[source,yaml] +---- +env: + - name: ANSIBLE_FORKS + value: "50" # Tune based on your environment +---- + +*Performance impact*: Increased parallelism can decrease deployment times. + +==== Enable SSH Pipelining + +Pipelining reduces the number of SSH operations required for each task. See +https://docs.ansible.com/projects/ansible/latest/collections/ansible/builtin/ssh_connection.html#parameter-pipelining +for more details. + +*Requirements:* + +* SSH user must have passwordless sudo or sudo without `requiretty` + +[source,yaml] +---- +env: + - name: ANSIBLE_PIPELINING + value: "True" + - name: ANSIBLE_SSH_PIPELINING + value: "True" +---- + +==== Increase Timeouts for Slow Environments + +If you have slow networks or heavily loaded nodes: + +[source,yaml] +---- +env: + - name: ANSIBLE_TIMEOUT + value: "60" # SSH connection timeout in seconds + - name: ANSIBLE_GATHER_TIMEOUT + value: "60" # Fact gathering timeout +---- + +==== Control Output and Logging + +Reduce overhead from excessive logging: + +[source,yaml] +---- +env: + - name: ANSIBLE_STDOUT_CALLBACK + value: "yaml" # or "json" for structured output + - name: ANSIBLE_DISPLAY_SKIPPED_HOSTS + value: "False" + - name: ANSIBLE_DISPLAY_OK_HOSTS + value: "False" # Only show changed/failed + - name: ANSIBLE_RETRY_FILES_ENABLED + value: "False" # Disable retry files +---- + +==== SSH Connection Multiplexing + +Reuse SSH connections for better performance: + +[source,yaml] +---- +env: + - name: ANSIBLE_SSH_CONTROL_PATH + value: "/tmp/ansible-ssh-%%h-%%p-%%r" + - name: ANSIBLE_SSH_CONTROL_PERSIST + value: "60s" # Keep connections alive for 60 seconds +---- + +== Using ansibleLimit for Targeted Deployments + +The `ansibleLimit` field allows you to target specific nodes within your NodeSets without modifying the NodeSet definitions. + +=== Basic Usage + +Deploy only to specific nodes: + +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: limited-deployment +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-0,compute-5,compute-10" +---- + +This deploys only to `compute-0`, `compute-5`, and `compute-10` within the `compute-nodes` NodeSet. + +=== Pattern Matching + +Use Ansible patterns for more flexible targeting. +See +https://docs.ansible.com/projects/ansible/latest/inventory_guide/intro_patterns.html +for more details on using ansible limit and pattern matching. + +Example OpenStackDataPlaneDeployment's using ansibleLimit and pattern matching: + +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: pattern-limited-deployment +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-[0:9]" # First 10 nodes (compute-0 through compute-9) +---- + +=== Wildcard Patterns + +[source,yaml] +---- +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-1*" # Matches compute-1, compute-10, compute-11, etc. +---- + +=== Use Cases for ansible limit + +==== Gradual Rollout + +Deploy to nodes incrementally to validate changes: + +.Phase 1: Deploy to first subset of nodes +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: rollout-phase-1 +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-[0:9]" +---- + +.Phase 2: Deploy to next subset of nodes after validation +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: rollout-phase-2 +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-[10:49]" +---- + +==== Hotfix Deployment + +Fix issues on specific problematic nodes: + +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: hotfix-deployment +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-15,compute-23,compute-67" + servicesOverride + - "configure-os" # Only reconfigure OS +---- + +==== Testing Changes + +Test configuration changes on a canary node: + +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: canary-test +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-0" # Single canary node +---- + +==== Combining with Multiple NodeSets + +The `ansibleLimit` applies to all NodeSets in the deployment: + +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: multi-nodeset-limited +spec: + nodeSets: + - compute-group-1 + - compute-group-2 + - compute-group-3 + ansibleLimit: "compute-[0:9]" # Applies to all three NodeSets +---- + +This will deploy to `compute-0` through `compute-9`, in which ever NodeSets +they are specified in the 3 referenced NodeSets. + +== Scaling Strategy Comparison + +=== Scenario: 100 Compute Nodes Deployment + +Let's compare different strategies for deploying 100 compute nodes. + +==== Option 1: Single Large NodeSet + +.Configuration +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: all-computes +spec: + env: + - name: ANSIBLE_FORKS + value: "50" + nodes: + # compute-0 through compute-99 (100 nodes) +---- + +*Characteristics:* + +* *Ansible executions per service*: 1 +* *Parallelism*: Up to 50 nodes at once (limited by ANSIBLE_FORKS) +* *ansible-runner pods per service*: 1 +* *Fact gathering*: Serial across 100 nodes (even with forks, each batch completes before next) +* *Failure handling*: One failure may require redeploying all 100 nodes +* *Resource usage*: One large ansible-runner pod per service + +*Timeline example* (assuming 10 services, 5 minutes per service per node): + +* With forks=50: Two batches of 50 nodes +* Service 1: Batch 1 (50 nodes) runs in parallel = 5 min, then Batch 2 (50 nodes) = 5 min → 10 min total +* Service 2: Same pattern → 10 min total +* Total for ~10 services: ~100 minutes + +==== Option 2: Four NodeSets (25 nodes each) + +.Configuration +[source,yaml] +---- +# compute-group-1: compute-0 through compute-24 +# compute-group-2: compute-25 through compute-49 +# compute-group-3: compute-50 through compute-74 +# compute-group-4: compute-75 through compute-99 + +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneNodeSet +metadata: + name: compute-group-1 +spec: + env: + - name: ANSIBLE_FORKS + value: "25" + nodes: + # 25 nodes +---- + +.Deployment +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: deploy-all-groups +spec: + nodeSets: + - compute-group-1 + - compute-group-2 + - compute-group-3 + - compute-group-4 +---- + +*Characteristics:* + +* *Ansible executions per service*: 4 (in parallel) +* *Parallelism*: 4 NodeSets × 25 nodes = 100 nodes effectively in parallel +* *ansible-runner pods per service*: 4 +* *Fact gathering*: Parallel across 4 groups +* *Failure handling*: One group's failure doesn't block others +* *Resource usage*: Four medium ansible-runner pods per service + +*Timeline example* (same assumptions): + +* With forks=25: Each NodeSet processes all 25 nodes in one batch +* Service 1: All 4 groups run in parallel = 5 min total +* Service 2: All 4 groups run in parallel = 5 min total +* Total for all services: ~50 minutes (2x faster than Option 1) + +=== Comparison Table + +[cols="1,1,1,1",options="header"] +|=== +| Aspect | Single NodeSet (100) | 4 NodeSets (25 each) | 10 NodeSets (10 each) + +| *Parallelism* +| Limited (50 forks max) +| High (4 executions) +| Maximum (10 executions) + +| *Deployment Time* +| ~100 minutes +| ~50 minutes +| ~50 minutes + +| *Resource Overhead* +| Low (1 pod) +| Medium (4 pods) +| High (10 pods) + +| *Failure Isolation* +| Poor (all-or-nothing) +| Good (25% chunks) +| Excellent (10% chunks) + +| *Management Complexity* +| Simple (1 CR) +| Moderate (4 CRs) +| Complex (10 CRs) + +| *Troubleshooting* +| Difficult +| Easier +| Easiest + +| *Best For* +| Small deployments, uniform nodes +| Balanced performance/management +| Maximum speed, good isolation +|=== + +=== Recommendations + +*Use Single Large NodeSet when:* + +* You have less nodes in the NodeSet than a reasonable setting for ansible + forks +* Resources are constrained (can't run multiple pods) +* Configuration is identical across all nodes +* Simplicity is more important than speed + +*Use Multiple Medium NodeSets when:* + +* You want balanced performance and manageability +* Some failure isolation is important +* You have sufficient cluster resources for multiple pods + +*Use Many Small NodeSets when:* + +* Maximum deployment speed is critical +* Strong failure isolation is required +* You have ample cluster resources +* You can manage the additional CRs + +*Use Role-Based NodeSets when:* + +* Nodes have different configurations +* Different hardware types exist +* You need to deploy to subsets frequently +* Organizational clarity is important + +== Best Practices + +=== Start Conservative, Then Optimize + +Begin with modest settings and increase based on observed performance: + +[source,yaml] +---- +# Initial deployment +env: + - name: ANSIBLE_FORKS + value: "10" + +# After monitoring, if resources allow +env: + - name: ANSIBLE_FORKS + value: "30" +---- + +=== Use ansible limit for Validation + +Before deploying to all nodes, test on a subset: + +.Test deployment +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: validation-deployment +spec: + nodeSets: + - compute-nodes + ansibleLimit: "compute-0,compute-1" +---- + +.Full deployment after validation +[source,yaml] +---- +apiVersion: dataplane.openstack.org/v1beta1 +kind: OpenStackDataPlaneDeployment +metadata: + name: production-deployment +spec: + nodeSets: + - compute-nodes +---- diff --git a/docs/assemblies/dataplane_resources.adoc b/docs/assemblies/dataplane_resources.adoc index 4b9660ffa..8fb440283 100644 --- a/docs/assemblies/dataplane_resources.adoc +++ b/docs/assemblies/dataplane_resources.adoc @@ -403,7 +403,7 @@ OpenStackDataPlaneNodeSetStatus defines the observed state of OpenStackDataPlane [#openstackdataplaneservice] ==== OpenStackDataPlaneService -OpenStackDataPlaneService is the Schema for the openstackdataplaneservices API OpenStackDataPlaneService name must be a valid RFC1123 as it is used in labels +OpenStackDataPlaneService defines the Schema for the openstackdataplaneservices API. OpenStackDataPlaneService name must be a valid RFC1123 as it is used in labels |=== | Field | Description | Scheme | Required diff --git a/docs/assemblies/scaling.adoc b/docs/assemblies/dataplane_scaling_out.adoc similarity index 99% rename from docs/assemblies/scaling.adoc rename to docs/assemblies/dataplane_scaling_out.adoc index f35b8177f..27493a9a7 100644 --- a/docs/assemblies/scaling.adoc +++ b/docs/assemblies/dataplane_scaling_out.adoc @@ -1,4 +1,4 @@ -= Scaling DataPlane += Scaling the DataPlane == Scaling Out diff --git a/docs/dataplane.adoc b/docs/dataplane.adoc index 49a28c7e8..f836e1d00 100644 --- a/docs/dataplane.adoc +++ b/docs/dataplane.adoc @@ -29,6 +29,10 @@ include::assemblies/design.adoc[leveloffset=+1] include::assemblies/creating-the-data-plane.adoc[leveloffset=+1] +include::assemblies/dataplane_performance_tuning_large_scale.adoc[leveloffset=+1] + +include::assemblies/dataplane_scaling_out.adoc[leveloffset=+1] + include::assemblies/proc_deploying-in-disconnected-environments.adoc[leveloffset=+1] include::assemblies/dataplane_resources.adoc[leveloffset=-1]