mirror of
https://github.com/openfaas/faasd.git
synced 2025-06-21 00:06:37 +00:00
208 lines
5.8 KiB
Markdown
208 lines
5.8 KiB
Markdown
## Manual installation of faasd for development
|
|
|
|
### Pre-reqs
|
|
|
|
* Linux
|
|
|
|
PC / Cloud - any Linux that containerd works on should be fair game, but faasd is tested with Ubuntu 18.04
|
|
|
|
For Raspberry Pi Raspbian Stretch or newer also works fine
|
|
|
|
For MacOS users try [multipass.run](https://multipass.run) or [Vagrant](https://www.vagrantup.com/)
|
|
|
|
For Windows users, install [Git Bash](https://git-scm.com/downloads) along with multipass or vagrant. You can also use WSL1 or WSL2 which provides a Linux environment.
|
|
|
|
You will also need [containerd v1.3.2](https://github.com/containerd/containerd) and the [CNI plugins v0.8.5](https://github.com/containernetworking/plugins)
|
|
|
|
[faas-cli](https://github.com/openfaas/faas-cli) is optional, but recommended.
|
|
|
|
### Get containerd
|
|
|
|
You have three options - binaries for PC, binaries for armhf, or build from source.
|
|
|
|
* Install containerd `x86_64` only
|
|
|
|
```sh
|
|
export VER=1.3.2
|
|
curl -sLSf https://github.com/containerd/containerd/releases/download/v$VER/containerd-$VER.linux-amd64.tar.gz > /tmp/containerd.tar.gz \
|
|
&& sudo tar -xvf /tmp/containerd.tar.gz -C /usr/local/bin/ --strip-components=1
|
|
|
|
containerd -version
|
|
```
|
|
|
|
* Or get my containerd binaries for armhf
|
|
|
|
Building containerd on armhf is extremely slow.
|
|
|
|
```sh
|
|
curl -sSL https://github.com/alexellis/containerd-armhf/releases/download/v1.3.2/containerd.tgz | sudo tar -xvz --strip-components=2 -C /usr/local/bin/
|
|
```
|
|
|
|
* Or clone / build / install [containerd](https://github.com/containerd/containerd) from source:
|
|
|
|
```sh
|
|
export GOPATH=$HOME/go/
|
|
mkdir -p $GOPATH/src/github.com/containerd
|
|
cd $GOPATH/src/github.com/containerd
|
|
git clone https://github.com/containerd/containerd
|
|
cd containerd
|
|
git fetch origin --tags
|
|
git checkout v1.3.2
|
|
|
|
make
|
|
sudo make install
|
|
|
|
containerd --version
|
|
```
|
|
|
|
Kill any old containerd version:
|
|
|
|
```sh
|
|
# Kill any old version
|
|
sudo killall containerd
|
|
sudo systemctl disable containerd
|
|
```
|
|
|
|
Start containerd in a new terminal:
|
|
|
|
```sh
|
|
sudo containerd &
|
|
```
|
|
#### Enable forwarding
|
|
|
|
> This is required to allow containers in containerd to access the Internet via your computer's primary network interface.
|
|
|
|
```sh
|
|
sudo /sbin/sysctl -w net.ipv4.conf.all.forwarding=1
|
|
```
|
|
|
|
Make the setting permanent:
|
|
|
|
```sh
|
|
echo "net.ipv4.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf
|
|
```
|
|
|
|
### Hacking (build from source)
|
|
|
|
#### Get build packages
|
|
|
|
```sh
|
|
sudo apt update \
|
|
&& sudo apt install -qy \
|
|
runc \
|
|
bridge-utils
|
|
```
|
|
|
|
You may find alternatives for CentOS and other distributions.
|
|
|
|
#### Install Go 1.13 (x86_64)
|
|
|
|
```sh
|
|
curl -sSLf https://dl.google.com/go/go1.13.6.linux-amd64.tar.gz > go.tgz
|
|
sudo rm -rf /usr/local/go/
|
|
sudo mkdir -p /usr/local/go/
|
|
sudo tar -xvf go.tgz -C /usr/local/go/ --strip-components=1
|
|
|
|
export GOPATH=$HOME/go/
|
|
export PATH=$PATH:/usr/local/go/bin/
|
|
|
|
go version
|
|
```
|
|
|
|
#### Or on Raspberry Pi (armhf)
|
|
|
|
```sh
|
|
curl -SLsf https://dl.google.com/go/go1.13.6.linux-armv6l.tar.gz > go.tgz
|
|
sudo rm -rf /usr/local/go/
|
|
sudo mkdir -p /usr/local/go/
|
|
sudo tar -xvf go.tgz -C /usr/local/go/ --strip-components=1
|
|
|
|
export GOPATH=$HOME/go/
|
|
export PATH=$PATH:/usr/local/go/bin/
|
|
|
|
go version
|
|
```
|
|
|
|
#### Install the CNI plugins:
|
|
|
|
* For PC run `export ARCH=amd64`
|
|
* For RPi/armhf run `export ARCH=arm`
|
|
* For arm64 run `export ARCH=arm64`
|
|
|
|
Then run:
|
|
|
|
```sh
|
|
export ARCH=amd64
|
|
export CNI_VERSION=v0.8.5
|
|
|
|
sudo mkdir -p /opt/cni/bin
|
|
curl -sSL https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz | sudo tar -xz -C /opt/cni/bin
|
|
```
|
|
|
|
Run or install faasd, which brings up the gateway and Prometheus as containers
|
|
|
|
```sh
|
|
cd $GOPATH/src/github.com/openfaas/faasd
|
|
go build
|
|
|
|
# Install with systemd
|
|
# sudo ./faasd install
|
|
|
|
# Or run interactively
|
|
# sudo ./faasd up
|
|
```
|
|
|
|
#### Build and run `faasd` (binaries)
|
|
|
|
```sh
|
|
# For x86_64
|
|
sudo curl -fSLs "https://github.com/openfaas/faasd/releases/download/0.7.4/faasd" \
|
|
-o "/usr/local/bin/faasd" \
|
|
&& sudo chmod a+x "/usr/local/bin/faasd"
|
|
|
|
# armhf
|
|
sudo curl -fSLs "https://github.com/openfaas/faasd/releases/download/0.7.4/faasd-armhf" \
|
|
-o "/usr/local/bin/faasd" \
|
|
&& sudo chmod a+x "/usr/local/bin/faasd"
|
|
|
|
# arm64
|
|
sudo curl -fSLs "https://github.com/openfaas/faasd/releases/download/0.7.4/faasd-arm64" \
|
|
-o "/usr/local/bin/faasd" \
|
|
&& sudo chmod a+x "/usr/local/bin/faasd"
|
|
```
|
|
|
|
#### At run-time
|
|
|
|
Look in `hosts` in the current working folder or in `/var/lib/faasd/` to get the IP for the gateway or Prometheus
|
|
|
|
```sh
|
|
127.0.0.1 localhost
|
|
10.62.0.1 faasd-provider
|
|
|
|
10.62.0.2 prometheus
|
|
10.62.0.3 gateway
|
|
10.62.0.4 nats
|
|
10.62.0.5 queue-worker
|
|
```
|
|
|
|
The IP addresses are dynamic and may change on every launch.
|
|
|
|
Since faasd-provider uses containerd heavily it is not running as a container, but as a stand-alone process. Its port is available via the bridge interface, i.e. `openfaas0`
|
|
|
|
* Prometheus will run on the Prometheus IP plus port 8080 i.e. http://[prometheus_ip]:9090/targets
|
|
|
|
* faasd-provider runs on 10.62.0.1:8081, i.e. directly on the host, and accessible via the bridge interface from CNI.
|
|
|
|
* Now go to the gateway's IP address as shown above on port 8080, i.e. http://[gateway_ip]:8080 - you can also use this address to deploy OpenFaaS Functions via the `faas-cli`.
|
|
|
|
* basic-auth
|
|
|
|
You will then need to get the basic-auth password, it is written to `/var/lib/faasd/secrets/basic-auth-password` if you followed the above instructions.
|
|
The default Basic Auth username is `admin`, which is written to `/var/lib/faasd/secrets/basic-auth-user`, if you wish to use a non-standard user then create this file and add your username (no newlines or other characters)
|
|
|
|
#### Installation with systemd
|
|
|
|
* `faasd install` - install faasd and containerd with systemd, this must be run from `$GOPATH/src/github.com/openfaas/faasd`
|
|
* `journalctl -u faasd -f` - faasd service logs
|
|
* `journalctl -u faasd-provider -f` - faasd-provider service logs
|