OpenStack Provider Setup
Purpose: For platform engineers, shows how to configure the OpenStack provider for production Kubernetes deployments on Rackspace OpenStack.
Prerequisites
- Rackspace OpenStack account with API access
- Application credentials created in Horizon or via CLI
- Network and subnet pre-provisioned (or permissions to create them)
- Floating IP pool available for load balancers
- openCenter CLI installed (see CLI Installation)
Create Application Credentials
Generate application credentials in OpenStack (preferred over username/password):
openstack application credential create opencenter-deployer \
--description "openCenter cluster provisioning"
Save the id and secret from the output.
Initialize Cluster
opencenter cluster init prod-cluster --org my-org --type openstack
Configure Provider Section
opencenter cluster edit prod-cluster
Set the OpenStack provider block:
opencenter:
infrastructure:
provider: openstack
cloud:
openstack:
auth_url: https://identity.api.rackspacecloud.com/v3
region: sjc3
application_credential_id: ${OPENSTACK_APP_CRED_ID}
application_credential_secret: ${OPENSTACK_APP_CRED_SECRET}
network_name: my-network
subnet_id: <subnet-uuid>
floating_ip_pool: external
image: Ubuntu-24.04
flavor_control_plane: general1-8
flavor_worker: general1-16
availability_zone: nova
OpenStack-Specific Considerations
Serial API Calls
All OpenStack clusters default to provider-requires-serial-api-calls: true for the Cloud Controller Manager. This prevents load balancer API race conditions on Rackspace OpenStack. See ADR-002 for details.
Required Services
OpenStack clusters automatically include:
openstack-ccm— Cloud Controller Manager for LB and node integrationopenstack-csi— Cinder CSI driver for persistent volumesexternal-snapshotter— Volume snapshot supportmetallb— LoadBalancer service type (when floating IPs are not used)
Storage Classes
The OpenStack CSI driver creates StorageClasses for Cinder volume types. Default is cinder-default with volumeType: __DEFAULT__.
Validate and Deploy
# Validate (checks OpenStack API connectivity and resource availability)
opencenter cluster validate prod-cluster
# Generate GitOps repository
opencenter cluster setup prod-cluster --render
# Provision infrastructure with Terraform
cd customers/my-org/infrastructure/clusters/prod-cluster/
terraform init
terraform apply
# Deploy Kubernetes with Kubespray
# (runs automatically via Terraform provisioner, or manually)
# Bootstrap FluxCD
opencenter cluster bootstrap prod-cluster
Verification
# Check OpenStack CCM is running
kubectl get pods -n kube-system -l app=openstack-cloud-controller-manager
# Verify Cinder CSI
kubectl get csidrivers | grep cinder
# Test LoadBalancer service
kubectl create service loadbalancer test-lb --tcp=80:80
kubectl get svc test-lb # Should get an external IP
kubectl delete svc test-lb