faas/guide/deployment_k8s.md
HeroC c118e691f8 flag should be '-g' or '--gateway'
Signed-off-by: cc <herochinese.cc@gmail.com>
2018-02-22 11:40:15 +00:00

6.6 KiB

Deployment guide for Kubernetes

Note: The best place to start is the README file in the faas or faas-netes repo.

This guide is for deployment to a vanilla Kubernetes 1.8 cluster running on Linux hosts. It is not a hand-book, please see the set of guides and blogs posts available at openfaas/guide.

A foreword on security

These instructions are for a development environment. If you plan to expose OpenFaaS on the public Internet you need to enable basic authentication with a proxy such as Kong or Traefik at a minimum. TLS is also highly recomended and freely available with LetsEncrypt.org. Kong guide Traefik guide.

Kubernetes

OpenFaaS is Kubernetes-native and uses Deployments, Services and Secrets. For more detail check out the "faas-netes" repository.

For deploying on a cloud that supports Kubernetes LoadBalancers you may also want to apply the configuration in: cloud/lb.yml.

1.0 Build a cluster

You can start evaluating FaaS and building functions on your laptop or on a VM (cloud or on-prem).

Additional information on setting up Kubernetes.

We have a special guide for minikube here:

1.1 Pick helm or YAML files for deployment

If you'd like to use helm follow the instructions in 2.0a and then come back here, otherwise follow 2.0b to use plain kubectl.

2.0a Deploy with Helm

A Helm chart is provided faas-netes repository. Follow the link below then come back to this guide.

2.0b Deploy OpenFaaS

This step assumes you are running kubectl on a master host.

  • Clone the code
$ git clone https://github.com/openfaas/faas-netes

Deploy a stack with asynchronous functionality provided by NATS Streaming.

  • Deploy the whole stack

This command is split into two parts so that the OpenFaaS namespaces are always created first:

  • openfaas - for OpenFaaS services
  • openfaas-fn - for functions
$ cd faas-netes && \
 kubectl apply -f ./namespaces.yml,./yaml

Note: RBAC is optional but encouraged and enabled by default.

Asynchronous invocation works by queuing requests with NATS Streaming. An alternative implementation is available with Kafka in an open PR.

3.0 Use OpenFaaS

After deploying OpenFaaS you can start using one of the guides or blog posts to create Serverless functions or test community functions.

You can also watch a complete walk-through of OpenFaaS on Kubernetes which demonstrates auto-scaling in action and how to use the Prometheus UI. Video walk-through.

Connect to the UI

For simplicity the default configuration uses NodePorts rather than an IngressController (which is more complicated to setup).

Service TCP port
API Gateway / UI 31112
Prometheus 31119

If you're an advanced Kubernetes user, you can add an IngressController to your stack and remove the NodePort assignments.

  • Deploy a sample function

There are currently no sample functions built into this stack, but we can deploy them quickly via the UI or FaaS-CLI.

Use the CLI

  • Install the CLI
$ curl -sL https://cli.openfaas.com | sudo sh

If you like you can also run the script via a non-root user. Then the faas-cli binary is downloaded to the current working directory instead.

  • Then clone some samples to deploy on your cluster.
$ git clone https://github.com/openfaas/faas-cli

Edit samples.yml and change your gateway URL from localhost:8080 to kubernetes-node-ip:31112 or pass the --gateway / -g flag to commands.

i.e.

provider:  
  name: faas
  gateway: http://192.168.4.95:31112

Now deploy the samples:

$ faas-cli deploy -f samples.yml

The faas-cli also supports an override of --gateway http://... for example:

$ faas-cli deploy -f samples.yml --gateway http://127.0.0.1:31112

List the functions:

$ faas-cli list -f samples.yml

or

$ faas-cli list  -g http://127.0.0.1:31112
Function                      	Invocations    	Replicas
inception                     	0              	1    
nodejs-echo                   	0              	1    
ruby-echo                     	0              	1    
shrink-image                  	0              	1    
stronghash                    	2              	1

Invoke a function:

$ echo -n "Test" | faas-cli invoke stronghash -g http://127.0.0.1:31112
c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31  -
  • Learn about the CLI

Morning coffee with the OpenFaaS CLI

  • Build your first Python function

Your first serverless Python function with OpenFaaS

Use the UI

The UI is exposed on NodePort 31112.

Click "New Function" and fill it out with the following:

Field Value
Service nodeinfo
Image functions/nodeinfo:latest
fProcess node main.js
Network default
  • Test the function

Your function will appear after a few seconds and you can click "Invoke"

The function can also be invoked through the CLI:

$ echo -n "" | faas-cli invoke --gateway http://kubernetes-ip:31112 nodeinfo
$ echo -n "verbose" | faas-cli invoke --gateway http://kubernetes-ip:31112 nodeinfo

Troubleshooting

If you are running into any issues please check out the troubleshooting guide and search the documentation / past issues before raising an issue.