Computing Provider是通过提供计算资源(如处理能力(CPU 和 GPU)、内存、存储和带宽)参与分散式计算网络的个人或组织。它们的主要角色是执行用户在 Lagrange 平台上发布的任务。
- 0.准备工作
- 1.安装 Kubernetes
- 2.安装和配置 Nginx
- 3.安装Hardware resource-exporter
- 4.安装 Redis service
- 5.部署和配置Computing Provider
- 6.安装 AI Inference 依赖项(可选)
- 7.启动Computing Provider
- 8.Computing Provider的 CLI
在部署 Computing Provider 之前,您需要满足以下资源条件:
- 拥有公共IP
- 拥有泛域名(*.example.com)
- 拥有SSL证书
Go
版本必须是1.19+,您可以参考以下步骤:
wget -c https://golang.org/dl/go1.19.7.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc && source ~/.bashrc
Kubernetes版本应为v1.24.0+
如果您计划运行Kubernetes集群,您需要在集群中的每个节点上安装Container Runtime Environment
,以便Pod可以运行,详情请参考这里。您只需选择一种选项来安装Container Runtime Environment
。
选项1:安装Docker
和cri-dockerd
(推荐)
要安装Docker容器运行时
和cri-dockerd
,请按照以下步骤操作:
- 安装
Docker
:- 请参考此处的官方文档。
- 安装
cri-dockerd
:cri-dockerd
是Docker的CRI(Container Runtime Interface)实现。您可以按照这里的说明进行安装。
选项2:安装Containerd
Containerd
是一种符合行业标准的容器运行时(Container Runtime),可用作Docker的替代方案。要在系统上安装containerd
,请按照containerd入门上的说明操作。
如果您使用Docker且只有一个节点,则可以跳过此步骤。
如果您已部署了具有多个节点的Kubernetes集群,建议设置一个私有Docker仓库,以允许其他节点在内网中快速拉取镜像。
- 在您的Docker服务器上创建一个目录
/docker_repo
。它将被挂载到仓库上,作为我们的Docker仓库的持久存储。
sudo mkdir /docker_repo
sudo chmod -R 777 /docker_repo
- 启动Docker仓库:
sudo docker run --detach \
--restart=always \
--name registry \
--volume /docker_repo:/docker_repo \
--env REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/docker_repo \
--publish 5000:5000 \
registry:2
- 将仓库添加到节点
如果您已安装了Docker
和cri-dockerd
(选项1),您可以更新每个节点的配置:
sudo vi /etc/docker/daemon.json
## 添加以下配置
"insecure-registries": ["<Your_registry_server_IP>:5000"]
然后重新启动Docker服务
sudo systemctl restart docker
如果您已安装了containerd
(选项2),您可以更新每个节点的配置:
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."<Your_registry_server_IP>:5000"]
endpoint = ["http://<Your_registry_server_IP>:5000"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."<Your_registry_server_IP>:5000".tls]
insecure_skip_verify = true
然后重新启动containerd
服务
sudo systemctl restart containerd
<Your_registry_server_IP>: 您的仓库的内网IP地址。
最后,您可以通过以下命令检查安装情况:
docker system info
要创建Kubernetes集群,您可以使用kubeadm
等容器管理工具。可以按照以下步骤进行操作:
Calico是一个开源的容器网络和网络安全解决方案,适用于容器、虚拟机和本机主机工作负载。Calico支持多种平台,包括Kubernetes、OpenShift、Mirantis Kubernetes Engine(MKE)、OpenStack和裸金属服务。
要安装Calico,您可以按照以下步骤进行操作,更多信息可以在这里找到。
步骤1:安装Tigera Calico operator和资源定义
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
步骤2:通过创建必要的资源来安装Calico
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
步骤3:使用以下命令确认所有的Pod是否都在运行
watch kubectl get pods -n calico-system
步骤4:删除控制平面上的污点,以便可以在其上调度Pod。
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
如果安装正确,您可以通过kubectl get po -A
命令看到结果。
注意:
- 如果您是单主机Kubernetes集群,请记得删除污点标记,否则任务无法调度到它。
kubectl taint node ${nodeName} node-role.kubernetes.io/control-plane:NoSchedule-
如果您的Computing Provider希望提供GPU资源,则应安装NVIDIA插件,请按照以下步骤操作:
建议NVIDIA Linux驱动程序版本应为470.xx+
如果您已经正确安装,可以通过以下命令查看结果 kubectl get po -n kube-system
ingress-nginx
是用于Kubernetes的Ingress控制器,使用NGINX
作为反向代理和负载均衡器。您可以运行以下命令进行安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/cloud/deploy.yaml
如果您已经正确安装,可以通过以下命令查看结果:
- 运行
kubectl get po -n ingress-nginx
- 运行
kubectl get svc -n ingress-nginx
安装Nginx
服务到服务器
sudo apt update
sudo apt install nginx
为您的域名添加配置 假设您的域名是*.example.com
vi /etc/nginx/conf.d/example.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name *.example.com; # 需要根据您的域名更改
return 301 https://$host$request_uri;
#client_max_body_size 1G;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 需要配置SSL证书
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 需要配置SSL证书
server_name *.example.com; # 需要配置您的域名
location / {
proxy_pass http://127.0.0.1:<port>; # 需要配置与ingress-nginx-controller服务端口80相对应的内网端口
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
注意:
server_name
: 通用域名ssl_certificate
和ssl_certificate_key
: 用于https的证书。proxy_pass
: 端口应该是与ingress-nginx-controller
服务端口80相对应的内网端口
重新加载Nginx
配置
sudo nginx -s reload
将“catch-all(通配符)子域名(*.example.com)”映射到公共IP地址
resource-exporter
插件是为了持续收集节点资源,Computing Provider将资源报告给Lagrange Auction Engine以匹配空间需求。要获取计算任务,集群中的每个节点都必须安装该插件。只需运行以下命令:
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
namespace: kube-system
name: resource-exporter-ds
labels:
app: resource-exporter
spec:
selector:
matchLabels:
app: resource-exporter
template:
metadata:
labels:
app: resource-exporter
spec:
containers:
- name: resource-exporter
image: filswan/resource-exporter:v11.2.5
imagePullPolicy: IfNotPresent
EOF
如果您已经正确安装,可以通过以下命令查看结果: kubectl get po -n kube-system
安装redis-server
sudo apt update
sudo apt install redis-server
运行Redis服务:
systemctl start redis-server.service
首先,将代码克隆到本地:
git clone https://github.com/lagrangedao/go-computing-provider.git
cd go-computing-provider
git checkout v0.3.0
然后按照以下步骤部署Computing Provider:
make clean && make
make install
Computing Provider的配置示例位于 ./go-computing-provider/config.toml.sample
cp config.toml.sample config.toml
根据您的部署要求编辑必要的配置文件。这些文件可能包括Computing Provider组件、容器运行时、Kubernetes和其他服务的设置。
[API]
Port = 8085 # Web服务器监听的端口号
MultiAddress = "/ip4/<public_ip>/tcp/<port>" # 用于libp2p的multiAddress
Domain = "" # 域名
RedisUrl = "redis://127.0.0.1:6379" # Redis服务器地址
RedisPassword = "" # Redis服务器访问密码
[LOG]
CrtFile = "/YOUR_DOMAIN_NAME_CRT_PATH/server.crt" # 您的域名SSL .crt文件路径
KeyFile = "/YOUR_DOMAIN_NAME_KEY_PATH/server.key" # 您的域名SSL .key文件路径
[LAG]
ServerUrl = "https://api.lagrangedao.org" # Lagrange的API地址
AccessToken = "" # Lagrange访问令牌,从“(https://lagrangedao.org -> setting -> Access Tokens -> New token)”获取
[MCS]
ApiKey = "" # 从"https://www.multichain.storage" -> setting -> Create API Key 获取
BucketName = "" # 从"https://www.multichain.storage" -> bucket -> Add Bucket 获取
Network = "polygon.mainnet" # 主网使用polygon.mainnet,测试网使用polygon.mumbai
FileCachePath = "/tmp" # 任务数据的缓存目录
[Registry]
ServerAddress = "" # Docker容器镜像注册表地址,如果只有一个节点,可以忽略
UserName = "" # 登录用户名,如果只有一个节点,可以忽略
Password = "" # 登录密码,如果只有一个节点,可以忽略
对于计算提供者来说,部署AI inference 端点是必要的。但如果您不想支持此功能,可以跳过它。
export CP_PATH=xxx
./install.sh
您可以使用以下命令运行 computing-provider
export CP_PATH=xxx
nohup computing-provider run >> cp.log 2>&1 &
检查CP上当前运行的任务列表,使用 -v
显示任务的详细信息
computing-provider task list
通过 space_uuid
获取特定任务的详细信息
computing-provider task get [space_uuid]
通过 space_uuid
删除任务
computing-provider task delete [space_uuid]
如有使用问题或问题,请通过Discord频道与Swan团队联系,或在GitHub上打开新问题。
Apache