mirror of
https://github.com/openfaas/faas.git
synced 2025-06-16 21:06:54 +00:00
Adds a pair of configuration options for performance tuning. The gateway can now invoke functions directly and can bypass the provider. See updated table in README.md for configuration values. BaseURLResolver is added with unit tests that decouples resolving upstream URL from the reverse proxy client code. - SingleHostBaseURLResolver resolves a single upstream host - FunctionAsHostBaseURLResolver resolves host based upon conventions within the URL of the request to a function for direct access Tested with Kubernetes (faas-netes) and faas-swarm through UI, CLI calling system endpoints and functions directly. Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com>
275 lines
8.0 KiB
YAML
275 lines
8.0 KiB
YAML
version: "3.3"
|
||
services:
|
||
gateway:
|
||
ports:
|
||
- 8080:8080
|
||
image: functions/gateway:0.7.3
|
||
networks:
|
||
- functions
|
||
environment:
|
||
functions_provider_url: "http://faas-swarm:8080/"
|
||
read_timeout: "25s" # Maximum time to read HTTP request
|
||
write_timeout: "25s" # Maximum time to write HTTP response
|
||
upstream_timeout: "20s" # Maximum duration of upstream function call - should be more than read_timeout and write_timeout
|
||
dnsrr: "true" # Temporarily use dnsrr in place of VIP while issue persists on PWD
|
||
faas_nats_address: "nats"
|
||
faas_nats_port: 4222
|
||
direct_functions: "true" # Functions are invoked directly over the overlay network
|
||
direct_functions_suffix: ""
|
||
deploy:
|
||
resources:
|
||
# limits: # Enable if you want to limit memory usage
|
||
# memory: 200M
|
||
reservations:
|
||
memory: 100M
|
||
restart_policy:
|
||
condition: on-failure
|
||
delay: 5s
|
||
max_attempts: 20
|
||
window: 380s
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
# Docker Swarm provider
|
||
faas-swarm:
|
||
volumes:
|
||
- "/var/run/docker.sock:/var/run/docker.sock"
|
||
# ports:
|
||
# - 8081:8080
|
||
image: functions/faas-swarm:0.2.2
|
||
networks:
|
||
- functions
|
||
environment:
|
||
read_timeout: "20s" # set both here, and on your functions
|
||
write_timeout: "20s" # set both here, and on your functions
|
||
DOCKER_API_VERSION: "1.30"
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.role == manager'
|
||
- 'node.platform.os == linux'
|
||
resources:
|
||
# limits: # Enable if you want to limit memory usage
|
||
# memory: 100M
|
||
reservations:
|
||
memory: 100M
|
||
restart_policy:
|
||
condition: on-failure
|
||
delay: 5s
|
||
max_attempts: 20
|
||
window: 380s
|
||
|
||
nats:
|
||
image: nats-streaming:0.6.0
|
||
# Uncomment the following port mappings if you wish to expose the
|
||
# NATS client and/or management ports
|
||
# ports:
|
||
# - 4222:4222
|
||
# - 8222:8222
|
||
command: "--store memory --cluster_id faas-cluster"
|
||
networks:
|
||
- functions
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 125M
|
||
reservations:
|
||
memory: 50M
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
queue-worker:
|
||
image: functions/queue-worker:0.4
|
||
networks:
|
||
- functions
|
||
environment:
|
||
max_inflight: "1"
|
||
ack_timeout: "30s" # Max duration of any async task / request
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 50M
|
||
reservations:
|
||
memory: 20M
|
||
restart_policy:
|
||
condition: on-failure
|
||
delay: 5s
|
||
max_attempts: 20
|
||
window: 380s
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
# End services
|
||
|
||
# Start monitoring
|
||
|
||
prometheus:
|
||
image: prom/prometheus:v2.2.0
|
||
environment:
|
||
no_proxy: "gateway"
|
||
configs:
|
||
- source: prometheus_config
|
||
target: /etc/prometheus/prometheus.yml
|
||
- source: prometheus_rules
|
||
target: /etc/prometheus/alert.rules.yml
|
||
command:
|
||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||
# - '-storage.local.path=/prometheus'
|
||
ports:
|
||
- 9090:9090
|
||
networks:
|
||
- functions
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.role == manager'
|
||
- 'node.platform.os == linux'
|
||
resources:
|
||
limits:
|
||
memory: 500M
|
||
reservations:
|
||
memory: 200M
|
||
|
||
alertmanager:
|
||
image: prom/alertmanager:v0.15.0-rc.0
|
||
environment:
|
||
no_proxy: "gateway"
|
||
command:
|
||
- '--config.file=/alertmanager.yml'
|
||
- '--storage.path=/alertmanager'
|
||
networks:
|
||
- functions
|
||
# Uncomment the following port mapping if you wish to expose the Prometheus
|
||
# Alertmanager UI.
|
||
# ports:
|
||
# - 9093:9093
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 50M
|
||
reservations:
|
||
memory: 20M
|
||
placement:
|
||
constraints:
|
||
- 'node.role == manager'
|
||
- 'node.platform.os == linux'
|
||
configs:
|
||
- source: alertmanager_config
|
||
target: /alertmanager.yml
|
||
|
||
# Sample functions go here.
|
||
|
||
# Pass a username as an argument to find how many images user has pushed to Docker Hub.
|
||
hubstats:
|
||
image: functions/hubstats:latest
|
||
labels:
|
||
function: "true"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
# Node.js gives OS info about the node (Host)
|
||
nodeinfo:
|
||
image: functions/nodeinfo:latest
|
||
labels:
|
||
function: "true"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
|
||
# Uses `cat` to echo back response, fastest function to execute.
|
||
echoit:
|
||
image: functions/alpine:latest
|
||
labels:
|
||
function: "true"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
fprocess: "cat"
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
|
||
# Counts words in request with `wc` utility
|
||
wordcount:
|
||
image: functions/alpine:latest
|
||
labels:
|
||
function: "true"
|
||
com.faas.max_replicas: "10"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
fprocess: "wc"
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
|
||
# Calculates base64 representation of request body.
|
||
base64:
|
||
image: functions/alpine:latest
|
||
labels:
|
||
function: "true"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
fprocess: "base64"
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
# Converts body in (markdown format) -> (html)
|
||
markdown:
|
||
image: functions/markdown-render:latest
|
||
labels:
|
||
function: "true"
|
||
networks:
|
||
- functions
|
||
environment:
|
||
no_proxy: "gateway"
|
||
https_proxy: $https_proxy
|
||
deploy:
|
||
placement:
|
||
constraints:
|
||
- 'node.platform.os == linux'
|
||
|
||
configs:
|
||
prometheus_config:
|
||
file: ./prometheus/prometheus.yml
|
||
prometheus_rules:
|
||
file: ./prometheus/alert.rules.yml
|
||
alertmanager_config:
|
||
file: ./prometheus/alertmanager.yml
|
||
|
||
networks:
|
||
functions:
|
||
driver: overlay
|
||
attachable: true
|
||
labels:
|
||
- "openfaas=true"
|