Operator-Engine是Ocean Protocol生态中的后端代理,实现https://github.com/oceanprotocol/OEPs/tree/master/12#infrastructure-orchestration%E8%A7%84%E8%8C%83%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E3%80%82%E5%AE%83%E4%BD%BF%E7%94%A8Kubernetes%E4%BD%9C%E4%B8%BA%E5%90%8E%E7%AB%AF%EF%BC%8C%E8%B4%9F%E8%B4%A3%E7%BC%96%E6%8E%92%E8%AE%A1%E7%AE%97%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%EF%BC%8C%E6%8E%A5%E6%94%B6%E7%94%B1https://github.com/oceanprotocol/operator-service%E5%88%9B%E5%BB%BA%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%B5%81(Workflows)%EF%BC%8C%E5%B9%B6%E7%AE%A1%E7%90%86%E5%AE%8C%E6%88%90%E8%AE%A1%E7%AE%97%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%89%A7%E8%A1%8C%E6%89%80%E9%9C%80%E7%9A%84%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E3%80%82
适用于Ocean Protocol生态中需要实现"数据不动计算动"(Compute to the Data)的场景,具体包括:
需已配置Kubernetes集群,本文档不包含K8s集群配置说明。
bashkubectl create ns ocean-compute kubectl config set-context --current --namespace ocean-compute
bashkubectl apply -f kubernetes/sa.yml kubectl apply -f kubernetes/binding.yml kubectl apply -f kubernetes/operator.yml
bash# 检查部署状态 kubectl get deployment ocean-compute-operator -o yaml # 检查pod状态 kubectl get pod ocean-compute-operator-7b5779c47b-2r4j8
| 环境变量 | 描述 |
|---|---|
nCPU | 可用CPU数量 |
cpuType | CPU类型 |
nGPU | 可用GPU数量 |
gpuRam | 每GPU的RAM容量 |
gpuType | GPU类型 |
ramGB | 可用RAM容量(GB) |
diskGB | 可用磁盘空间(GB) |
priceMinute | 每分钟价格 |
description | 环境描述 |
maxJobs | 最大同时运行任务数 |
maxJobDuration | 最大任务持续时间(秒) |
STORAGE_EXPIRY | 输出数据在存储中的保留时间(小时),0表示永不过期 |
OPERATOR_PRIVATE_KEY | 用于签名通知和消费算法/输入的地址私钥 |
IPFS_TYPE | IPFS库类型,'CLUSTER'使用ipfs-cluster,'CLIENT'使用ipfs-client(默认) |
IPFS_OUTPUT, IPFS_ADMINLOGS | IPFS网关地址,用于上传输出数据(算法日志和结果)和管理日志(配置pod和发布pod日志) |
IPFS_OUTPUT_PREFIX, IPFS_ADMINLOGS_PREFIX | 结果文件前缀 |
IPFS_API_KEY, IPFS_API_CLIENT | IPFS认证用的API密钥和客户端ID(可选) |
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION | S3存储的凭证和区域 |
AWS_BUCKET_OUTPUT | 存储输出数据的S3桶 |
AWS_BUCKET_ADMINLOGS | 存储管理日志的S3桶 |
STORAGE_CLASS | 使用的存储类 |
NOTIFY_START_URL | 任务开始时调用的URL |
NOTIFY_STOP_URL | 任务结束时调用的URL |
SERVICE_ACCOUNT | 运行pod的K8s服务账户,默认'default' |
NODE_SELECTOR | K8s节点选择器(如定义) |
PULL_SECRET | 镜像拉取密钥(如定义) |
PULL_POLICY | 镜像拉取策略(如定义) |
FILTERING_CONTAINER | 用于过滤的pod镜像(如定义) |
LOG_CFG, LOG_LEVEL | 日志文件位置和日志级别 |
系统按以下优先级选择存储方式:
IPFS配置支持以下场景:
场景1:使用不同端口的IPFS网关
IPFS_OUTPUT=http://ipfs.oceanprotocol.com:5001 IPFS_OUTPUT_PREFIX=http://ipfs.oceanprotocol.com:8080/ipfs/
ipfs.oceanprotocol.com:8080/ipfs/HASH场景2:隐藏IPFS部署信息
IPFS_OUTPUT=http://ipfs.oceanprotocol.com:5001 IPFS_OUTPUT_PREFIX=ipfs://
ipfs://HASH任务开始和结束时,Engine会向配置的URL发送JSON POST请求,包含以下信息:
algoDID: 算法DID(如有)jobId: 任务IDsecret: 密钥值(作为环境变量导出到算法pod)DID: 输入DID数组若定义NODE_SELECTOR,所有pod将包含以下选择器配置:
yamlspec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: scope operator: In values: - $NODE_SELECTOR
AWS标准存储类示例:
yamlallowedTopologies: - matchLabelExpressions: - key: failure-domain.beta.kubernetes.io/zone values: - us-east-1a apiVersion: storage.k8s.io/v1 kind: StorageClass parameters: fsType: ext4 type: gp2 provisioner: kubernetes.io/aws-ebs reclaimPolicy: Delete volumeBindingMode: Immediate
Minikube存储类示例:
yamlapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: docker.io/hostpath reclaimPolicy: Retain
开发模式允许:
步骤:
tail -f /dev/null作为启动命令(替代默认的kopf命令)bashkubectl delete pod ocean-compute-operator-7b5779c47b-2jrlp
bashkubectl exec -it ocean-compute-operator-7b5779c47b-2jrlp bash
bashkopf run --standalone /operator_engine/operator_main.py
首次部署:
bashkubectl apply -f k8s_install/operator.yml
验证运行状态:
bashkubectl get pod ocean-compute-operator-7b5779c47b-2r4j8
bashvirtualenv -p python3.7 venv source venv/bin/activate pip install -r requirements_dev.txt
通过部署测试工作流验证operator-engine功能:
bashkubectl apply -f k8s_install/workflow-1.yaml
查看operator-engine日志:
bashkubectl logs ocean-compute-operator-7b5779c47b-2r4j8
查看计算pod日志:
bashkubectl logs workflow-1-configure-job-qk4pv # 配置pod日志 kubectl logs workflow-1-algorithm-job-c9m4t # 算法pod日志 kubectl logs workflow-1-publish-job-dcfjc # 发布pod日志
使用bumpversion.sh脚本更新版本:
bash./bumpversion.sh {major|minor|patch}
Copyright 2023 Ocean Protocol Foundation Ltd.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
[***]
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务