[KOGITO-8298] Improve the Kaniko build time using a pre-warmed cache and desired resources (#51)

Signed-off-by: Davide Salerno <dsalerno@redhat.com>
13 files changed
tree: 4f3d14632d0a907788e59f4d145cb5981b38948d
  1. .ci/
  2. .github/
  3. api/
  4. builder/
  5. bundle/
  6. config/
  7. constants/
  8. controllers/
  9. converters/
  10. hack/
  11. install/
  12. platform/
  13. resources/
  14. test/
  15. utils/
  16. .gitignore
  17. bundle.Dockerfile
  18. CONTRIBUTING.md
  19. Dockerfile
  20. go.mod
  21. go.sum
  22. LICENSE
  23. main.go
  24. Makefile
  25. operator.yaml
  26. PROJECT
  27. README.md
README.md

Kogito Serverless Operator

The Kogito Serverless Operator is built in order to help the Kogito Serverless users to build and deploy easily on Kubernetes/Knative/OpenShift a service based on Kogito that will be able to execute a workflow.

The CustomResources defined and managed by this operator are the following:

  • Workflow
  • Platform
  • Build

Getting Started

You’ll need a Kubernetes cluster to run against. You can use:

to get a local cluster for testing, or run against a remote cluster.

Note: Your controller will automatically use the current context in your kubeconfig file (i.e. whatever cluster kubectl cluster-info shows).

Prepare a Minikube instance

minikube start --cpus 4 --memory 4096 --addons registry --addons metrics-server --insecure-registry "10.0.0.0/24" --insecure-registry "localhost:5000"

Note: To speed up, you can increase cpus and memory options. For example, use --cpus 12 --memory 16384.

Tip: If it does work with the default driver, aka docker, you can try to start with the podman driver:

minikube start [...] --driver podman

Important: There are some issues with the crio container runtime and Kaniko that the operator is using. Reference: https://github.com/GoogleContainerTools/kaniko/issues/2201

Run the operator

  1. Install the CRDs
make install
  1. Build and push your image to the location specified by IMG:
make docker-build docker-push IMG=<some-registry>/kogito-serverless-operator:tag
  1. Deploy the controller to the cluster with the image specified by IMG:
make deploy IMG=<some-registry>/kogito-serverless-operator:tag

This will deploy the operator into the kogito-serverless-operator-system namespace.

Test the Greeting workflow

A good starting point to check that everything is working well, it is the Greeting workflow.

Prerequisites

Prepare for the build

Follow these steps to create a container that you can than deploy as a Service on Kubernetes or KNative.

  1. Create a namespace for the building phase
kubectl create namespace kogito-workflows
  1. Create a secret for the container registry authentication
kubectl create secret docker-registry regcred --docker-server=<registry_url> --docker-username=<registry_username> --docker-password=<registry_password> --docker-email=<registry_email> -n kogito-workflows

or you directly import your local docker config into your kubernetes cluster:

kubectl create secret generic regcred --from-file=.dockerconfigjson=${HOME}/.docker/config.json --type=kubernetes.io/dockerconfigjson -n kogito-workflows
  1. Create a Platform containing the configuration (i.e. registry address, secret) for building your workflows:

You can find a basic Platform CR example in the config folder.

kubectl apply -f config/samples/sw.kogito_v1alpha08_kogitoserverlessplatform.yaml -n kogito-workflows

Note: In this Custom Resource, spec.platform.registry.secret is the name of the secret you created just before.

Tip: You can also update “on-the-fly” the platform CR registry field with this command (change <YOUR_REGISTRY>):

cat config/samples/sw.kogito_v1alpha08_kogitoserverlessplatform.yaml | sed "s|address: .*|address: <YOUR_REGISTRY>|g" | kubectl apply -n kogito-workflows -f -

Install your workflow

  1. Install the Serverless Workflow custom resource:
kubectl apply -f config/samples/sw.kogito_v1alpha08_kogitoserverlessworkflow.yaml -n kogito-workflows
  1. You can check the logs of the build of your workflow via:
kubectl logs kogito-greeting-builder -n kogito-workflows

The final pushed image should be printed into the logs at the end of the build.

Cleanup your cluster

You will need to remove the different resources you created.

  1. Remove created workflow resources
kubectl delete -f config/samples/sw.kogito_v1alpha08_kogitoserverlessworkflow.yaml -n kogito-workflows
  1. Remove the kogito-workflows namespace
kubectl delete namespace kogito-workflows
  1. Remove the operator
make undeploy

Use local scripts

You can find some scripts in the hack folder.

  • greeting_example_deploy.sh will install operator and deploy all resources in your current cluster
  • greeting_example_remove.sh will remove the created workflow resource from greeting_example_deploy.sh script.
    If you give the -A or --all option, it will also remove the operator from the cluster.

Development and Contributions

Contributing is easy, just take a look at our contributors'guide.