Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions providers/openstack/scs2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
# Cluster Stacks

## Getting started

```sh
# Create bootstrap cluster
kind create cluster

# Init Cluster API
export CLUSTER_TOPOLOGY=true
export EXP_CLUSTER_RESOURCE_SET=true
export EXP_RUNTIME_SDK=true
kubectl apply -f https://github.com/k-orc/openstack-resource-controller/releases/latest/download/install.yaml
clusterctl init --infrastructure openstack

kubectl -n capi-system rollout status deployment
kubectl -n capo-system rollout status deployment

```

values.yaml

```
clusterStackVariables:
ociRepository: registry.scs.community/kaas/cluster-stacks
controllerManager:
rbac:
additionalRules:
- apiGroups:
- "openstack.k-orc.cloud"
resources:
- "images"
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
```

```
# Install CSO and CSPO
helm upgrade -i cso \
-n cso-system \
--create-namespace \
oci://registry.scs.community/cluster-stacks/cso \
--values values.yaml

kubectl create namespace cluster
```

```sh
# Prepare the Secret as it will be deployed in the Workload Cluster
kubectl create secret -n kube-system generic clouds-yaml --from-file=clouds.yaml=<PATH TO clouds.yaml> --dry-run=client -oyaml > clouds-yaml-secret

# Add the Secret to the ClusterResourceSet Secret in the Management Cluster
kubectl create -n cluster secret generic clouds-yaml --from-file=clouds-yaml-secret --type=addons.cluster.x-k8s.io/resource-set
```

```yaml
cat <<EOF | kubectl apply -f -
apiVersion: addons.cluster.x-k8s.io/v1beta1
kind: ClusterResourceSet
metadata:
name: clouds-yaml
namespace: cluster
spec:
strategy: "Reconcile"
clusterSelector:
matchLabels:
managed-secret: clouds-yaml
resources:
- name: clouds-yaml
kind: Secret
EOF
```

```sh
cat <<EOF | kubectl apply -f -
apiVersion: clusterstack.x-k8s.io/v1alpha1
kind: ClusterStack
metadata:
name: openstack
namespace: cluster
spec:
provider: openstack
name: scs2
kubernetesVersion: "1.33"
channel: custom
autoSubscribe: false
noProvider: true
versions:
- v0-sha.mio2x7r
EOF
```

Check if ClusterClasses exist

```sh
kubectl get clusterclass -n cluster
```

cluster.yaml

```sh
cat <<EOF | kubectl apply -f -
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: my-cluster
namespace: cluster
labels:
managed-secret: clouds-yaml
spec:
clusterNetwork:
pods:
cidrBlocks:
- "172.16.0.0/16"
serviceDomain: cluster.local
services:
cidrBlocks:
- "10.96.0.0/12"
topology:
variables:
- name: apiServerLoadBalancer
value: octavia-ovn
- name: imageIsOrc
value: false
- name: controlPlaneFlavor
value: SCS-2V-4-20s
class: openstack-scs2-1-33-v0-sha.mio2x7r
controlPlane:
replicas: 1
version: v1.33.4
workers:
machineDeployments:
- class: default-worker
name: md-0
replicas: 1
EOF
```

```sh
clusterctl get kubeconfig -n cluster openstack-testcluster > /tmp/kubeconfig
kubectl get nodes --kubeconfig /tmp/kubeconfig
```
6 changes: 6 additions & 0 deletions providers/openstack/scs2/cluster-addon/ccm/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: openstack-cloud-controller-manager
repository: https://kubernetes.github.io/cloud-provider-openstack
version: 2.33.1
digest: sha256:f715cda5fd4273e69571d3dafac7c42e1a3bc03b6a6970a0e7a0fefca510c81b
generated: "2025-09-03T22:15:44.923801521+02:00"
10 changes: 10 additions & 0 deletions providers/openstack/scs2/cluster-addon/ccm/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: CCM
name: CCM
version: v1
dependencies:
- alias: openstack-cloud-controller-manager
name: openstack-cloud-controller-manager
repository: https://kubernetes.github.io/cloud-provider-openstack
version: 2.33.1
Binary file not shown.
4 changes: 4 additions & 0 deletions providers/openstack/scs2/cluster-addon/ccm/overwrite.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
values: |
openstack-cloud-controller-manager:
cluster:
name: {{ .Cluster.metadata.name }}
21 changes: 21 additions & 0 deletions providers/openstack/scs2/cluster-addon/ccm/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
openstack-cloud-controller-manager:
secret:
enabled: true
name: ccm-cloud-config
create: true
nodeSelector:
tolerations:
- key: node.cloudprovider.kubernetes.io/uninitialized
value: "true"
effect: NoSchedule
extraVolumes:
- name: clouds-yaml
secret:
secretName: clouds-yaml
extraVolumeMounts:
- name: clouds-yaml
readOnly: true
mountPath: /etc/openstack
cloudConfig:
global:
use-clouds: true
6 changes: 6 additions & 0 deletions providers/openstack/scs2/cluster-addon/cni/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: cilium
repository: https://helm.cilium.io/
version: 1.18.1
digest: sha256:5f02ccb0d288258b1b25a30f6e3a254cefb5523462fa54767ec7a0b0222bcae9
generated: "2025-09-03T22:19:49.143431694+02:00"
10 changes: 10 additions & 0 deletions providers/openstack/scs2/cluster-addon/cni/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: CNI
name: CNI
version: v1
dependencies:
- alias: cilium
name: cilium
repository: https://helm.cilium.io/
version: 1.18.1
Binary file not shown.
13 changes: 13 additions & 0 deletions providers/openstack/scs2/cluster-addon/cni/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
cilium:
tls:
secretsNamespace:
name: kube-system
sessionAffinity: true
sctp:
enabled: true
ipam:
mode: "kubernetes"
gatewayAPI:
enabled: true
secretsNamespace:
name: kube-system
6 changes: 6 additions & 0 deletions providers/openstack/scs2/cluster-addon/csi/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: openstack-cinder-csi
repository: https://kubernetes.github.io/cloud-provider-openstack
version: 2.33.1
digest: sha256:58367e397af4040813dc09b12f187c2492d2c799f79f2ae70a4f312f053465b7
generated: "2025-09-03T22:20:38.976011859+02:00"
10 changes: 10 additions & 0 deletions providers/openstack/scs2/cluster-addon/csi/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: CSI
name: CSI
version: v1
dependencies:
- alias: openstack-cinder-csi
name: openstack-cinder-csi
repository: https://kubernetes.github.io/cloud-provider-openstack
version: 2.33.1
Binary file not shown.
3 changes: 3 additions & 0 deletions providers/openstack/scs2/cluster-addon/csi/overwrite.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
values: |
openstack-cinder-csi:
clusterID: "{{ .Cluster.metadata.name }}"
38 changes: 38 additions & 0 deletions providers/openstack/scs2/cluster-addon/csi/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
openstack-cinder-csi:
secret:
enabled: true
name: csi-cloud-config
create: true
filename: cloud.conf
data:
cloud.conf: |-
[Global]
use-clouds = "true"
clouds-file = /etc/openstack/clouds.yaml
storageClass:
delete:
isDefault: true
csi:
plugin:
volumes:
- name: clouds-yaml
secret:
secretName: clouds-yaml
- name: cloud-conf
secret:
secretName: csi-cloud-config
volumeMounts:
- name: clouds-yaml
readOnly: true
mountPath: /etc/openstack
- name: cloud-conf
readOnly: true
mountPath: /etc/kubernetes
nodeSelector:
node-role.kubernetes.io/control-plane: ""
tolerations:
- key: node.cloudprovider.kubernetes.io/uninitialized
value: "true"
effect: NoSchedule
- key: node-role.kubernetes.io/control-plane
effect: NoSchedule
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: metrics-server
repository: https://kubernetes-sigs.github.io/metrics-server/
version: 3.13.0
digest: sha256:3df2c46a30bb9835c976b1a3451d2e8bdce5a3a4747ec64d53a41041855d15c1
generated: "2025-09-08T23:11:58.242439116+02:00"
10 changes: 10 additions & 0 deletions providers/openstack/scs2/cluster-addon/metrics-server/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: Metrics Server
name: metrics-server
version: v1
dependencies:
- name: "metrics-server"
version: "3.13.0"
repository: "https://kubernetes-sigs.github.io/metrics-server/"
alias: "metrics-server"
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
values: |
metrics-server:
commonLabels:
domain: "{{ .Cluster.spec.controlPlaneEndpoint.host }}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
metrics-server:
fullnameOverride: metrics-server
args:
- --kubelet-insecure-tls
23 changes: 23 additions & 0 deletions providers/openstack/scs2/cluster-class/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
9 changes: 9 additions & 0 deletions providers/openstack/scs2/cluster-class/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: v2
description: "This chart installs and configures:

* Openstack scs2 Cluster Class

"
name: openstack-scs2-1-33-cluster-class
type: application
version: v1
Loading