FCP Setup

Table of Content

Prerequisites

Before you install the Computing Provider, you need to know there are some resources required:

  • Possess a public IP

  • Have a domain name (*.example.com)

  • Have an SSL certificate

  • Go version must 1.21+, you can refer here:

Install the Kubernetes

The Kubernetes version should be v1.24.0+

Install Container Runtime Environment

If you plan to run a Kubernetes cluster, you need to install a container runtime into each node in the cluster so that Pods can run there, refer to here. And you just need to choose one option to install the Container Runtime Environment

Option 1: Install the Docker and cri-dockerd (Recommended)

To install the Docker Container Runtime and the cri-dockerd, follow the steps below:

  • Install the Docker:

    • Please refer to the official documentation from here.

  • Install cri-dockerd:

    • cri-dockerd is a CRI (Container Runtime Interface) implementation for Docker. You can install it refer to here.

Option 2: Install the Docker and theContainerd

  • Install the Docker:

    • Please refer to the official documentation from here.

  • To install Containerd on your system:

    • Containerd is an industry-standard container runtime that can be used as an alternative to Docker. To install containerd on your system, follow the instructions on getting started with containerd.

Optional-Setup a docker registry server

If you are using the docker and you have only one node, the step can be skipped.

If you have deployed a Kubernetes cluster with multiple nodes, it is recommended to set up a private Docker Registry to allow other nodes to quickly pull images within the intranet.

  • Create a directory /docker_repo on your docker server. It will be mounted on the registry container as persistent storage for our docker registry.

  • Launch the docker registry container:

1
  • Add the registry server to the node

    • If you have installed the Docker and cri-dockerd(Option 1), you can update every node's configuration:

    Then restart the docker service

    • If you have installed the containerd(Option 2), you can update every node's configuration:

Then restart containerd service

<Your_registry_server_IP>: the intranet IP address of your registry server.

Finally, you can check the installation by the command:

2

Create a Kubernetes Cluster

To create a Kubernetes cluster, you can use a container management tool like kubeadm. The below steps can be followed:

Install the Network Plugin

Calico is an open-source networking and network security solution for containers, virtual machines, and native host-based workloads. Calico supports a broad range of platforms including Kubernetes, OpenShift, Mirantis Kubernetes Engine (MKE), OpenStack, and bare metal services.

To install Calico, you can follow the below steps, more information can be found here.

step 1: Install the Tigera Calico operator and custom resource definitions

step 2: Install Calico by creating the necessary custom resource

step 3: Confirm that all of the pods are running with the following command

step 4: Remove the taints on the control plane so that you can schedule pods on it.

If you have installed it correctly, you can see the result shown in the figure by the command kubectl get po -A

3

Note:

  • If you are a single-host Kubernetes cluster, remember to remove the taint mark, otherwise, the task can not be scheduled to it.

Install the NVIDIA Plugin

If your computing provider wants to provide a GPU resource, the NVIDIA Plugin should be installed, please follow the steps:

Recommend NVIDIA Linux drivers version should be 470.xx+

If you have installed it correctly, you can see the result shown in the figure by the command kubectl get po -n kube-system

4

Install the Ingress-nginx Controller

The ingress-nginx is an ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer. You can run the following command to install it:

If you have installed it correctly, you can see the result shown in the figure by the command:

  • Run kubectl get po -n ingress-nginx

5
  • Run kubectl get svc -n ingress-nginx

6

Install and config the Nginx

  • Install Nginx service to the Server

  • Add a configuration for your Domain name Assume your domain name is *.example.com

  • Note:

    • server_name: a generic domain name

    • ssl_certificate and ssl_certificate_key: certificate for https.

    • proxy_pass: The port should be the Intranet port corresponding to ingress-nginx-controller service port 80

  • Reload the Nginx config

  • Map your "catch-all (wildcard) subdomain(*.example.com)" to a public IP address

Install the Hardware resource-exporter

The resource-exporter plugin is developed to collect the node resource constantly, computing provider will report the resource to the Lagrange Auction Engine to match the space requirement. To get the computing task, every node in the cluster must install the plugin. You just need to run the following command:

If you have installed it correctly, you can see the result shown in the figure by the command: kubectl get po -n kube-system

7

Build and config the Computing Provider

  • Build the Computing Provider

    Firstly, clone the code to your local:

Then build the Computing provider on the Swan Mainnet by following the below steps:

If you want to test the CP in the testnet, please build a testnet version:

Initialize CP repo and Update Configuration

  1. Initialize repo

    Note:

    • By default, the CP's repo is ~/.swan/computing, you can configure it by export CP_PATH="<YOUR_CP_PATH>"

    • The CP service port (8085 by default) must be mapped to the public IP address and port

  2. Update config.toml

    Edit the necessary configuration files according to your deployment requirements.

Note:

  • Example [api].WalletWhiteList hosted on GitHub can be found here.

  • Example [api].WalletBlackList hosted on GitHub can be found here.

Initialize a Wallet and Deposit SwanETH

  1. Generate a new wallet address or import the previous wallet:

    Example output:

    or import your wallet:

    Note: <YOUR_PRIVATE_KEY_FILE> is a file that contains the private key

  2. Deposit SwanETH to the wallet address:

    Note: If you don't have SwanETH and SWANC, please follow the guideline to bridge ETH to Swan Mainnet, and claim the SWANC as collaterals.

Initialization CP Account

Deploy a CP account contract:

Note: --task-types: Supports 4 task types (1: Fil-C2-512M, 2: Aleo, 3: AI, 4: Fil-C2-32G), separated by commas. For FCP, it needs to be set to 3.

Output:

Collateral SWANC for FCP

Note: Currently one AI task requires 5 SWANC. Please deposit enough collaterals for the tasks

Withdraw SWANC from FCP

Note: If you want to withdraw the funds from FCP, you can run the above command

Start the Computing Provider

You can run computing-provider using the following command


[OPTIONAL] Install AI Inference Dependency

It is necessary for the Computing Provider to deploy the AI inference endpoint. But if you do not want to support the feature, you can skip it.

[OPTIONAL] Config and Receive UBI Tasks

Step 1: Prerequisites: Perform Filecoin Commit2 (fil-c2) ZK tasks.

  1. Download parameters (specify the path with PARENT_PATH variable):

  2. Configure environment variables in fil-c2.env under CP repo ($CP_PATH):

Step 2: Collateral SWANC for receiving ZK Task

Note: Currently one zk-task requires 0.0005 SWANC.

Example output:

Step 3: Add the type of ZK task

Note: --task-types Supports 4 task types:

  • 1: FIL-C2-512M

  • 2: Aleo

  • 3: AI

  • 4: FIL-C2-32G

If you need to run FCP and ECP at the same time, you need to set it to 1,2,3,4

Step 4: Account Management

Use computing-provider account subcommands to update CP details:

Step 6: Check the Status of ZK task;

To check the ZK task list, use the following command:

Example output:

Restart the Computing Provider

You can run computing-provider using the following command

CLI of Computing Provider

  • Check the current list of tasks running on CP, display detailed information for tasks using -v

  • Retrieve detailed information for a specific task using task_uuid

  • Delete task by task_uuid

Getting Help

For usage questions or issues reach out to the Swan team either in the Discord channel or open a new issue here on GitHub.

License

Apache

Last updated