Skip to content

Original source: https://input.scs.community/scs-operator-hackathon-images-flavors#

Yaook SCS Operator Hackathon - Manage OpenStack resources in K8s

OSISM Image/Flavor Manager

  • Commandline tool which is supposed to be run manually
  • Integration in k8s would require some amount of glue code
  • qick and dirty solution: CronJob with configuration in a ConfiMap
  • awkward user interface

PoC OpenStack Resource Controller

Rough Steps

export ORC_RELEASE="https://github.com/k-orc/openstack-resource-controller/releases/download/v2.4.0/install.yaml"
kubectl apply --server-side -f $ORC_RELEASE
kubectl create -n orc-system secret generic openstack-clouds \
    --from-file=clouds.yaml=./orc_clouds.yaml
clouds:
  local-admin:
    auth:
      auth_url: https://keystone.yaook.svc:5000/v3
      password: geheim
      project_domain_name: Default
      project_name: admin
      user_domain_name: Default
      username: yaook-sys-maint
    endpoint_type: internal
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: glance-api
    state.yaook.cloud/component: api_deployment
    state.yaook.cloud/parent-group: yaook.cloud
    state.yaook.cloud/parent-name: glance
    state.yaook.cloud/parent-plural: glancedeployments
    state.yaook.cloud/parent-version: v1
  name: glance-api
  namespace: yaook
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      state.yaook.cloud/component: api_deployment
      state.yaook.cloud/parent-group: yaook.cloud
      state.yaook.cloud/parent-name: glance
      state.yaook.cloud/parent-plural: glancedeployments
      state.yaook.cloud/parent-version: v1
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      annotations:
        config-timestamp: 2026-02-24T19:44:46.002795Z+JJXKSZ2trz0
      creationTimestamp: null
      labels:
        state.yaook.cloud/component: api_deployment
        state.yaook.cloud/parent-group: yaook.cloud
        state.yaook.cloud/parent-name: glance
        state.yaook.cloud/parent-plural: glancedeployments
        state.yaook.cloud/parent-version: v1
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: image.yaook.cloud/api
                operator: Exists
            - matchExpressions:
              - key: any.yaook.cloud/api
                operator: Exists
      automountServiceAccountToken: false
      containers:
      - env:
        - name: REQUESTS_CA_BUNDLE
          value: /etc/pki/tls/certs/ca-bundle.crt
        - name: HTTP_PROXY
          value: http://10.65.117.35:3128
        - name: NO_PROXY
          value: .svc,.cluster,10.0.0.0/8
        image: registry.yaook.cloud/yaook/glance-2025.1:1.1.151
        imagePullPolicy: IfNotPresent
        lifecycle:
          preStop:
            exec:
              command:
              - /bin/sleep
              - "5"
        livenessProbe:
          exec:
            command:
            - curl
            - --fail
            - localhost:8080
          failureThreshold: 3
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        name: glance-api
        readinessProbe:
          exec:
            command:
            - curl
            - --fail
            - localhost:8080
          failureThreshold: 3
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /etc/glance
          name: glance-config-volumev2
        - mountPath: /etc/pki/tls/certs
          name: ca-certs
        - mountPath: /etc/ceph/ceph.conf
          name: glance-ceph-conf-volume
          subPath: ceph.conf
        - mountPath: /etc/ceph/keyfile
          name: glance-ceph-keyfile-volume
          subPath: keyfile
      - env:
        - name: SERVICE_PORT
          value: "9292"
        - name: LOCAL_PORT
          value: "8080"
        - name: METRICS_PORT
          value: "9090"
        - name: REQUESTS_CA_BUNDLE
          value: /etc/ssl/certs/ca-certificates.crt
        - name: MAX_BODY_SIZE_MB
          value: "0"
        - name: READ_TIMEOUT
          value: "7200"
        image: registry.yaook.cloud/yaook/ssl-terminator:1.2.116
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /.yaook.cloud/ssl-terminator-healthcheck
            port: 9292
            scheme: HTTPS
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        name: ssl-terminator
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 9292
            scheme: HTTPS
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: ssl-terminator-config
        - mountPath: /data
          name: tls-secret
        - mountPath: /etc/ssl/certs/ca-certificates.crt
          name: ca-certs
          subPath: ca-bundle.crt
      - env:
        - name: SERVICE_PORT
          value: "9293"
        - name: LOCAL_PORT
          value: "8080"
        - name: METRICS_PORT
          value: "9091"
        - name: REQUESTS_CA_BUNDLE
          value: /etc/ssl/certs/ca-certificates.crt
        - name: MAX_BODY_SIZE_MB
          value: "0"
        - name: READ_TIMEOUT
          value: "7200"
        image: registry.yaook.cloud/yaook/ssl-terminator:1.2.116
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /.yaook.cloud/ssl-terminator-healthcheck
            port: 9293
            scheme: HTTPS
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        name: ssl-terminator-external
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 9293
            scheme: HTTPS
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: ssl-terminator-external-config
        - mountPath: /data
          name: tls-secret-external
        - mountPath: /etc/ssl/certs/ca-certificates.crt
          name: ca-certs
          subPath: ca-bundle.crt
      - args:
        - /data/
        env:
        - name: YAOOK_SERVICE_RELOAD_MODULE
          value: traefik
        image: registry.yaook.cloud/yaook/service-reload:1.0.102
        imagePullPolicy: IfNotPresent
        name: service-reload
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: ssl-terminator-config
        - mountPath: /data
          name: tls-secret
      - args:
        - /data/
        env:
        - name: YAOOK_SERVICE_RELOAD_MODULE
          value: traefik
        image: registry.yaook.cloud/yaook/service-reload:1.0.102
        imagePullPolicy: IfNotPresent
        name: service-reload-external
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: ssl-terminator-external-config
        - mountPath: /data
          name: tls-secret-external
      dnsPolicy: ClusterFirst
      enableServiceLinks: false
apiVersion: openstack.k-orc.cloud/v1alpha1
kind: Image
metadata:
  name: cirros
  namespace: orc-system
spec:
  cloudCredentialsRef:
    cloudName: local-admin
    secretName: openstack-clouds
  resource:
    name: cirros
    protected: false
    properties:
      architecture: x86_64
    content:
      diskFormat: raw
      download:
        url: https://download.cirros-cloud.net/0.6.3/cirros-0.6.3-x86_64-disk.img

yaml apiVersion: openstack.k-orc.cloud/v1alpha1 kind: Flavor metadata: name: test-flavor namespace: orc-system spec: cloudCredentialsRef: cloudName: local-admin secretName: openstack-clouds resource: name: armin-1234-flavor ram: 4123 vcpus: 2 disk: 50 isPublic: true

First Impressions

  • Wiring Keystone authentication needs some plumbing
  • General Keystone connectivity was achieved