apache / incubator-kie-kogito-images

Images for Kogito
http://kogito.kie.org
Apache License 2.0
23 stars 80 forks source link

Create Data Index(DI)/ Jobs Service(JS) Database(DB) migration image #1785

Open rhkp opened 4 months ago

rhkp commented 4 months ago

The Data Index(DI)/ Jobs Service(JS) Database(DB) migration image can be used by Kubernetes/OpenShift job to perform necessary database changes for DI/JS application, before they are started with SonataFlowPlatform. An example could be along this line, assuming Postgres database is up and running on the cluster

Kubernetes DB Migration Job

apiVersion: batch/v1
kind: Job
metadata:
  name: flyway-image-job
spec:
  template:
    spec:
      containers:
        - name: flyway-image
          image: quay.io/rhkp/flyway-image:latest
          command: ["./migration.sh"]
          args:
            - "jdbc:postgresql://postgres:5432/sonataflow"
            - "$(db_username)"
            - "$(db_password)"
          env:
            - name: db_username
              valueFrom:
                secretKeyRef:
                  name: postgres-secrets
                  key: POSTGRES_USER
            - name: db_password
              valueFrom:
                secretKeyRef:
                  name: postgres-secrets
                  key: POSTGRES_PASSWORD
      restartPolicy: Never
  backoffLimit: 4

SonataFlowPlatform Deploying DI/JS Applications

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform
spec:
  build:
    config:
      strategyOptions:
        KanikoBuildCacheEnabled: "true"
  services:
    dataIndex:
      enabled: true
      persistence:
        migrateDBOnStartUp: false
        postgresql:
          jdbcUrl: jdbc:postgresql://postgres:5432/sonataflow?currentSchema=data-index-service
          secretRef:
            name: postgres-secrets
            userKey: POSTGRES_USER
            passwordKey: POSTGRES_PASSWORD
      podTemplate:
        replicas: 1
        container:
        initContainers:
          - name: di-init-hello
            image: busybox:1.28
            command: ['sh', '-c', 'echo The DI will be deployed!']
          - name: init-postgres
            image: registry.access.redhat.com/ubi9/ubi-minimal:latest
            imagePullPolicy: IfNotPresent
            command: [ 'sh', '-c', 'until (echo 1 > /dev/tcp/postgres.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local/5432) >/dev/null 2>&1; do echo "Waiting for postgres server"; sleep 3; done;' ]
    jobService:
      enabled: true
      persistence:
        migrateDBOnStartUp: false
        postgresql:
          jdbcUrl: jdbc:postgresql://postgres:5432/sonataflow?currentSchema=jobs-service
          secretRef:
            name: postgres-secrets
            userKey: POSTGRES_USER
            passwordKey: POSTGRES_PASSWORD
      podTemplate:
        container:
        initContainers:
          - name: js-init-hello
            image: busybox:1.28
            command: ['sh', '-c', 'echo The JS will be deployed!']
          - name: init-postgres
            image: registry.access.redhat.com/ubi9/ubi-minimal:latest
            imagePullPolicy: IfNotPresent
            command: [ 'sh', '-c', 'until (echo 1 > /dev/tcp/postgres.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local/5432) >/dev/null 2>&1; do echo "Waiting for postgres server"; sleep 3; done;' ]