Introducing Arkade - The Kubernetes app installer

arkade logo

Arkade! What is it?

Arkade (ark for short) provides a clean CLI with strongly-typed flags to install charts and apps to your cluster in one command.

It’s written in Golang and supported by Alex Ellis and the OpenFaaS Community.

I added the cert-manager, openfaas-ingress, kubernetes dashboard and docker-registry-ingress apps! Big thanks to Alex and the rest of the community for contributing all the other amazing apps.

What’s it for?

Installing apps on Kubernetes, this is a list of the currently supported apps:

$ arkade install 

You can install: 
 - openfaas
 - nginx-ingress
 - cert-manager
 - openfaas-ingress
 - inlets-operator
 - metrics-server
 - chart
 - tiller
 - linkerd
 - cron-connector
 - kafka-connector
 - minio
 - postgresql
 - kubernetes-dashboard
 - istio
 - crosspane
 - mongodb
 - docker-registry
 - docker-registry-ingress
Run arkade install NAME --help to see configuration options.

Wow! That’s a lot of apps!

Let’s take a look

The arkade cli is the easiest installation method for OpenFaaS on kubernetes. I am going to show you just how easy it is to get OpenFaaS installed and ready to work using this cli.

I have a Kubernetes cluster on Digital Ocean ready to go, with kubectl configured on my laptop and ready to go.

We could install the basic default configuration like this:

$ arkade install openfaas

However, I’m going to set an override for the Helm installation, so our functions scale down to 0 when they are idle, saving cluster resources. In the full helm command we would use --set faasIdler.dryRun=false, as you can see from the command below we just pass the same flag in. Easy as that!

$ arkade install openfaas --set faasIdler.dryRun=false

That should output the below message, showing it worked!

=======================================================================
= OpenFaaS has been installed.                                        =
=======================================================================

# Get the faas-cli
curl -SLsf https://cli.openfaas.com | sudo sh

# Forward the gateway to your machine
kubectl rollout status -n openfaas deploy/gateway
kubectl port-forward -n openfaas svc/gateway 8080:8080 &

# If basic auth is enabled, you can now log into your gateway:
PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode; echo)
echo -n $PASSWORD | faas-cli login --username admin --password-stdin

faas-cli store deploy figlet
faas-cli list

# For Raspberry Pi
faas-cli store list \
 --platform armhf

faas-cli store deploy figlet \
 --platform armhf

# Find out more at:
# https://github.com/openfaas/faas

Thanks for using arkade!

That’s a lot of app deployed in 1 small command. We now have OpenFaaS installed in our cluster, ready for us to deploy serverless functions, microservices or containers.

Note: You don’t even need to remember all that information. Arkade has a command to print the info for any app again!

$ arkade info openfaas

With 2 more commands from arkade we can setup TLS and ingress from the internet

$ arkade install cert-manager --wait
$ arkade install openfaas-ingress \
    --email example@example.com \ 
    --domain openfaas.example.com

The wait flag can be used to wait for the helm chart to install and be ready before moving on to the next command.

So now, we have OpenFaaS, cert-manager and some ingress records setup. I just set my DNS records up to point at this cluster, and we will get a LetsEncrypt TLS certificate, so our installation is now secured on the https://openfaas.example.com domain.

Now that is actually it. We have openfaas installed and secured with TLS in 3 commands, but let’s just go through an example function to validate the installation

Let’s grab the OpenFaaS Cli

$ curl -sSL https://cli.openfaas.com | sudo sh

# We need to login, so let's grab our password and login
$ export OPENFAAS_URL="https://openfaas.example.com"
$ PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode; echo)
$ echo $PASSWORD | faas-cli login --username --password-stdin

Now we can deploy an example function

$ faas-cli store deploy figlet

# And test it out with

$ echo "IT'S WORKING" | faas-cli invoke figlet

 ___ _____ _ ____   __        _____  ____  _  _____ _   _  ____ 
|_ _|_   _( ) ___|  \ \      / / _ \|  _ \| |/ /_ _| \ | |/ ___|
 | |  | | |/\___ \   \ \ /\ / / | | | |_) | ' / | ||  \| | |  _ 
 | |  | |    ___) |   \ V  V /| |_| |  _ <| . \ | || |\  | |_| |
|___| |_|   |____/     \_/\_/  \___/|_| \_\_|\_\___|_| \_|\____|

Where has it come from?

It was spun out of the k3sup codebase to allow the k3sup cli to be lean and focused on creating k3s clusters.

While the k3sup app install commands work on any kuberentes cluster, there were some people who wouldn’t even look at its functionality because they thought it was just for k3s clusters. It’s not! It installs helm charts and applications onto any kubernetes cluster using strongly typed flags and sensible defaults, while still allowing users to set the more obscure helm flags when they need to.

This new direction will allow the arkade cli to be more focused on providing cluster admins with the abstractions to let them move faster with more safety.

Get involved

Arkade is on github, so pop over and give it a star to show your support.

You can chat to the developers on the OpenFaaS slack about new features, how you can contribute and more!

Written on February 28, 2020