diff --git a/Compiling.md b/Compiling.md new file mode 100644 index 00000000..d5ca00bf --- /dev/null +++ b/Compiling.md @@ -0,0 +1,55 @@ +Compiling Fission +================= + +[You only need to do this if you're making Fission changes; if you're +just deploying Fission, use fission.yaml which points to prebuilt +images.] + +You'll need the `go` compiler and tools installed, along with the +[glide dependency management +tool](https://github.com/Masterminds/glide#install). You'll also need +docker for building images. + +The server side is compiled as one binary ("fission-bundle") which +contains controller, poolmgr and router; it invokes the right one +based on command-line arguments. + +To build fission-bundle: clone this repo to +`$GOPATH/src/github.com/fission/fission`, then from the top level +directory (if you want to build the image with the docker inside +minikube, you'll need to set the proper environment variables with +`eval $(minikube docker-env)`): + +``` + # Get dependencies + $ glide install + + # Build fission server and an image + $ pushd fission-bundle + $ ./build.sh +``` + +You now need to build the docker image for fission. You can use +`push.sh` and push it to a docker hub account. But it's easiest to use +minikube and its built-in docker daemon: + +``` + $ eval $(minikube docker-env) + $ docker build -t minikube/fission-bundle . +``` + +Next, install fission on your kubernetes cluster: + +``` + # To install, update fission.yaml to point to the image you just made: "minikube/fission-bundle" + $ $EDITOR fission.yaml + $ kubectl create -f fission.yaml + $ kubectl create -f fission-nodeport.yaml +``` + +And if you're changing the CLI too, you can build it with: + +``` + # Build Fission CLI + $ cd fission && go install +``` diff --git a/INSTALL.md b/INSTALL.md index 7acdbd15..c100e790 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,14 +1,18 @@ - * [Running Fission on your Cluster](#running-fission-on-your-cluster) - * [Setup Kubernetes](#setup-kubernetes) - * [Mac](#install-and-start-kubernetes-on-osx) - * [Linux](#or-install-and-start-kubernetes-on-linux) - * [Verify access to the cluster](#verify-access-to-the-cluster) - * [Get and Run Fission: Minikube or Local cluster](#get-and-run-fission-minikube-or-local-cluster) - * [Get and Run Fission: GKE or other Cloud](#get-and-run-fission-gke-or-other-cloud) - * [Install the client CLI](#install-the-client-cli) - * [Run an example](#run-an-example) - * [Enable Persistent Function Logs (Optional)](#enable-persistent-function-logs-optional) - * [Use the web based Fission-ui (Optional)](#use-the-web-based-fission-ui-optional) + +- [Running Fission on your Cluster](#running-fission-on-your-cluster) + * [Setup Kubernetes](#setup-kubernetes) + + [Install and start Kubernetes on OSX:](#install-and-start-kubernetes-on-osx) + + [Or, install and start Kubernetes on Linux:](#or-install-and-start-kubernetes-on-linux) + * [Verify access to the cluster](#verify-access-to-the-cluster) + * [Get and Run Fission: Minikube or Local cluster](#get-and-run-fission-minikube-or-local-cluster) + * [Get and Run Fission: GKE or other Cloud](#get-and-run-fission-gke-or-other-cloud) + * [Get and Run Fission: OpenShift](#get-and-run-fission-openshift) + + [Using Minishift or Local Cluster](#using-minishift-or-local-cluster) + + [Using other clouds](#using-other-clouds) + * [Install the client CLI](#install-the-client-cli) + * [Run an example](#run-an-example) + * [Enable Persistent Function Logs (Optional)](#enable-persistent-function-logs-optional) + * [Use the web based Fission-ui (Optional)](#use-the-web-based-fission-ui-optional)⏎ ## Running Fission on your Cluster @@ -45,8 +49,8 @@ set up services with NodePort. This exposes fission on ports 31313 and 31314. ``` - $ kubectl create -f http://fission.io/fission.yaml - $ kubectl create -f http://fission.io/fission-nodeport.yaml + $ kubectl create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-rbac.yaml + $ kubectl create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-nodeport.yaml ``` Set the FISSION_URL and FISSION_ROUTER environment variables. @@ -68,8 +72,8 @@ If you're using GKE or any other cloud provider that supports the LoadBalancer service type, use these commands: ``` - $ kubectl create -f http://fission.io/fission.yaml - $ kubectl create -f http://fission.io/fission-cloud.yaml + $ kubectl create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-rbac.yaml + $ kubectl create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-cloud.yaml ``` Save the external IP addresses of controller and router services in @@ -84,8 +88,11 @@ svc```). Then: ### Get and Run Fission: OpenShift -If you're using OpenShift, it's possible to run Fission on it! The deployment -template needs to be deployed as a user with cluster-admin permissions (like `system:admin`), as it needs to create a `ClusterRole` for deploying function containers from the `fission` namespace/project. +If you're using OpenShift, it's possible to run Fission on it! The +deployment template needs to be deployed as a user with cluster-admin +permissions (like `system:admin`), as it needs to create a +`ClusterRole` for deploying function containers from the `fission` +namespace/project. Identically as with Kubernetes, you need to set the FISSION_URL and FISSION_ROUTER environment variables. If you're using minishift, use these commands: @@ -93,21 +100,44 @@ Identically as with Kubernetes, you need to set the FISSION_URL and FISSION_ROUT $ export FISSION_URL=http://$(minishift ip):31313¬ $ export FISSION_ROUTER=$(minishift ip):31314¬ ``` +#### Using Minishift or Local Cluster + +If you're using minishift or no cloud provider, use these commands to set up services with NodePort. This exposes fission on ports 31313 and 31314. + +``` + $ oc login -u system:admin + $ oc create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-openshift.yaml + $ oc create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-nodeport.yaml +``` + +#### Using other clouds + +If you're using any cloud provider that supports the LoadBalancer service type, use these commands: + +``` +$ oc login -u system:admin +$ oc create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-openshift.yaml +$ oc create -f https://github.com/fission/fission/releases/download/nightly20170621/fission-cloud.yaml +``` +After these steps, you should be able to run fission client as with kubernetes. ### Install the client CLI Get the CLI binary for Mac: ``` - $ curl http://fission.io/mac/fission > fission && chmod +x fission && sudo mv fission /usr/local/bin/ + $ curl https://github.com/fission/fission/releases/download/nightly20170621/fission-cli-osx > fission && chmod +x fission && sudo mv fission /usr/local/bin/ ``` Or Linux: ``` - $ curl http://fission.io/linux/fission > fission && chmod +x fission && sudo mv fission /usr/local/bin/ + $ curl https://github.com/fission/fission/releases/download/nightly20170621/fission-cli-linux > fission && chmod +x fission && sudo mv fission /usr/local/bin/ ``` +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/nightly20170621/fission-cli-windows.exe) + ### Run an example Finally, you're ready to use Fission! @@ -159,7 +189,7 @@ It allows users to observe and manage fission. It also provides a simple online To setup Fission-ui with fission in k8s is simple: ```bash - # After Fission deployed + # Run this after fission is deployed $ kubectl create -f https://raw.githubusercontent.com/fission/fission-ui/master/docker/fission-ui.yaml ``` diff --git a/README.md b/README.md index f1c40291..d5c18023 100644 --- a/README.md +++ b/README.md @@ -81,187 +81,12 @@ See the [examples](examples) directory for more. Running Fission on your Cluster =============================== -### Setup Kubernetes - -You can install Kubernetes on your laptop with [minikube](https://github.com/kubernetes/minikube): - -#### Install and start Kubernetes on OSX: -```bash - $ 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: -```bash - $ 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 -``` - -Or, you can use [Google Container Engine's](https://cloud.google.com/container-engine/) free trial to get a 3 node cluster. - -### Verify access to the cluster - -``` - $ kubectl version -``` - -### Get and Run Fission: Minikube or Local cluster - -If you're using minikube or no cloud provider, use these commands to -set up services with NodePort. This exposes fission on ports 31313 -and 31314. - -``` - $ kubectl create -f http://fission.io/fission.yaml - $ kubectl create -f http://fission.io/fission-nodeport.yaml -``` - -Set the FISSION_URL and FISSION_ROUTER environment variables. -FISSION_URL is used by the fission CLI to find the server. -FISSION_URL should be prefixed with a `http://`. (FISSION_ROUTER is -only needed for the examples below to work.) - -If you're using minikube, use these commands: - -``` - $ export FISSION_URL=http://$(minikube ip):31313 - $ export FISSION_ROUTER=$(minikube ip):31314 -``` - - -### Get and Run Fission: GKE or other Cloud - -If you're using GKE or any other cloud provider that supports the -LoadBalancer service type, use these commands: - -``` - $ kubectl create -f http://fission.io/fission.yaml - $ kubectl create -f http://fission.io/fission-cloud.yaml -``` - -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: - -``` - $ 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}') -``` -### Get and run fission: OpenShift - -If you're using OpenShift, it's possible to run Fission on it! The deployment -template needs to be deployed as a user with cluster-admin permissions (like `system:admin`), as it needs to create a `ClusterRole` for deploying function containers from the `fission` namespace/project. - -Identically as with Kubernetes, you need to set the FISSION_URL and FISSION_ROUTER environment variables. If you're using minishift, use these commands: - -``` - $ export FISSION_URL=http://$(minishift ip):31313¬ - $ export FISSION_ROUTER=$(minishift ip):31314¬ -``` - -#### Using Minishift or Local Cluster - -If you're using minishift or no cloud provider, use these commands to set up services with NodePort. This exposes fission on ports 31313 and 31314. - -``` - $ oc login -u system:admin - $ oc create -f http://fission.io/fission-openshift.yaml - $ oc create -f http://fission.io/fission-nodeport.yaml -``` - -#### Using other clouds -If you're using any cloud provider that supports the LoadBalancer service type, use these commands: - -``` -$ oc login -u system:admin -$ oc create -f http://fission.io/fission-openshift.yaml -$ oc create -f http://fission.io/fission-cloud.yaml -``` -After these steps, you should be able to run fission client as with kubernetes. - -### Install the client CLI - -Get the CLI binary for Mac: - -``` - $ curl http://fission.io/mac/fission > fission && chmod +x fission && sudo mv fission /usr/local/bin/ -``` - -Or Linux: - -``` - $ curl http://fission.io/linux/fission > fission && chmod +x fission && sudo mv fission /usr/local/bin/ -``` - -### Run an example - -Finally, you're ready to use Fission! - -``` - $ fission env create --name nodejs --image fission/node-env - - $ curl https://raw.githubusercontent.com/fission/fission/master/examples/nodejs/hello.js > 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! -``` - -You can also set up persistence for logs: [instructions here](INSTALL.md). - +See the [installation guide](INSTALL.md). Compiling Fission ================= -[You only need to do this if you're making Fission changes; if you're -just deploying Fission, use fission.yaml which points to prebuilt -images.] - -You'll need go installed, along with the [glide dependency management -tool](https://github.com/Masterminds/glide#install). -You'll also need docker for building images. - -The server side is compiled as one binary ("fission-bundle") which -contains controller, poolmgr and router; it invokes the right one -based on command-line arguments. - -To build fission-bundle: clone this repo to -`$GOPATH/src/github.com/fission/fission`, then from the top level -directory (if you want to build the image with the docker inside -minikube, you'll need to set the proper environment variables with -`eval $(minikube docker-env)`): - -``` - # Get dependencies - $ glide install - - # Build fission server and an image - $ pushd fission-bundle - $ ./build.sh - - # Edit push.sh to point to your registry, or comment out the `docker push` - # line if building into your local minikube for dev purposes - $ $EDITOR push.sh - $ ./push.sh - $ popd - - # To install, update fission.yaml to point to your compiled image - $ $EDITOR fission.yaml - $ kubectl create -f fission.yaml -``` - -If you're changing the CLI: - -``` - # Build Fission CLI - $ cd fission && go install -``` +See the [compilation guide](Compiling.md). Status ======