Skip to content

使用KubeFATE在Kubernetes上部署FATE集群

ChenLong Ma edited this page Feb 17, 2022 · 7 revisions

概述

FATE介绍

FATE是由Webank的AI部门发起的一个开源项目,旨在提供一个安全的计算框架来支持联合AI生态系统。它实现了多种安全计算协议,以实现符合数据保护法规的大数据协作。通过模块化的可扩展建模管道,清晰的可视界面和灵活的调度系统,FATE可以访问即用型可用性和出色的运营性能。

Kubernetes介绍

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

为什么要在Kubernetes上部署FATE

但随着联邦学习的正式投入使用,训练集、模型都会逐渐变大。在生产环境里,我们会遇到以下问题:

  1. FATE集群如何适应企业组织内部各种安全、合规要求,以及网络、安全域等IT环境;
  2. 一台服务器已经无法支撑联邦学习的算力需求,如何部署多计算节点,并易于管理;
  3. 某些节点出现问题,是否有自愈能力,保证服务的可靠性;
  4. 能否实现横向扩展,适应业务的成长;
  5. FATE版本能否很好的升级管理;
  6. 一个组织内是否可以有不同的联邦集群,对应不同的业务、合作伙伴、应用场景需要,如何管理多个集群。

Kubernetes 是目前最流行的基础设施平台,大量的实践证明,Kubernetes 很适合作为企业内部运维大规模分布式系统的平台。根据 Ovum 的统计,截至2019年底,一半的大数据负载都运行在Kubernetes之上。我们团队也推荐Kubernetes作为运行 FATE 联邦学习集群生产环境的平台。KubeFATE 提供了在 Kubernetes 部署运维 FATE 的解决方案。

先决条件

在了解如何在Kubernetes上部署 FATE之前呢,你最好先知道这些下面这些知识或文章:

如果你已经比较了解Kubernetes和FATE可以跳过这部分

Kubernetes知识

FATE知识

相关文章

KubeFATE

KubeFATE是FATE的容器化部署的支持项目,主要包括FATE的docker-compose部署和Kubernetes部署,Notebook支持等。

为什么是KubeFATE

KubeFATE主要由VMware中国研发中心实验室,微众银行,GitHub用户等开源贡献,随着容器化技术的发展,相关技术也越来越成熟,出现了多优秀的项目KubernetesDockerHarbor等。容器化部署应用解决了很多部署问题,还大大提高了研发运维效率,容器化部署将是未来服务运维的重要方式。在生产环境的容器化部署首先想到就是Kubernetes,使用KubeFATE部署FATE将是你部署FATE的首要选择。

KubeFATE的介绍

KubeFATE是对FATE的Kubernetes部署的具体实现。KubeFATE使用golang开发,通过一个部署在Kubernetes上的server服务来实现对Kubernetes的操作,可以实现集群外对FATE的部署操作,通过简单命令行实现简单快速的FATE集群的部署运维工作。

KubeFATE的项目地址https://github.com/FederatedAI/KubeFATE/tree/master/k8s-deploy。

KubeFATE部署架构

img

KubeFATE的相关知识

KubeFATE部署FATE可以通过命令行或者rest API来操作,可以操作的资源如下:

Cluster

cluster是KubeFATE的主要资源,KubeFATE每成功部署一个FATE就会生成一个cluster,每一个cluster对应一组Kubernetes的资源,包含FATE(Training)和FATE-Serving两种类型。

命令行和API主要有install update delete describe list五种操作。

Job

job是KubeFATE部署cluster的时候产生的中间资源,负责完成cluster在Kubernetes上对应的操作,包括三种类型Install、Update和Delete。

执行的基本过程分四步:1.生成job的元数据,2.执行对应类型的cluster操作,3.检查操作是否成功,4.更新job的状态。

命令行和API主要有list delete describe三种操作。

Chart

chart是KubeFATE存储不同类型不同版本的FATE的Yaml模板文件,是Helm Chart的超集,相比普通Helm Chart多了一个values-template文件。所有的chart文件可以从https://github.com/FederatedAI/KubeFATE/tree/gh-pages/package下载。

命令行和API主要有upload list delete三种操作。

User

是KubeFATE对命令行的认证信息的体现。

部署过程

部署KubeFATE

下载KubeFATE安装包

KubeFATE安装包可以从GitHub的KubeFATE release下载(https://github.com/FederatedAI/KubeFATE/releases)

$ version=v1.5.0

# 下载对应版本的KubeFATE
$ wget https://github.com/FederatedAI/KubeFATE/releases/download/${version}/kubefate-k8s-${version}.tar.gz

解压之后安装就可以使用

$ mkdir -p kubefate
$ tar -zxvf -C kubefate kubefate-k8s-${version}.tar.gz 
$ chmod +x ./kubefate && sudo mv ./kubefate /usr/bin

解压之后得到这些文件

$ ls
cluster-serving.yaml cluster-spark.yaml  cluster.yaml  config.yaml  examples  kubefate  kubefate.yaml  rbac-config.yaml
安装KubeFATE server

KubeFATE使用之前你需要在Kubernetes上部署KubeFATE server。

这部分包含KubeFATE server的namespace和RBAC权限,官方默认的权限是cluster-admin,对kubernetes的RBAC机制比较了解的可以自己修改。

还包含KubeFATE所使用的秘钥,MySQL的用户名密码和KubeFATE的用户名密码,部署之前建议先修改一下。

$ kubectl apply -f rbac-config.yaml

接下来就可以部署KubeFATE server了。

这个部署包含两部分:KubeFATE和MariaDB(MySQL),总共包含5个Kubernetes组件,分别是KubeFATE和MariaDB的Deployment与Service、KubeFATE的Ingress。

$ kubectl apply -f kubefate.yaml
deployment.apps/kubefate created
deployment.apps/mariadb created
service/mariadb created
service/kubefate created
ingress.networking.k8s.io/kubefate created

可以看到5个Kubernetes组件成功创建,如果deployment创建的pod状态正常那么说明KubeFATE server已经部署成功。

KubeFATE命令行对接

KubeFATE命令行是KubeFATE server的API调用实现,通过架构图我们知道KubeFATE部署FATE是KubeFATE server通过call Kubernetes API 来实现的,KubeFATE命令行与KubeFATE server的通信是通过Ingress暴露的URL example.com来实现,所以KubeFATE命令行可以在任意一台可以访问Ingress入口的机器使用,只需要配置hosts文件即可。

例如:

$ echo "192.168.100.123 example.com"  >> /etc/hosts

192.168.100.123是ingress的入口IP地址。

使用命令kubefate version检查是否连通。

$ kubefate version
* kubefate service version=v1.2.0
* kubefate commandLine version=v1.2.0

这里报错,原因一般有两点:

  1. 没有ingress-controller;
  2. KubeFATE的pod没有成功运行(第一次运行初始化数据库会需要一点时间)。

KubeFATE部署成功就可以使用KubeFATE部署FATE了。

使用KubeFATE部署FATE

使用kubefate cluster install命令,可以用KubeFATE安装一个指定FATE集群。使用--help参数可以更好的使用KubeFATE命令。

在安装之前,集群的参数可以通过配置cluster.yaml实现。详细的配置可以看配置介绍部分配置介绍

$ kubefate cluster install -f cluster.yaml
create job success, job id=94107328-958e-4fa6-8fa7-9a2b975114de

KubeFATE对集群的安装更改删除都会生成一个job,使用kubefate job describe <job_id>可以查看对应操作的进度。

本文的FATE集群是FATE的泛指,包含FATE(Training)和FATE-Serving

KubeFATE的job分为三种:install、 update、 delete。

  • Install:创建Cluster

    首先会在数据库建立job的记录,然后创建cluster的记录,接着查看数据库是否有对应版本chart存在(如果不存在则下载对应版本chart存储到数据库),然后调用helm安装Cluster,检查等待安装成功,更新job和cluster的记录。

  • Update:更新Cluster

    首先会在数据库建立job的记录,然后创建cluster的记录,接着查看数据库是否有更新Cluster对应版本chart存在(如果不存在则下载对应版本chart存储到数据库),然后调用helm更新Cluster,检查等待更新成功,更新job和cluster的记录。

  • Delete:删除Cluster

    首先会在数据库建立job的记录,更改Cluster状态,然后调用helm删除Cluster,检查等待删除成功,接着删除Cluster记录,更新job的记录。

检查是否部署成功

查看job状态

通过查看job的信息,可以知道对应FATE集群安装的进度

$ kubefate job describe 94107328-958e-4fa6-8fa7-9a2b975114de
UUID     	94107328-958e-4fa6-8fa7-9a2b975114de
StartTime	2020-11-25 03:03:41
EndTime  	2020-11-25 03:05:38
Duration 	117s
Status   	Success
Creator  	admin
ClusterId	9e693e93-bf2a-4229-8485-ea922ed33dcf
Result   	Cluster install success
SubJobs  	mysql                PodStatus: Running, SubJobStatus: Success, Duration:    83s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:05
         	nodemanager-0        PodStatus: Running, SubJobStatus: Success, Duration:    11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53
         	nodemanager-1        PodStatus: Running, SubJobStatus: Success, Duration:    11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53
         	python               PodStatus: Running, SubJobStatus: Success, Duration:   116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38
         	rollsite             PodStatus: Running, SubJobStatus: Success, Duration:    11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53
         	client               PodStatus: Running, SubJobStatus: Success, Duration:   116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38
         	clustermanager       PodStatus: Running, SubJobStatus: Success, Duration:    11s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:03:53
         	fateboard            PodStatus: Running, SubJobStatus: Success, Duration:   116s, StartTime: 2020-11-25 03:03:41, EndTime: 2020-11-25 03:05:38

当job的状态变成Success,代表部署任务成功。

subjob表示当前job中每个组件的子job的状态。

查看FATE集群信息

通过命令kubefate cluster describe <cluster_id>可以查看部署的FATE集群的信息

$ kubefate cluster describe 9e693e93-bf2a-4229-8485-ea922ed33dcf
UUID        	9e693e93-bf2a-4229-8485-ea922ed33dcf
Name        	fate-10000                          
NameSpace   	fate-10000                          
ChartName   	fate                                
ChartVersion	v1.5.0                              
Revision    	1                                   
Age         	9m3s                                
Status      	Running                             
Spec        	backend: eggroll                    
            	chartName: fate                     
            	chartVersion: v1.5.0                
            	istio:                              
            	  enabled: false                    
            	modules:                            
            	- rollsite                          
            	- clustermanager                    
            	- nodemanager                       
            	- mysql                             
            	- python                            
            	- fateboard                         
            	- client                            
            	name: fate-10000                    
            	namespace: fate-10000               
            	partyId: 10000                      
            	persistence: false                  
            	pullPolicy: null                    
            	python:                             
            	  grpcNodePort: 30102               
            	  httpNodePort: 30107               
            	  type: NodePort                    
            	registry: ""                        
            	rollsite:                           
            	  nodePort: 30101                   
            	  partyList:                        
            	  - partyId: 9999                   
            	    partyIp: 192.168.9.1         
            	    partyPort: 30091                
            	  type: NodePort                    
            	servingIp: 192.168.10.1             
            	servingPort: 30105                  
            	                                    
Info        	dashboard:                          
            	- 10000.notebook.example.com       
            	- 10000.fateboard.example.com      
            	ip: 192.168.10.2                   
            	pod:                                
            	- clustermanager-76bb7d4dd4-hhpw6   
            	- mysql-57b7d859bc-pw4x5            
            	- nodemanager-0-8d85fd46c-pwcz2     
            	- nodemanager-1-6d67b96bc-qp4bx     
            	- python-9c857bbcc-lgx2d            
            	- rollsite-6b685d468d-bcrzw         
            	status:                             
            	  modules:                          
            	    client: Running                 
            	    clustermanager: Running         
            	    fateboard: Running              
            	    mysql: Running                  
            	    nodemanager-0: Running          
            	    nodemanager-1: Running          
            	    python: Running                 
            	    rollsite: Running  

当Status是"Running"的时候表示部署的FATE已经正常运行。

集群的其他信息:

  • Name NameSpace ChartName ChartVersion 这些是基本信息与配置文件字段对应
  • Status 代表部署的FATE的状态("Running"表示正常运行)
  • Revision 代表update的次数,创建成功也算一次。
  • Spec 对应部署的时候的cluster.yaml
  • Info 当前FATE的特有信息
    • dashboard 是部署FATE包含的ingress入口
    • ip 表示可以Kubernetes使用NodePort的一个Node的Ip
    • pod 表示当前FATE集群在kubernetes里面所有pod
    • status 表示当前FATE集群所有container的状态

检查FATE是否正常

要检查FATE是否成可以运行FATE的一些测试任务,具体如何使用可以参考FATE examples,也可以参考[notebook的使用](这里需要有连接)。

FATE互联

FATE联邦学习的实现依赖多个Party的数据交换,多个Party的互联有两种方式,分别是直连模式(网状)和exchange(星型)。

直连模式(网状):

direct

exchange(星型):

star

一个Party的对外连接信息包含三项,

  • PartyID

    partyID部署FATE的时候必须指定,

  • IP

    rollsite对外是通过NodePort的方式暴露,所以IP就是NodeIP(通过查看cluster的具体信息也可以得到Info.ip),

  • Port

    就是配置的rollsite.nodePort

直连模式

直连模式是指在一个联邦网络内某个Party包含了他需要连接的所有party的集群入口信息(PartyID、IP、Port),对应的对方Party也必须包含它的信息。

当某个新的Party想要加入网络,需要配置一个网络内唯一的PartyID,还需要在rollsite.partyList的配置项增加所以需要关联的Party的信息,而且对方也需要在自己的rollsite.partyList增加己方的信息。

exchange模式

也叫星型部署模式,所有的Party只需要配置exchange集群的信息,就可以通过exchange连接其他的Party,exchange负责管理所有Party的集群信息

如果使用exchange模式部署,只需要配置rollsite.exchange即可连接exchange集群。exchange集群则需要配置各方的Party信息([exchange集群配置](#FATE exchange))。

Spark模式

当FATE使用Spark计算引擎,集群的连接方式不同于之前,类似于直连模式,不过互联要包含两个个组件nginx和rabbitmq。

FATE使用Spark的party之间互联就需要配置nginx的route_table和rabbitmq的route_table。

  • nginx的route_table需要配置对方集群的nginx和python的grpcNodePort。

  • rabbitmq的route_table则需要配置对方集群的rabbitmq。

截至当前版本v1.5.0,FATE on spark不支持exchange模式.

KubeFATE部署FATE的配置介绍

使用KubeFATE可以部署两种集群类型,包含FATE(Training)和FATE-Serving,部署配置文件是YAML格式。

共同部分

  • name:集群名称,不能重复
  • namespace:对应Kubernetes的namespace资源,目前KubeFATE部署最好一个namespace下只部署这个FATE集群的资源
  • chartName:FATE集群的类型,包括fate和fate-serving
  • chartVersion:FATE集群的版本,更多版本可以在这里找到https://github.com/FederatedAI/KubeFATE/tree/gh-pages/package
  • partyId:FATE的概念,标识区分不同集群
  • registry:镜像资源,默认是Docker hub,其他资源:例如国内的一个镜像资源registry: "hub.c.163.com/federatedai"
  • pullPolicy:Kubernetes镜像资源拉取策略,不填写默认是IfNotPresent
  • persistence:集群是否支持数据持久化
  • istio:是否启用istio,(什么是istio?
  • modules:KubeFATE支持分模块部署,这里可以选择需要部署的不同模块

其余配置根据不同的部署模式选择不同的配置。

FATE(Training)的配置

部署FATE(Training)集群。

必须组件包含[python, mysql]

如果使用eggroll引擎,还需要[rollsite, clustermanager, nodemanager]

如果使用Spark引擎,还需要[spark, hdfs, nginx, rabbitmq]

可选组件[fateboard, client]

FATE支持两种计算引擎eggroll和Spark。所以下面针对两种配置做详细说明。

  • backend: FATE使用的计算引擎(eggroll、Spark)
  • python:fateflow的一些配置
    • type:fateflow服务端口的暴露方式,对应Kubernetes的service的type
    • httpNodePort:如果上边选择的是NodePort,fateflow http端口的配置
    • grpcNodePort:如果上边选择的是NodePort,fateflow grpc端口的配置
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • spark:[FATE on Spark](FATE on Spark)的配置
    • hdfs:[FATE on Spark](FATE on Spark)的配置
    • rabbitmq:[FATE on Spark](FATE on Spark)的配置
    • nginx:[FATE on Spark](FATE on Spark)的配置
  • mysql:mysql的一些配置(使用其他mysql可以不配置这里)
    • ip:mysql的kubernetes内部名称(不要修改)
    • port:mysql的port(不要修改)
    • database:FATE使用mysql的数据库名称
    • user:mysql用户名
    • password:mysql密码
    • subPath:持久化的路径
    • existingClaim:是否使用已有PVC
    • storageClass:持久化的storageClass
    • accessMode:ReadWriteOnce
    • size:PV的大小
    • nodeSelector:将 Pod 分配给某一节点,nodeselector

如果使用其他mysql配置这些

  • externalMysqlIp:mysql的ip
  • externalMysqlPort:mysql的port
  • externalMysqlDatabase:mysql的数据库名称
  • externalMysqlUser:mysql的用户名
  • externalMysqlPassword:mysql的密码

如果要连接FATE-Serving才需要配置

  • servingIp:FATE-Serving的servingServer的入口ip
  • servingPort:FATE-Serving的servingServer的入口port
FATE on eggroll

使用eggroll计算引擎,除了基础组件,还需要[rollsite, clustermanager, nodemanager]这些组件。

使用cluster.yaml,默认会部署一个FATE on eggroll的FATE集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件 资源实例
Service clustermanager,fateboard ,fateflow ,fateflow-client,mysql ,nodemanager-0,nodemanager-1,notebook,rollsite
Deployment clustermanager,mysql,nodemanager-0,nodemanager-1,python,rollsite
Ingress client,fateboard
ConfigMap eggroll-config,fateboard-config,mysql-config,nodemanager-0-config,nodemanager-1-config,python-config,rollsite-config

下面是使用eggroll计算引擎需要的组件配置

  • rollsite: rollsite组件的一些配置
    • type: rollsite端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号,Kubernetes默认的范围是(30000-32767)
    • exchange:rollsite连接的exchange信息(ip和port)
    • partyList:FATE连接其他party的信息,假如要连接已经使用KubeFATE部署了的一个FATE,根据前边查看FATE集群信息,从中可以得到partyId、NodePort和NodeIP。
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
  • nodemanager:nodemanager组件的一些配置
    • count:部署nodemanager的数量
    • sessionProcessorsPerNode:nodemanager的sessionProcessorsPerNode配置
    • subPath:nodemanager持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
  • clustermanager:nodemanager组件的配置
    • nodeSelector:将 Pod 分配给某一节点,nodeselector
FATE on Spark

使用Spark计算引擎,除了基础组件,还需要[spark, hdfs, nginx, rabbitmq]这些组件。

使用cluster-spark.yaml,默认会部署一个FATE on Spark的FATE集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件 资源实例
Service fateboard, fateflow, fateflow-client, mysql, namenode, datanode, nginx, notebook, rabbitmq, spark-master, spark-worker-1
Deployment datanode, mysql, namenode, nginx, python, rabbitmq, spark-master, spark-worker
Ingress client, fateboard, rabbitmq, spark
ConfigMap datanode-env, eggroll-config, fateboard-config, mysql-config, namenode-config, namenode-env, nginx-config, python-config, rabbitmq-config

下面是使用Spark计算引擎需要的组件配置

  • spark:Spark组件的一些配置

    • master:master节点的配置
      • Image:master的镜像
      • ImageTag:TAG
      • replicas:pod副本数量
      • cpu:请求CUP 数量
      • memory:请求内存数量
      • nodeSelector:将 Pod 分配给某一节点,nodeselector
      • type:对应kubernetes的Service资源的type
    • worker:worker节点的配置
      • Image:worker的镜像
      • ImageTag:TAG
      • replicas:pod副本数量
      • cpu:请求CUP 数量
      • memory:请求内存数量
      • nodeSelector:将 Pod 分配给某一节点,nodeselector
      • type:对应kubernetes的Service资源的type
  • hdfs:hdfs组件的一些配置

    • namenode:namenode配置
      • nodeSelector:将 Pod 分配给某一节点,nodeselector
      • type:对应kubernetes的Service资源的type
    • datanode:datanode配置
      • nodeSelector:将 Pod 分配给某一节点,nodeselector
      • type:对应kubernetes的Service资源的type
  • nginx:nginx组件的一些配置

    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:nginx端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号。
    • route_table:配置FATE连接其他party的proxy和fateflow信息,假如要连接已经使用KubeFATE部署了的一个FATE,
      • <party_id>: 其他party的id
        • proxy:其他party的proxy信息,对应对方party的nginx的ip和port
        • fateflow:其他party的fateflow信息,对应对方party的python模块的ip和grpcNodePort
  • rabbitmq:rabbitmq组件的一些配置

    • nodeSelector:将 Pod 分配给某一节点,nodeselector
    • type:rabbitmq端口的暴露方式,对应Kubernetes的service的type
    • nodePort:如果上边选择的是NodePort,这里可以配置具体的端口号。
    • default_user:rabbitmq的配置default_user
    • default_pass:rabbitmq的配置default_pass
    • user:rabbitmq的配置user
    • password:rabbitmq的配置password
    • route_table:配置FATE连接其他party的rabbitmq信息
      • <party_id>: 其他party的id
        • host:其他party的rabbitmq的入口ip
        • port:其他party的rabbitmq的入口port

FATE Serving配置

FATE-Serving的部署与上边一样,相同的配置可以参考双方共同部分

如果要部署FATE-Serving需要三个模块[servingProxy, servingRedis, servingServer]。

使用cluster-serving.yaml,默认会部署一个FATE-Serving的集群。

默认的部署实现,体现在Kubernetes上的资源有以下这些:

kubernetes组件 资源实例
Service serving-proxy, serving-redis, serving-server
Deployment serving-proxy, serving-redis, serving-server
Ingress serving-proxy
ConfigMap serving-proxy-config, serving-redis-config, serving-server-config

下面是FATE-Serving的集群的组件配置

  • servingProxy:servingProxy组件的一些配置

    • nodePort:servingProxy端口的暴露方式,供其他party的serving集群连接
    • ingerssHost:servingProxy的ingress host配置
    • partyList:连接其他party的配置,其他party 组件servingProxy的ip和port
    • nodeSelector:将 Pod 分配给某一节点
  • servingServer:servingServer组件的一些配置

    • type:servingServer端口的暴露方式,对应Kubernetes的service的type
    • nodePort:servingProxy端口的暴露方式,供自己的FATE(Training)集群的python模块连接
    • fateflow:自己的FATE(Training)集群的fateflow httpNodePort的入口
    • subPath:servingServer持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小
    • nodeSelector: 将 Pod 分配给某一节点
  • servingRedis:servingRedis组件的一些配置(就是普通redis)

    • password:redis的密码
    • nodeSelector: 将 Pod 分配给某一节点
    • subPath:redis持久化的路径
    • storageClass:持久化的storageClass
    • existingClaim:是否使用已有PVC
    • accessMode:访问模式
    • size:所需PV的大小

其他配置

FATE exchange

如果只部署一个rollsite,则可以作为exchange 。

$ cat <<EOF | sudo tee cluster-exchange.yaml 
name: fate-exchange
namespace: fate-exchange
chartName: fate
chartVersion: v1.5.0
partyId: exchange
modules:
  - rollsite

rollsite: 
  type: NodePort
  nodePort: 30001
  partyList:
  - partyId: 9999
    partyIp: 192.168.9.1
    partyPort: 30091
  - partyId: 10000
    partyIp: 192.168.10.1
    partyPort: 30101
EOF
FATE-Serving exchange

如果只部署一个servingProxy,则可以作为serving-exchange 。

$ cat <<EOF | sudo tee serving-exchange.yaml 
name: fate-serving-exchange
namespace: fate-serving-exchange
chartName: fate-serving
chartVersion: v2.0.0
partyId: exchange
modules:
  - servingProxy

servingProxy: 
  type: NodePort
  nodePort: 30006
  partyList:
  - partyId: 9999
    partyIp: 192.168.9.1
    partyPort: 30091
  - partyId: 10000
    partyIp: 192.168.10.1
    partyPort: 30101
EOF

当前版本v1.5.0,FATE on Spark不支持exchange模式.

参与其中

如果你对KubeFATE有什么建议或者想法,可以在GitHubKubeFATE上提issue和PR

相关链接