Installing Fission

Installation guide for Fission installation

Welcome! This guide will get you up and running with Fission on a Kubernetes cluster.

Prerequisites

First, let’s ensure you have the Kubernetes CLI and Helm installed and ready along with a Kubernetes Cluster. If you already have Helm, skip ahead to the fission install.

Kubernetes Cluster

If you don’t have a Kubernetes cluster, here’s a official guide to set one up.

Fission v1.25.0 requires Kubernetes 1.32 or higher. The Helm chart enforces this through its kubeVersion constraint and the runtime fission check floor.

Kubectl

Kubectl is a command line interface for running commands against Kubernetes clusters, visit kubectl docs to see how to install it.

Next, ensure you have access to a cluster. Do this by using kubectl to check your Kubernetes version:

kubectl version

Helm

Helm is an installer for Kubernetes. If you already use helm, skip to the next section.

If you cannot use Helm, there is an alternative installation method possible; see installing without Helm.

To install helm, first you’ll need the helm CLI. Visit here to see how to install it.

Fission is installed with Helm v3. If you already have Helm v3, skip ahead to Install Fission.

Install Fission

Fission supports the arm64 and amd64 architectures only. Support for armv7 was removed in the 1.20.3 release.

With Helm

The fission-core chart was removed in the 1.15 release; use the fission-all chart instead. See the 1.15 release notes for details, and the Upgrade Guide if you are upgrading.
Since the 1.18 release, Fission watches functions created in the defaultNamespace Helm chart value. To watch additional namespaces, list them in the additionalFissionNamespaces Helm chart value. See the 1.18 release notes for details.
The builderNamespace and functionNamespace parameters are deprecated and will be removed in a future Fission release.

serviceType and routerServiceType can be NodePort or LoadBalancer for external access to Fission in the steps below. Use ClusterIP if you only need to reach Fission from within the cluster.

See Customizing the Chart Before Installing. To list all configurable options with detailed comments:

helm show values fission-charts/fission-all

See Fission on ArtifactHub for the supported chart values.

See how to add token to kubeconfig if you’re not able to connect to cluster.

export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
helm repo add fission-charts https://fission.github.io/fission-charts/
helm repo update
helm install --version 1.25.0 --namespace $FISSION_NAMESPACE fission fission-charts/fission-all
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
helm repo add fission-charts https://fission.github.io/fission-charts/
helm repo update
helm install --version 1.25.0 --namespace $FISSION_NAMESPACE fission \
  --set serviceType=NodePort,routerServiceType=NodePort \
  fission-charts/fission-all
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
helm repo add fission-charts https://fission.github.io/fission-charts/
helm repo update
helm install --version 1.25.0 --namespace $FISSION_NAMESPACE fission \
  --set serviceType=NodePort,routerServiceType=NodePort,logger.enableSecurityContext=true \
  fission-charts/fission-all
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
helm repo add fission-charts https://fission.github.io/fission-charts/
helm repo update
helm install --version 1.25.0 --namespace $FISSION_NAMESPACE fission \
    --set logger.enableSecurityContext=true \
    fission-charts/fission-all

Without helm

This method uses kubectl apply to install Fission. You can edit the YAML file before applying it to your cluster, if you want to change anything in it.

‘fission’ is the recommended namespace to install fission. If you want to install in another namespace, please consider to use helm or generate yaml for first with helm template command.

Choose one of the following commands to run:

kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl config set-context --current --namespace=$FISSION_NAMESPACE
kubectl apply -f https://github.com/fission/fission/releases/download/v1.25.0/fission-all-v1.25.0.yaml
kubectl config set-context --current --namespace=default #to change context to default namespace after installation
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl config set-context --current --namespace=$FISSION_NAMESPACE
kubectl apply -f https://github.com/fission/fission/releases/download/v1.25.0/fission-all-v1.25.0-minikube.yaml
kubectl config set-context --current --namespace=default #to change context to default namespace after installation
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.25.0"
export FISSION_NAMESPACE="fission"
kubectl create namespace $FISSION_NAMESPACE
kubectl config set-context --current --namespace=$FISSION_NAMESPACE
kubectl apply -f https://github.com/fission/fission/releases/download/v1.25.0/fission-all-v1.25.0-openshift.yaml
kubectl config set-context --current --namespace=default #to change context to default namespace after installation

Install Fission CLI

Fission CLI helps you to operate Fission. Checkout Fission CLI reference for more.

Pick the asset that matches your CPU architecture: use arm64 on Apple Silicon Macs and ARM Linux, amd64 on Intel/AMD.
# Apple Silicon (M1/M2/M3)
curl -Lo fission https://github.com/fission/fission/releases/download/v1.25.0/fission-v1.25.0-darwin-arm64 \
    && chmod +x fission && sudo mv fission /usr/local/bin/

# Intel
curl -Lo fission https://github.com/fission/fission/releases/download/v1.25.0/fission-v1.25.0-darwin-amd64 \
    && chmod +x fission && sudo mv fission /usr/local/bin/
# amd64
curl -Lo fission https://github.com/fission/fission/releases/download/v1.25.0/fission-v1.25.0-linux-amd64 \
    && chmod +x fission && sudo mv fission /usr/local/bin/

# arm64
curl -Lo fission https://github.com/fission/fission/releases/download/v1.25.0/fission-v1.25.0-linux-arm64 \
    && chmod +x fission && sudo mv fission /usr/local/bin/
nix-env -iA nixos.fission
For Windows, you can use the linux binary on WSL. Or you can download this windows executable: fission.exe

Verify fission installation

Once you are done with fission installation, run these commands to make sure fission is installed successfully and all core components of fission are working properly.

To check fission is installed successfully, run this command and verify both client and server version should be same.

$ fission version
client:
  fission/core:
    BuildDate: "2024-09-02T09:32:57Z"
    GitCommit: cf55fbec
    Version: v1.25.0
server:
  fission/core:
    BuildDate: "2024-09-02T09:32:57Z"
    GitCommit: cf55fbec
    Version: v1.25.0

To check fission core components are working properly, run this command.

$ fission check
fission-services
--------------------
√ executor is running fine
√ router is running fine
√ storagesvc is running fine
√ webhook is running fine

fission-version
--------------------
√ fission is up-to-date

If you have enabled authentication while installing fission, mentioned above commands won’t show proper result. You need to generate token to make it work.

See How to generate auth token, if authentication is enabled.

Run an example

Finally, you’re ready to use Fission!

It might take one or two mintues for fission to start running. check the status using kubectl get pods -n fission.

Ensure that functions are created within the specified namespaces: either the defaultNamespace or any listed in additionalFissionNamespaces from the Helm chart values.

To verify the namespaces the executor is monitoring, inspect the FISSION_RESOURCE_NAMESPACES environment variable using the following command: kubectl get deployment executor -n fission -o yaml | grep -A 2 FISSION

You can pass --namespace or -n flag to fission CLI to specify the namespace for the function or environment.
# Add the stock NodeJS env to your Fission deployment
$ fission env create --name nodejs --image ghcr.io/fission/node-env

# A javascript function that prints "hello world"
$ curl -LO https://raw.githubusercontent.com/fission/examples/main/nodejs/hello.js

# Upload your function code to fission
$ fission function create --name hello-js --env nodejs --code hello.js

# Test your function.  This takes about 100msec the first time.
$ fission function test --name hello-js
Hello, world!
# Add the stock Python env to your Fission deployment
$ fission env create --name python --image ghcr.io/fission/python-env

# A Python function that prints "hello world"
$ curl -LO https://raw.githubusercontent.com/fission/examples/main/python/hello.py

# Upload your function code to fission
$ fission function create --name hello-py --env python --code hello.py

# Test your function.  This takes about 100msec the first time.
$ fission function test --name hello-py
Hello, world!
# Add the stock Go env to your Fission deployment
$ fission env create --name go --image ghcr.io/fission/go-env --builder ghcr.io/fission/go-builder

# A Go function that prints "hello world"
$ curl -LO https://raw.githubusercontent.com/fission/examples/main/go/hello-world/hello.go

# Upload your function code to fission
$ fission function create --name hello-go --env go --src hello.go --entrypoint Handler

# Wait for your source code to be built, package status should be succeeded. This may take a few minutes.
$ fission pkg list | grep hello-go
hello-go-8bb933b5-b12b-499b-a951-ee2245c8f1b5 succeeded    go     23 Nov 21 10:55 IST

# Test your function. This takes about 100msec the first time.
$ fission function test --name hello-go
Hello, world!
# Add the stock Java env to your Fission deployment
$ fission environment create --name java --image ghcr.io/fission/jvm-env --builder ghcr.io/fission/jvm-builder --keeparchive --version 3

# A Java function that prints "hello world"
$ mkdir -p src/main/java/io/fission/
$ curl -L https://raw.githubusercontent.com/fission/examples/main/java/hello-world/src/main/java/io/fission/HelloWorld.java \
  -o src/main/java/io/fission/HelloWorld.java
# pom.xml contains dependencies for the function.
$ curl -LO https://raw.githubusercontent.com/fission/environments/master/jvm/examples/java/pom.xml

# Upload your function code to fission via zip
$ zip java-src-pkg.zip -r src/ pom.xml
$ fission package create --name hello-pkg --env java --src java-src-pkg.zip
Package 'hello-pkg' created

# Wait for your source code to be built, package status should be succeeded. This may take a few minutes.
$ fission pkg list | grep hello-pkg
hello-pkg                                     succeeded    java   23 Nov 21 11:19 IST

# Test your function. This takes about 100msec the first time.
$ fission function create --name hello-java --env java --pkg hello-pkg --entrypoint io.fission.HelloWorld
$ fission function test --name hello-java
Hello World!

For more language tutorials, visit Language.

What’s next?

If something went wrong, we’d love to help – please drop by the Fission slack and ask for help.

Check out the examples for some example functions.


Environment Variables

Environment variables used by Fission CLI

Offline On-Premise

Installation guide for offline on-premise.

Docker Desktop

Docker Desktop specific setup

OpenShift

OpenShift specific setup

Authentication

Guide to set up basic authentication with Fission

Internal Service Authentication

HMAC-signed authentication for Fission’s internal control-plane RPCs

Advanced Setup

Advanced setup guide for Fission installation

Upgrade Guide

Upgrade guidance 1.13 onwards

Compatibility

Kubernetes and KEDA versions supported by each Fission release

Uninstalling Fission

Uninstallation guide for Fission