In this post, we'll have a look at how to use OpenFaaS, an open source framework and tool that allows you to use the Function-as-a-Service (FaaS) paradigm in a containerized setup, on OpenShift. OpenFaaS is a framework for building serverless functions with Docker and Kubernetes which has first class support for metrics. Any process can be packaged as a function enabling you to consume a range of web events without repetitive boiler-plate coding.

Once you've got it up and running, you might want to check out this OpenFaaS complete walk-through on Kubernetes up on YouTube to discover it in greater detail.

Now, I've been writing and talking about FaaS—or "serverless" as we used to call it in the beginning—for a while now and follow and contribute to the development actively. As you know, OpenShift is all about choice and an excellent platform for running functions. In fact, I'm aware of multiple players in the field, that is, open source FaaS solutions that you can deploy in any environment (not managed services such as AWS Lambda, admittedly having a big head-start in this line of business). Red Hat is contributing to Apache OpenWhisk with the goal to provide first-class support for it in OpenShift. You can run kubeless on OpenShift, and while I haven't tried it myself, rumors has it that nuclio also runs well on OpenShift.

I like this diversity, especially given that it's still early days in the FaaS space and different users have different kinds of success stories to tell with one or more of the above environments.

But now, without further ado, let's get into it: How do you set up and use OpenFaaS on OpenShift?

Environment: Minishift

I've been using Minishift in version v1.10.0+10461c6 using the following configuration to set up OpenFaaS:

$ minishift start --vm-driver=virtualbox --cpus=6 --memory=4GB --logging --metrics
$ oc login -u system:admin
$ oc policy add-role-to-user cluster-admin developer
$ oc policy add-role-to-user admin developer
$ oc login `minishift console --url` -u developer -p developer

Note that it might work out with fewer CPUs and potentially less RAM allocated but because first, there are a couple of components to provision (from internal OpenFaaS components to Prometheus); and second, I want to make sure we have enough head-room for using OpenFaaS later on, I decided to go with these values (6 CPU cores and 4 GB of RAM).

OpenFaaS setup

At the time of writing, the YAML manifests necessary to deploy OpenFaaS on OpenShift live in a branch on my OpenFaaS GitHub fork so, for now, you need to get it from the openshift branch in mhausenblas/faas-netes. We're working on integrating the (minor) adaptations upstream.

To prepare the setup and have all the necessary YAML manifests at hand, do:

$ git clone https://github.com/mhausenblas/faas-netes.git
$ cd faas-netes/
$ git checkout openshift

Deployment

To set up OpenFaaS in OpenShift, we first need to create two projects, in this order (output removed here):

$ oc new-project openfaas-fn
$ oc new-project openfaas

Next, we create the faas-controller service account and set RBAC permissions for it:

$ oc create sa faas-controller
serviceaccount "faas-controller" created

$ oc policy add-role-to-user admin \
system:serviceaccount:openfaas:faas-controller \
--namespace=openfaas-fn
role "admin" added: "system:serviceaccount:openfaas:faas-controller"

Note above that we are not using rbac.yml to set up permissions.

Now it's time to deploy all the OpenFaaS components (assuming you've git cloned my repo, as shown above, and are in the root directory of the repo):

$ cd yaml/
$ oc apply -f alertmanager_config.yml,alertmanager.yml,\
faasnetesd.yml,gateway.yml,nats.yml,prometheus_config.yml,\
prometheus.yml,queueworker.yml
$ oc expose service/gateway

You can now check where the OpenFaaS UI is, either via the OpenShift dashboard like so:


or by issuing the following command:

$ oc get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
gateway gateway-openfaas.192.168.99.100.nip.io gateway 8080 None

And here's the OpenFaaS UI in action, with two functions installed and one currently being invoked:

From now on you can use OpenFaaS as you would anywhere else. Note that there are two projects (Kubernetes namespaces) used here: The openfaas one that contains all the components we deployed above, and openfaas-fn, containing the user-defined functions (in their respective containers) as shown here:

I'd like to thank the fantastic OpenFaaS community and especially Alex Ellis, the creator and mastermind behind it, for the awesome support around setting up OpenFaaS on OpenShift, patiently working with me through the challenges we encountered.


关于作者

UI_Icon-Red_Hat-Close-A-Black-RGB

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Virtualization icon

虚拟化

适用于您的本地或跨云工作负载的企业虚拟化的未来