Minimal notes for installing this chart on an already-existing OpenStack
Kubernetes cluster (e.g. one provisioned by Azimuth).
This directory intentionally does not contain any tooling to create the
Kubernetes cluster itself (no Terraform/Kubespray/etc.) — use Azimuth (or
your own provisioning method) for that, then point helm install at the
resulting cluster.
- An existing Kubernetes cluster on OpenStack with the Cinder CSI driver installed (this is what Azimuth-provisioned clusters ship by default).
- Node scheduling:
values-openstack.yamlsetsnode_group.label_keyto Azimuth's native Cluster API node-group label (capi.stackhpc.com/node-group: web|worker), so no manual node labeling is needed on Azimuth. On a different OpenStack cluster without that label, either label nodesnodegroup=web-group/nodegroup=worker-groupyourself, or overridenode_group.*to match your cluster's own scheme (seeopenstudio-server/values.yamlfor the full set of options). - The
nfs-server-provisionersubchart is a separate vendored dependency and does NOT readnode_group.*— it has its own hardcoded default affinity.values-openstack.yamloverridesnfs-server-provisioner.affinitydirectly; if you change your node-group label scheme, update that override too or this pod will never schedule.
helm install openstudio-server ./openstudio-server -f openstack/values-openstack.yaml -n openstudio-serverSee values-openstack.yaml for the values this
sets, and the top-level README for general chart install
instructions.
StorageClass "ssd" ... exists and cannot be imported into the current release: invalid ownership metadata: assdStorageClass from a previous/different release or namespace is still on the cluster. If nothing currently uses it (kubectl get pvc -A -o jsonpath='{range .items[?(@.spec.storageClassName=="ssd")]}{.metadata.namespace}/{.metadata.name}{"\n"}{end}'), delete it (kubectl delete storageclass ssd) and re-run install — Helm will recreate it with the correct ownership.StorageClass ... reclaimPolicy: Forbidden/volumeBindingMode: ... field is immutable: same root cause as above —reclaimPolicyandvolumeBindingModecan't be changed on an existing StorageClass. Delete and let Helm recreate it (same fix as above).ssdStorageClass missing (storageclass.storage.k8s.io "ssd" not found) andhelm upgrade/helm installdoes not recreate it: the chart only renders thessdStorageClass when alookupat render time doesn't find one already on the cluster (templates/storageclass/storageclass.yaml), so Helm never actually tracks/owns that object in the release manifest. If it's deleted out-of-band afterward — e.g. by an interruptedhelm uninstallwhose pre-delete hook rankubectl delete storageclass ssdbefore the hook itself failed to complete — no subsequenthelm upgradewill bring it back, since Helm has no record it needs to. Recreate it manually:Tracked as #108 (needs a design decision on whether to stop usingkubectl apply -f - <<'YAML' apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ssd provisioner: cinder.csi.openstack.org reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer YAML
lookuphere).- Helm v4
conflict occurred while applying object ... with subresource "scale": Helm v4 uses server-side apply by default. If a Deployment's.spec.replicasis currently owned bykube-controller-manager(via an active HPA, e.g. from a previous partially-failed install), Helm won't overwrite it without--force-conflictsonhelm upgrade --install. This is expected on essentially every routine upgrade once theweb/workerHPAs have scaled at least once — not just a failure-recovery edge case — so always include--force-conflictsonhelm upgradeagainst a live release:Tracked as #110 (proper fix is to stop hardcodinghelm upgrade --install openstudio-server ./openstudio-server \ -f openstack/values-openstack.yaml -n openstudio-server --force-conflicts
replicas:under active HPA control). - If a previous
helm install/uninstalldidn't complete cleanly (e.g. pods stuckTerminatingdue to a container runtime issue), don't retry with a freshhelm installinto the same failed release — usehelm upgrade --install ... --force-conflictsto move it forward instead, after clearing any stuck pods (kubectl delete pods --all -n <namespace> --grace-period=0 --force).