This is the Kubernetes Operator of the Apache OpenServerless (incubating) project.
Once the operator is ready, you can build and test it against a kubernetes cluster. First, generate a new image tag with task image-tag. You can test locally using the kind cluster (provided by default by the development environment) with build-and-load.
To test it against other clusters, you need to publish it to the Apache OpenServerless private repository on Docker Hub.
To do this, add to your .env the following variables:
MY_CONTROLLER_IMAGE=<your-user>/<your-name> DOCKER_HUB_USER=<docker.hub user> DOCKER_HUB_TOKEN=<docker hub token>
To override the tag of the operator you have to generate a git tag: task image-tag. Note the tag is unique for the current hour (it embeds: YYMMDDhh).
If you set those variables you can use
task docker-login to log to the current docker.hub registrytask build-and-push to build for one single architecture (faster but limited to your architecture)task buildx-and-push to build for all the architectures (slower, used by the GitHub action)task docker-hub-authorize to upload to the current kubernetes runtime a secret to give the possibility to download the operator enterprise imageOpenServerless operator is normally deployed using a whisk.yaml configuration file which is applied via the installer. Typically, the customization file contains something like:
apiVersion: nuvolaris.org/v1
kind: Whisk
metadata:
name: controller
namespace: nuvolaris
spec:
nuvolaris:
apihost: <ip address or hostname to be assigned to nuvolaris controller ingress>
components:
# start openwhisk controller
openwhisk: true
# start couchdb
couchdb: true
# start mongodb
mongodb: true
# start redis
redis: true
# start simple internal cron
cron: true
# tls enabled or not
tls: false
# minio enabled or not
minio: true
# start kafka
kafka: true
# start openwhisk invoker
invoker: true
# zookeeper enabled or not
zookeeper: true
openwhisk:
namespaces:
whisk-system: xxxx:yyyyyy
nuvolaris: ccccc:zzzzz
couchdb:
host: couchdb
port: 5984
volume-size: 10
admin:
user: <couch_db_admin_user>
password: <couch_db_admin_pwd>
controller:
user: <couch_db_controller_user>
password: <couch_db_controller_user>
mongodb:
host: mongodb
volume-size: 10
admin:
user: <mongodb_db_admin_user>
password: <mongodb_db_admin_pwd>
nuvolaris:
user: <mongodb_db_nuvolaris_user>
password: <mongodb_db_nuvolaris_pwd>
useOperator: False
scheduler:
schedule: "* * * * *"
tls:
acme-registered-email: xxxxx@youremailserver.com
acme-server-url: https://acme-staging-v02.api.letsencrypt.org/directory
minio:
volume-size: 2
nuvolaris:
root-user: <minio_admin_user>
root-password: <minio_admin_pwd>
configs:
limits:
actions:
sequence-maxLength: 50
invokes-perMinute: 999
invokes-concurrent: 250
triggers:
fires-perMinute: 999
time:
limit-min: "100ms"
limit-std: "1min"
limit-max: "5min"
memory:
limit-min: "128m"
limit-std: "256m"
limit-max: "512m"
controller:
javaOpts: "-Xmx2048M"
invoker:
javaOpts: "-Xmx2048M"
containerPool:
userMemory: "4096m"
If the provided whisk.yaml does not specify any dynamic configuration parameters under configs item, the Enterprise operators defaults to these values:
configs.limit.actions.sequence-maxLength=50configs.limit.actions.invokes-perMinute=60configs.limit.actions.invokes-concurrent=30configs.limit.actions.triggers.fires-perMinute=60configs.limits.time.limit-min=100msconfigs.limits.time.limit-std=1minconfigs.limits.time.limit-max=5minconfigs.limits.memory.limit-min=128mconfigs.limits.memory.limit-std=256mconfigs.limits.memory.limit-max=512mconfigs.controller.javaOpts=-Xmx1024Mconfigs.controller.loggingLevel=INFOconfigs.invoker.javaOpts=-Xmx1024Mconfigs.invoker.loggingLevel=INFOconfigs.invoker.containerPool.userMemory=2048mThe enterprise operator supports hot deployment for both Openwhisk Controller & Invoker, i.e. it is possible to modify some specific part of the configuration inside the whisk.yaml file and apply it again. The operator will automatically stop and redeploy controller & invoker to take into account the new settings.
configs:
limits:
actions:
sequence-maxLength: 50
invokes-perMinute: 999
invokes-concurrent: 250
triggers:
fires-perMinute: 999
time:
limit-min: "100ms"
limit-std: "1min"
limit-max: "5min"
memory:
limit-min: "128m"
limit-std: "256m"
limit-max: "512m"
controller:
javaOpts: "-Xmx2048M"
loggingLevel: "INFO"
invoker:
javaOpts: "-Xmx2048M"
loggingLevel: "INFO"
containerPool:
userMemory: "4096m"
As an example, using the above configuration and taking into account the standard 256m memory size limit per action, gives the possibility to execute around 16 action concurrently [As a general rule consider it as the result of controller.javaOpts/256m]. To increase the number of estimated action that can be executed modify for example controller.javaOpts:"-Xmx8192M" and redeploy the modified whisk.yaml.
To apply the new customization execute:
kubectl -n nuvolaris apply -f whisk.yaml
The enterprise operator supports also the deployment of the sole controller in lean mode, by simply applying a whisk.yaml containing
apiVersion: nuvolaris.org/v1
kind: Whisk
metadata:
name: controller
namespace: nuvolaris
spec:
nuvolaris:
apihost: <ip address or hostname to be assigned to nuvolaris controller ingress>
components:
# start openwhisk controller
openwhisk: true
# start couchdb
couchdb: true
# start mongodb
mongodb: true
# start redis
redis: true
# start simple internal cron
cron: true
# tls enabled or not
tls: false
# minio enabled or not
minio: true
# start kafka
kafka: false
# start openwhisk invoker
invoker: false
# zookeeper enabled or not
zookeeper: false
...
In lean mode it is recommended to set at least configs.controller.javaOpts=-Xmx2048M