Kubernetes

OpenCore was designed to run on kubernetes. You can still deployed in other ways, but for most production setups, that is the recommend platform to run it on, at least for the primary site.

We use helm to deploy different deployments to kubernetes, so first install helm simply drop this some where and add it to the path, so you can reference it from cmd/powershell. Also, make sure you have kubectl installed and configured to access your kubernetes cluster.

note: OpenCore requires a premium license to run on Kubernetes. Read mere here

OpenCore depends on traefik as ingress controller. It’s beyond the scope of this guide on how to install this in non-clouded environments, but if you are using GKE, aWS, Azure, Alibaba or some of the other cloud providers that has out of the box external loadbalencers, you can simpy deploy trafik with the service with type: LoadBalancer, and from here on everything “just works”.

You can find an example on how to deploy traefik using help on this page

I also go though this process in the video Configuring OpenCore on Kubernetes

So first we need to add OpenIAP’s helm repo and update this and other repos you might have installed

helm repo add openiap https://open-rpa.github.io/helm-charts/
helm repo update

Next create a values file. To avoid confusen i recomend you name this file the same as your namespace and the “instance” you are creating. So imaging you want to deploy an OpenCore instance responding to demo.mydomain.com then create a file named demo.yaml

There is a ton of different settings you can fine tune, you can always find all the settings in the OpenCore values file here but you only need to add the values you want to override. So as a good starting point, add the following to your demo.yaml file

# this will be the root domain name hence your OpenCore url will now be http://demo.mydomain.com 
domainsuffix: mydomain.com # this will be added to all domain names
domain: demo 
# if using a reverse procy that add ssl, uncomment below line.
# protocol: https
OpenCore:
#  external_mongodb_url: mongodb+srv://user:pass@cluster0.gcp.mongodb.net?retryWrites=true&w=majority
rabbitmq:
  default_pass: supersecret
# if you are using mpongodb atlas, or has mongodb running somewhere else
# uncomment below line, and external_mongodb_url in OpenCore above
# mongodb:
#   enabled: false

So first we need to create a namespace. Namespaces allow us to segregate multiple installations from each other, and ensure they run completely independently of each other.

kubectl create namespace demo

and now we can create our first OpenCore installation inside that namespace

helm install openflow openiap/openflow -n demo --values ./demo.yaml

If you update the demo.yaml values file, you can update the installation with

helm upgrade openflow openiap/openflow -n demo --values ./demo.yaml

For more help and guides, check out my youtube channel, here is a few more about kubernetes Utilizing multiple node pools

Distributing workloads with nodepools

After install, this will help you getting started with monitoring (premium OpenCore only!)

Configurering Reporting and Monitoring

Performance tuning and/or troubleshooting workflows or the platform (premium OpenCore only!)

Collecting spans and custom metrics