Expanded timeouts¶
In this tutorial you'll learn how to expand the default timeouts of OpenFaaS to run your functions for longer.
Part 1 - the core components¶
When running OpenFaaS on Kubernetes, you need to set various timeout values for the distributed components of the OpenFaaS control plane. These options are explained in the helm chart README. The easiest option for new users is to set them all to the same value.
For faasd users, you'll need to edit the equivalent fields in your
docker-compose.yaml
file, see the eBook Serverless For Everyone Else.
We will set:
gateway.upstreamTimeout
gateway.writeTimeout
gateway.readTimeout
All timeouts are to be specified in Golang duration format i.e. 1m
or 60s
, or 1m30s
.
The HARD_TIMEOUT
is set 1-2s higher than the TIMEOUT
value since one needs to happen before the other.
export TIMEOUT=5m
export HARD_TIMEOUT=5m2s
arkade install openfaas \
--set gateway.upstreamTimeout=$TIMEOUT \
--set gateway.writeTimeout=$HARD_TIMEOUT \
--set gateway.readTimeout=$HARD_TIMEOUT
Once installed with these settings, you can invoke functions for up to 5m
synchronously and asynchronously.
If using Helm or Argo CD, then add the following to your values.yaml file instead:
gateway:
writeTimeout: 5m1s
readTimeout: 5m1s
upstreamTimeout: 5m
Part 2 - Your function's timeout¶
Now that OpenFaaS will allow a longer timeout, configure your function.
For the newer templates based upon HTTP which use the of-watchdog, adapt the following sample: go-long: Golang function that runs for a long time
For classic templates using the classic watchdog, you can follow the workshop: Lab 8 - Advanced feature - Timeouts
If you're unsure which template you're using, check the source code of the Dockerfile in the templates
folder when you build your functions.
Further support¶
Check the troubleshooting guide.