在 Kubernetes 中,我们可以创建多个容器,每个容器内里运行一个应用实例,然后通过内置的负载平衡计谋,实现对这一组应用实例的管理、发现、访问,而这些细节都不必要运维职员去举行复杂的手工设置和处置惩罚。
Kubernetes 是现在最盛行的底子办法平台,大量的实践证实,Kubernetes 很适互助为企业内部运维大规模分布式体系的平台。根据 Ovum 的统计,停止2019年底,一半的大数据负载都运行在 Kubernetes 之上。我们团队也保举 Kubernetes 作为运行 FATE 联邦学习集群生产情况的平台。KubeFATE 提供了在 Kubernetes 摆设运维 FATE 的办理方案。
在相识如安在 Kubernetes 上摆设 FATE 之前呢,你最好先相识 Kubernetes 和 FATE 的根本原理。
KubeFATE
KubeFATE 是 FATE 的容器化摆设的支持项目,重要包罗 FATE 的 docker-compose摆设和 Kubernetes 摆设,Juypter Notebook 支持等。
KubeFATE 重要由 VMware 中国研发中央云原生实行室、微众银行、社区用户共同到场开源贡献。随着容器化技能的发展,相干技能也越来越成熟,出现了多良好的项目 Kubernetes、Docker、Harbor 等。容器化摆设应用办理了许多摆设题目,还大大进步了研发运维服从,容器化摆设将是将来服务运维的紧张方式。在生产情况的容器化摆设起首想到就是 Kubernetes,利用 KubeFATE 摆设FATE将是你摆设FATE的主要选择。
KubeFATE是对 FATE 的 Kubernetes 摆设的详细实现。KubeFATE利用golang开辟,通过一个摆设在 Kubernetes 上的 server 服务来实现对 Kubernetes 的操纵,可以实现集群外对 FATE 的摆设操纵,通过简朴下令行实现简朴快速的 FATE 集群的摆设运维工作。
(必要参加KubeFATE开源项目讨论群的同砚,请先关注 亨利条记 公众号,然后复兴 kubefate 即可。)
KubeFATE摆设架构
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 文件可以从这里下载: http://github.com/FederatedAI/KubeFATE/tree/gh-pages/package
下令行和 API 重要有 upload, list, delete三种操纵。
User
是 KubeFATE对下令行的认证信息的表现。
摆设过程
下载KubeFATE安装包
KubeFATE安装包可以从 GitHub 的 KubeFATE release 下载 (http://github.com/FederatedAI/KubeFATE/releases)
$ version=v1.5.0
# 下载对应版本的 KubeFATE
$ wget http://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 安装KubeFATEserver
KubeFATE利用之前你必要在 Kubernetes 上摆设 KubeFATEserver。
这部门包罗 KubeFATEserver的 namespace 和 RBAC 权限,官方默认的权限是cluster-admin,对 Kubernetes 的 RBAC 机制比力相识的可以本身修改。
还包罗 KubeFATE所利用的秘钥,MySQL 的用户名暗码和 KubeFATE的用户名暗码,摆设之前发起先修改一下。
$ kubectl apply -f rbac-config.yaml
接下来就可以摆设 KubeFATEserver了。
这个摆设包罗两部门: 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 状态正常那么阐明 KubeFATEserver已经摆设乐成。
KubeFATE下令行对接
KubeFATE下令行是 KubeFATEserver的API调用实现,通过架构图我们知道 KubeFATE摆设 FATE 是 KubeFATEserver 通过call Kubernetes API 来实现的, KubeFATE下令行与 KubeFATEserver 的通讯是通过 Ingress 袒露的 URL kubefate.net (该域名可修改)来实现,以是 KubeFATE下令行可以在恣意一台可以访问 Ingress 入口的呆板利用,只必要设置 hosts 文件即可。
比方:
$ echo"192.168.100.123 kubefate.net">>/etc/hosts
192.168.100.123 是 ingress 的入口 IP地点。
利用下令 kubefate version 查抄是否连通。
$ kubefate version
*kubefate service version=v1.2.0
*kubefate commandLine version=v1.2.0
这里报错,缘故原由一样平常有两点:
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 。
本文的 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 的信息,可以知道对应 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.kubefate.net
- 10000.fateboard.kubefate.net
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 的状态
- dashboard 是摆设FATE包罗的ingress入口
- ip 表现可以 Kubernetes 利用 NodePort 的一个 Node 的 IP 地点
- pod 表现当前 FATE 集群在kubernetes 内里全部 pod
- status 表现当前 FATE 集群全部 container 的状态
要查抄 FATE 是否成可以运行 FATE 的一些测试使命,详细怎样利用可以参考 FATE examples,也可以参考。
FATE 互联
FATE 联邦学习的实现依靠多个 Party 的数据互换,多个 Party 的互联有两种方式,分别是直连模式(网状)和 exchange(星型)。
直连模式(网状):
exchange(星型):
一个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 的设置阐明 ,大概点击阅读原文。
停止当前版本v1.5.0,FATE on Spark不支持exchange模式.
限于篇幅,更多关于KubeFATE 摆设 FATE 设置参数的具体先容,请检察这篇文章:联邦学习平台 KubeFATE 摆设 FATE 的设置阐明 ,大概点击阅读原文。
必要参加KubeFATE开源项目讨论群的同砚,请先关注亨利条记公众号,然后复兴 “ kubefate” 即可。
相干链接
- KubeFATE: http://github.com/FederatedAI/KubeFATE
- FATE: http://github.com/FederatedAI/FATE
- Kubernetes: http://kubernetes.io/
接待转发、收藏和点 “在看”。返回搜狐,检察更多