Documentation Revamp (#496)

Added a new documentation structure with details of concepts, tutorials and examples
This commit is contained in:
Vishal
2018-02-28 11:46:44 +05:30
committed by GitHub
parent 5e2f984136
commit 1b1c4f1380
25 changed files with 925 additions and 192 deletions
@@ -1,181 +1,10 @@
---
title: "Installation Guide"
date: 2017-09-07T20:10:05-07:00
draft: false
weight: 20
chapter : true
---
Welcome! This guide will get you up and running with Fission on a
Kubernetes cluster.
### Cluster preliminaries
If you don't have a Kubernetes cluster, [here's a quick guide to set
one up](../kubernetessetup).
Let's ensure you have the Kubernetes CLI and Helm installed and
ready. If you already have helm, [skip ahead to the fission install](#install-fission).
#### Kubernetes CLI
Ensure you have the Kubernetes CLI.
You can get the Kubernetes CLI for OSX like this:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
```
Or, for Linux:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
```
Ensure you have access to a cluster; use kubectl to check your
Kubernetes version:
```
$ kubectl version
```
We need at least Kubernetes 1.6 (older versions may work, but we don't
test them).
#### Helm
Helm is an installer for Kubernetes. If you already use helm, [skip to
the next section](#install-fission).
First, you'll need the helm CLI:
On __OS X__:
```
$ curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-darwin-amd64.tar.gz
$ tar xzf helm-v2.7.0-darwin-amd64.tar.gz
$ mv darwin-amd64/helm /usr/local/bin
```
On __Linux__:
```
$ curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-linux-amd64.tar.gz
$ tar xzf helm-v2.7.0-linux-amd64.tar.gz
$ mv linux-amd64/helm /usr/local/bin
```
Next, install the Helm server on your Kubernetes cluster:
```
$ helm init
```
### Install Fission
#### Minikube
```
$ helm install --namespace fission --set serviceType=NodePort https://github.com/fission/fission/releases/download/0.5.0/fission-all-0.5.0.tgz
```
The serviceType variable allows configuring the type of Kubernetes
service outside the cluster. You can use `ClusterIP` if you don't
want to expose anything outside the cluster.
#### Cloud hosted clusters (GKE, AWS, Azure etc.)
```
$ helm install --namespace fission https://github.com/fission/fission/releases/download/0.5.0/fission-all-0.5.0.tgz
```
#### Minimal version
The fission-all helm chart installs a full set of services including
the NATS message queue, influxDB for logs, etc. If you want a more
minimal setup, you can install the fission-core chart instead:
```
$ helm install --namespace fission https://github.com/fission/fission/releases/download/0.5.0/fission-core-0.5.0.tgz
```
### Install the Fission CLI
#### OS X
Get the CLI binary for Mac:
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-osx && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Linux
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-linux && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Windows
For Windows, you can use the linux binary on WSL. Or you can download
this windows executable: [fission.exe](https://github.com/fission/fission/releases/download/0.5.0/fission-cli-windows.exe)
### Set environment vars
Set the FISSION_URL and FISSION_ROUTER environment variables.
FISSION_URL is used by the fission CLI to find the server.
(FISSION_ROUTER is only needed for the examples below to work.)
#### Minikube
If you're using minikube, use these commands:
```
$ export FISSION_URL=http://$(minikube ip):31313
$ export FISSION_ROUTER=$(minikube ip):31314
```
#### Cloud setups
Save the external IP addresses of controller and router services in
FISSION_URL and FISSION_ROUTER, respectively. Wait for services to
get IP addresses (check this with ```kubectl --namespace fission get
svc```). Then:
##### AWS
```
$ export FISSION_URL=http://$(kubectl --namespace fission get svc controller -o=jsonpath='{..hostname}')
$ export FISSION_ROUTER=$(kubectl --namespace fission get svc router -o=jsonpath='{..hostname}')
```
##### GCP
```
$ export FISSION_URL=http://$(kubectl --namespace fission get svc controller -o=jsonpath='{..ip}')
$ export FISSION_ROUTER=$(kubectl --namespace fission get svc router -o=jsonpath='{..ip}')
```
### Run an example
Finally, you're ready to use Fission!
```
$ fission env create --name nodejs --image fission/node-env:0.5.0
$ curl -LO https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js
$ fission function create --name hello --env nodejs --code hello.js
$ fission route create --method GET --url /hello --function hello
$ curl http://$FISSION_ROUTER/hello
Hello, world!
```
### What's next?
If something went wrong, we'd love to help -- please [drop by the
slack channel](http://slack.fission.io) and ask for help.
Check out the
[examples](https://github.com/fission/fission/tree/master/examples)
for some example functions.
# Installation
### Installing and upgrading Fission
@@ -0,0 +1,179 @@
---
title: "Installation Guide"
draft: false
weight: 20
---
Welcome! This guide will get you up and running with Fission on a
Kubernetes cluster.
### Cluster preliminaries
If you don't have a Kubernetes cluster, [here's a quick guide to set
one up](../kubernetessetup).
Let's ensure you have the Kubernetes CLI and Helm installed and
ready. If you already have helm, [skip ahead to the fission install](#install-fission).
#### Kubernetes CLI
Ensure you have the Kubernetes CLI.
You can get the Kubernetes CLI for OSX like this:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
```
Or, for Linux:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
```
Ensure you have access to a cluster; use kubectl to check your
Kubernetes version:
```
$ kubectl version
```
We need at least Kubernetes 1.6 (older versions may work, but we don't
test them).
#### Helm
Helm is an installer for Kubernetes. If you already use helm, [skip to
the next section](#install-fission).
First, you'll need the helm CLI:
On __OS X__:
```
$ curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-darwin-amd64.tar.gz
$ tar xzf helm-v2.7.0-darwin-amd64.tar.gz
$ mv darwin-amd64/helm /usr/local/bin
```
On __Linux__:
```
$ curl -LO https://storage.googleapis.com/kubernetes-helm/helm-v2.7.0-linux-amd64.tar.gz
$ tar xzf helm-v2.7.0-linux-amd64.tar.gz
$ mv linux-amd64/helm /usr/local/bin
```
Next, install the Helm server on your Kubernetes cluster:
```
$ helm init
```
### Install Fission
#### Minikube
```
$ helm install --namespace fission --set serviceType=NodePort https://github.com/fission/fission/releases/download/0.5.0/fission-all-0.5.0.tgz
```
The serviceType variable allows configuring the type of Kubernetes
service outside the cluster. You can use `ClusterIP` if you don't
want to expose anything outside the cluster.
#### Cloud hosted clusters (GKE, AWS, Azure etc.)
```
$ helm install --namespace fission https://github.com/fission/fission/releases/download/0.5.0/fission-all-0.5.0.tgz
```
#### Minimal version
The fission-all helm chart installs a full set of services including
the NATS message queue, influxDB for logs, etc. If you want a more
minimal setup, you can install the fission-core chart instead:
```
$ helm install --namespace fission https://github.com/fission/fission/releases/download/0.5.0/fission-core-0.5.0.tgz
```
### Install the Fission CLI
#### OS X
Get the CLI binary for Mac:
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-osx && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Linux
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-linux && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Windows
For Windows, you can use the linux binary on WSL. Or you can download
this windows executable: [fission.exe](https://github.com/fission/fission/releases/download/0.5.0/fission-cli-windows.exe)
### Set environment vars
Set the FISSION_URL and FISSION_ROUTER environment variables.
FISSION_URL is used by the fission CLI to find the server.
(FISSION_ROUTER is only needed for the examples below to work.)
#### Minikube
If you're using minikube, use these commands:
```
$ export FISSION_URL=http://$(minikube ip):31313
$ export FISSION_ROUTER=$(minikube ip):31314
```
#### Cloud setups
Save the external IP addresses of controller and router services in
FISSION_URL and FISSION_ROUTER, respectively. Wait for services to
get IP addresses (check this with ```kubectl --namespace fission get
svc```). Then:
##### AWS
```
$ export FISSION_URL=http://$(kubectl --namespace fission get svc controller -o=jsonpath='{..hostname}')
$ export FISSION_ROUTER=$(kubectl --namespace fission get svc router -o=jsonpath='{..hostname}')
```
##### GCP
```
$ export FISSION_URL=http://$(kubectl --namespace fission get svc controller -o=jsonpath='{..ip}')
$ export FISSION_ROUTER=$(kubectl --namespace fission get svc router -o=jsonpath='{..ip}')
```
### Run an example
Finally, you're ready to use Fission!
```
$ fission env create --name nodejs --image fission/node-env:0.5.0
$ curl -LO https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js
$ fission function create --name hello --env nodejs --code hello.js
$ fission route create --method GET --url /hello --function hello
$ curl http://$FISSION_ROUTER/hello
Hello, world!
```
### What's next?
If something went wrong, we'd love to help -- please [drop by the
slack channel](http://slack.fission.io) and ask for help.
Check out the
[examples](https://github.com/fission/fission/tree/master/examples)
for some example functions.
@@ -0,0 +1,41 @@
---
title: "Kubernetes Quick Install"
draft: false
weight: 21
---
This is a quick guide to help you get started running Kubernetes on
your laptop (or on the cloud).
(This isn't meant as a production Kuberenetes guide; it's merely
intended to give you something quickly so you can try Fission on it.)
## Minikube
Minikube is the usual way to run Kubernetes on your laptop:
### Install and start Kubernetes on OSX:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.16.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ minikube start
```
### Or, install and start Kubernetes on Linux:
```
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.16.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ minikube start
```
## Google Container Engine
Alternatively, you can use [Google Container Engine's](https://cloud.google.com/container-engine/) free trial to
get a 3-node cluster. Hop over to [Google Cloud](https://cloud.google.com/container-engine/) to set that up.
@@ -0,0 +1,53 @@
---
title: "Release notes"
draft: false
weight: 22
---
- The fission team is on http://slack.fission.io if you have any questions.
### 0.4.0
- This release is compatible with Kubernetes 1.7 onwards.
- We switched from ThirdPartyResources to CustomResourceDefinitions. ThirdPartyResources are removed in Kubernetes 1.8, so upgrade with caution, using the upgrade guide below.
- Upgrade guides:
- [Upgrade guide from 0.3.0](../upgrade/upgrade-from-v0.3)
- To upgrade from 0.2.1, please upgrade to 0.3.0 first, following the upgrade guide in the 0.3.0 release.
### 0.3.0
Note: This release is incompatible with Kubernetes 1.8 (Because it uses ThirdPartyResources; see #314)
This release introduces:
- Build pipeline. Currently, only the Python environment supports this.
- Workflow engine support (compatible with fission-workflows 0.1.1)
### v0.2.1
Lots of big changes in this release!
- Most importantly, the API has changed a lot. We switched to Kubernetes
ThirdPartyResources, and improved various pieces of the API to support
new environments.
- The old API was too different from widely used Kubernetes patterns,
and so we decided to fully break compatibility for this release. We're still in
alpha, so you should expect the occasional API breakage; we'll be
better at preserving compatibility once we reach beta.
- The CLI is still compatible. Environments are also still compatible --
environment images that worked before continue to work.
- We're creating an upgrade tool to help migrate; if you're upgrading
v0.1.0 and can't do a fresh install, wait for the upgrade tool.
- We now use Helm for installation instead of a set of YAML files.
- The Fission "controller" is now stateless. Fission's etcd deployment
is removed, since Fission stores state in ThirdPartyResources. Large
function files are stored in a new function storage service, which
uses a persistent volume.
- And, we've started a new docs site; for now it's just the installation
and upgrade guides, but we'll be writing more docs soon.
@@ -0,0 +1,13 @@
---
title: "Upgrade"
weight: 30
---
### From v0.4.x to v0.5.0
* [Upgrade guide](upgrade-from-v0.4)
### From v0.3 to v0.4.x
* [Upgrade guide](upgrade-from-v0.3)
### From v0.1 to v0.2.x
* [Upgrade guide](upgrade-from-v0.1)
@@ -0,0 +1,117 @@
---
title: "Upgrading from v0.1 to v0.2.x"
draft: false
weight: 31
---
## TL;DR
The Fission API has changed significantly in this version. The new API is incompatible with the
old one. The CLI is compatible; if you wrote scripts using it, those should still work.
Below we describe a tool for migrating your state from your old install to the new one.
While this upgrade is going to be disruptive, we're going to do our best to make sure future
upgrades aren't as bad.
## Why is this so complicated?
For a couple of reasons, we wanted to switch to using Kubernetes resources (ThirdPartyResources
now, CustomResources in the next release) for storing Fission state: (a) it would allow users to
avoid management of another database and (b) Fission would fit better into the Kubernetes
ecosystem.
Concurrently with this change, we were also trying to make our versioning approach less
opinionated, so it would work with other tools.
Thirdly, we were also enabling build pipelines (v2 Environments).
These changes, especially the difference in versioning approach, made maintaining compatiblity not
worth the effort at this early stage of the project.
All that said, we want you to know that we care a lot about compatiblity, and we'll be more
rigorous about it from the beta release onwards.
## How to Upgrade
1. Get the v0.2.1 CLI
1. Get the Fission state from your old install
1. Install Fission v0.2.1
1. Restore Fission state into your new install
1. Destroy your old install
### Get the new CLI
#### OS X
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/v0.2.1-rc/fission-cli-osx && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Linux
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/v0.2.1-rc/fission-cli-linux && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Windows
For Windows, you can use the linux binary on WSL. Or you can download
this windows executable: [fission.exe](https://github.com/fission/fission/releases/download/v0.2.1-rc/fission-cli-windows.exe)
### Get Fission state from v0.1 install
```
fission --server <your V1 server> upgrade dump --file state.json
```
You can skip the --server argument if you have the environment
variable `$FISSION_URL` set to point at a v0.1 Fission server.
This will create a JSON file with all your fission state in the
current directory.
### Install the new version
Read the [install guide](../install). You can follow all of it, except that you will need to
ensure your two installs don't conflict. To do that, use separate namespaces and ensure nodeports
don't conflict. Install with a command similar to this:
```
helm install fission-all --namespace fission2 --set controllerPort=31303,routerPort=31304,natsStreamingPort=31305,functionNamespace=fission2-function
```
This installs fission in the `fission2` namespace and runs functions
in the `fission2-function` namespace.
### Restore your Fission state into Fission v0.2.1
```
fission upgrade restore --file state.json
```
This commands needs $FISSION_URL set to point to new fission installation.
It uses the file created in the first step. It doesn't modify state.json.
(Note that you can run this restore on any cluster; it doesn't have the be the same kubernetes
cluster as your old install.)
### Verify
How exactly you do this is up to you! But, at a minimum, run `fission
fn list` to check that all the functions you expect are there.
### Switch over
If you had exposed fission's router to the outside world, switch over to using the new install's router.
### Destroy your old install
Once you're no longer using the old install, you can destroy it by
deleting the namespaces that was installed in.
```
kubectl delete namespace fission fission-function
```
@@ -0,0 +1,131 @@
---
title: "Upgrading from v0.3 to v0.4.x"
draft: false
weight: 32
---
## Introduction
Kubernetes ThirdPartyResources ("TPR") are replaced by
CustomResourceDefinitions ("CRD"). TPRs have been deprecated and are
removed in Kubernetes 1.8.
Since Fission stores state in TPRs, we need to migrate this state from
TPRs to CRDs while upgrading.
Follow the instructions below if you're upgrading a Fission 0.2.1 or
0.3.0 cluster to 0.4. If you're using a pre-0.2 Fission cluster, use
the [upgrade guide from 0.1 to 0.2]() and then upgrade to 0.4.0.
## How to Upgrade
1. Get the 0.4.0 CLI
2. Get the Fission state from v0.3 install
3. Upgrade to Fission 0.4.0
4. Upgrade Kubernetes cluster version to 1.7.x or higher
5. Remove all TPR definition (for Kubernetes 1.7.x)
6. Restore Fission state into CRDs
### Get the new CLI
#### OS X
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.4.0/fission-cli-osx && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Linux
```
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.4.0/fission-cli-linux && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Windows
For Windows, you can use the linux binary on WSL. Or you can download
this windows executable: [fission.exe](https://github.com/fission/fission/releases/download/0.4.0/fission-cli-windows.exe)
### Get Fission state from v0.3 install
```
fission --server <your v0.3 server> tpr2crd dump --file state.json
```
You can skip the --server argument if you have the environment
variable `$FISSION_URL` set to point at a v0.3 Fission server.
This will create a JSON file with all your fission state in the
current directory.
### Upgrade to Fission 0.4.0
Upgrade fission with a command similar to this:
```
helm upgrade fission-all --namespace fission
```
### Upgrade Kubernetes cluster version
Since CustomResource is only supported on Kubernetes v1.7+ and higher, please make sure
that you upgrade to the right version that supports CustomResource.
### Remove all TPR definition (for Kubernetes 1.7.x)
** NOTICE **: This step will remove TPR definition from your kubernetes cluster. Please make sure that you dump all TPRs at the second step!
Though Kubernetes will migrate TPRs to CRDs automatically when TPR definition is deleted if the same name CRD exists. We still need to make sure that there is no resource gets lost during the migration. Also, since we changed the capitalization of some CRDs to CamelCase (e.g. Httptrigger -> HTTPTrigger), we need to recreate those resources by ourselves.
```
fission tpr2crd delete
```
### Restore your Fission state into Fission 0.4.0
```
fission tpr2crd restore --file state.json
```
This commands needs `$FISSION_URL` set to point to new fission installation.
It uses the file created in the first step. It doesn't modify state.json.
(Note that you can run this restore on any cluster; it doesn't have the be the same kubernetes
cluster as your old install.)
### Verify
Let's check the migration result, first run following command to check CRD established state.
```
kubectl get crd -o 'custom-columns=NAME:{.metadata.name},ESTABLISHED:{.status.conditions[?(@.type=="Established")].status}'
```
The output should be like this
```
NAME ESTABLISHED
environments.fission.io True
functions.fission.io True
httptriggers.fission.io True
kuberneteswatchtriggers.fission.io True
messagequeuetriggers.fission.io True
packages.fission.io True
timetriggers.fission.io True
```
And check that CRD resources you expect are there.
```
COMMAND:
fission [resource] list
RESOURCES:
environments
functions
httptriggers
kuberneteswatchtriggers
messagequeuetriggers
packages
timetriggers
```
@@ -0,0 +1,43 @@
---
title: "Upgrading from v0.4.x to v0.5.0"
draft: false
weight: 33
---
## How to Upgrade
1. Get the 0.5.0 CLI
2. Upgrade to Fission 0.5.0
### Get the new CLI
#### OS X
``` bash
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-osx && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Linux
``` bash
$ curl -Lo fission https://github.com/fission/fission/releases/download/0.5.0/fission-cli-linux && chmod +x fission && sudo mv fission /usr/local/bin/
```
#### Windows
For Windows, you can use the linux binary on WSL. Or you can download
this windows executable: [fission.exe](https://github.com/fission/fission/releases/download/0.5.0/fission-cli-windows.exe)
### Upgrade to Fission 0.5.0
Upgrade fission with a command similar to this:
``` bash
# find the release want to upgrade
$ helm list
# upgrade to 0.5.0
$ helm upgrade <release_name> https://github.com/fission/fission/releases/download/0.5.0/fission-all-0.5.0.tgz
```