使用Kubernetes部署一个带有exchenge结点的FATE联邦学习网络

系列文章目录

FATE联邦学习框架之KubeFATE部署(基于K8S)最详细过程_顿顿有鱼有虾的博客-CSDN博客_kubefate

K8s初探入门详细教程(一)_顿顿有鱼有虾的博客-CSDN博客_k8s入门教程

快速安装docker和docker-comopose_顿顿有鱼有虾的博客-CSDN博客

k8s部署nginx服务_顿顿有鱼有虾的博客-CSDN博客


提示:以上文章有助于帮助部署完成此网络。


前言

本文记录如何使用KubeFATE部署一个以exchange为中央节点的联邦学习网络,这个网络包含一个exchange和若干个Party。由于官方文档年久失修BUG不断,因此自己记录一下配置过程。

部署结构图


 

一、预备条件

环境:CentOS7

KubeFATE版本: v1.8.0 

kubernetes部署请参考K8s初探入门详细教程(一)_顿顿有鱼有虾的博客-CSDN博客_k8s入门教程

docker、和docker-compose 部署请参考快速安装docker和docker-comopose_顿顿有鱼有虾的博客-CSDN博客

 

二、安装步骤

1.安装docker和docker-compose(略)

2.安装kubernetes

3.安装kubernetes插件

3.1安装calico插件

#使用此命令下载calico的yaml配置文件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

下载完成后需要对其进行修改

(1条消息) K8s初探入门详细教程(一)_顿顿有鱼有虾的博客-CSDN博客_k8s入门教程的init阶段我们在master节点进行了初始化主节点,其中重点强调了还有就是-pod-network-cidr=193.31.0.0/16 这个地址必须确保不会与自己的ip网络范围重叠。因此我们也需要修改calico.yaml的配置文件

vi calico.yaml
 
 
#进入calico.yaml文件后接下来执行
%s/192.168.0.0/193.31.0.0/gc
 
这里注意要去掉这一行的注释以及上一行 -name的注释 并注意格式对齐

修改完成之后使用

kubectl apply -f calico.yaml
#此命令将会开始部署calico插件。部署完成后可以进行查看,如果部署running过一段时间再来看
[root@k8s-master fate01]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
default                mynginx                                      1/1     Running   0          85m
kube-system            calico-kube-controllers-577f77cb5c-qnjb5     1/1     Running   0          107m
kube-system            calico-node-4qgkl                            1/1     Running   0          107m
kube-system            calico-node-74hf7                            1/1     Running   0          107m
kube-system            calico-node-h5hk4                            1/1     Running   0          107m
kube-system            coredns-5897cd56c4-5zbcn                     1/1     Running   0          3h4m
kube-system            coredns-5897cd56c4-qzfgk                     1/1     Running   0          3h4m
kube-system            etcd-k8s-master                              1/1     Running   0          3h4m
kube-system            kube-apiserver-k8s-master                    1/1     Running   0          3h4m
kube-system            kube-controller-manager-k8s-master           1/1     Running   0          3h4m
kube-system            kube-proxy-4ffq9                             1/1     Running   0          132m
kube-system            kube-proxy-bc7lq                             1/1     Running   0          112m
kube-system            kube-proxy-s4shd                             1/1     Running   0          3h4m
kube-system            kube-scheduler-k8s-master                    1/1     Running   0          3h4m

当显示如上之后说明calico部署成功了。

 3.2部署nginx服务

k8s部署nginx服务_顿顿有鱼有虾的博客-CSDN博客 

由于在此集群中我只设置了一个节点,因此需要执行以下命令,否则nginx的pod会一直处于pending状态

kubectl taint nodes --all node-role.kubernetes.io/master-

执行完成之后,过一会检查状态如下所示 ,则部署成功。

 4.下载kubefate

# 下载对应版本的KubeFATE,这里可以自己选择所需要的版本
$ wget https://github.com/FederatedAI/KubeFATE/releases/download/v1.8.0/kubefate-k8s-v1.8.0.tar.gz

KubeFATE安装包可以从GitHub的KubeFATE release下载(Releases · FederatedAI/KubeFATE · GitHub

解压之后安装就可以使用。

$ mkdir kubefate
$ tar -zxvf kubefate-k8s-v1.8.0.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

 换国内源

sed 's/mariadb:10/hub.c.163.com\/federatedai\/mariadb:10/g' kubefate.yaml > kubefate_163.yaml
sed 's/registry: ""/registry: "hub.c.163.com\/federatedai"/g' cluster.yaml > cluster_163.yaml

部署kubefate

kubectl apply -f ./kubefate_163.yaml

部署成功后查看

kubectl get all,ingress -n kube-fate

#显示如下则说明成功

NAME                            READY   STATUS    RESTARTS   AGE
pod/kubefate-5d97d65947-7hb2q   1/1     Running   0          51s
pod/mariadb-69484f8465-44dlw    1/1     Running   0          51s
 
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/kubefate   ClusterIP   192.168.0.111   <none>        8080/TCP   50s
service/mariadb    ClusterIP   192.168.0.112   <none>        3306/TCP   50s
 
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kubefate   1/1     1            1           51s
deployment.apps/mariadb    1/1     1            1           51s
 
NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/kubefate-5d97d65947   1         1         1       51s
replicaset.apps/mariadb-69484f8465    1         1         1       51s
 
NAME                          HOSTS          ADDRESS          PORTS   AGE
ingress.extensions/kubefate   example.com   192.168.100.123   80      50s

 接下来

sudo -- sh -c "echo \"192.168.100.123 example.com\"  >> /etc/hosts"

#ip 地址换为你自己的IP

添加完毕后,可以验证是否生效:

kubefate@machine:~/demo$ ping -c 2 example.com
PING example.com (192.168.100.123) 56(84) bytes of data.
64 bytes from example.com (192.168.100.123): icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from example.com (192.168.100.123): icmp_seq=2 ttl=64 time=0.054 ms
 
--- example.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 0.054/0.067/0.080/0.013 ms

 验证KubeFATE服务:

 这时候虽然看着是部署成功了,但是如果你使用kubefate version命令验证则会发现问题

kubefate version

会给你报个错,80端口连接失败。

 解决办法:

ls 发现当前文件下有个config.yaml文件

使用vi修改config.yaml的内容。只需要修改serviceurl: example.com:31476加上映射的端口,这个在前面有说过,如果忘记了重新查看一下80端口对应的映射端口(31476是我的映射端口你需要换成你自己的)

#查看映射端口
kubectl -n ingress-nginx get svc


[root@control-plane demo]# kubectl -n ingress-nginx get svc
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.100.227.20   <none>        80:31476/TCP,443:32344/TCP   23h
ingress-nginx-controller-admission   ClusterIP   10.111.26.99    <none>        443/TCP                      23h

再次验证发现成功。

5. 部署exchage节点

进入当前目录下的examples文件夹中可以看到三个文件夹,其中有一个是party-exchage

在部署exchage节点之前,记得创建一下fate-exchage的命名空间

kubectl create namespace fate-exchage

下面开始修改exchange节点的配置文件,编辑 vi rollsite.yaml

name: fate-exchange
namespace: fate-exchange
chartName: fate-exchange
chartVersion: v1.8.0         #注意这个一定要写,一开始没写会报错
partyId: 1
registry: "hub.c.163.com/federatedai"   #换成国内镜像仓库,也可以不换,我感觉换了会快一点
imageTag: "1.8.0-release"
pullPolicy: 
imagePullSecrets: 
- name: myregistrykey
persistence: false
istio:
  enabled: false
modules:
  - rollsite

rollsite: 
  type: NodePort
  nodePort: 30000
  partyList:
  - partyId: 10000
    partyIp: 192.168.100.10      #自己需要添加的参与方10000的IP
    partyPort: 30101
  - partyId: 9999
    partyIp: 192.168.100.9        #自己需要添加的参与方9999的IP
    partyPort: 30091
  - partyId: 8888
    partyIp: 192.168.100.8       #自己需要添加的参与方8888的IP
    partyPort: 30081

 修改完成后执行部署,注意这时候的执行目录要退回到kubefate目录下,不应该是在examples/party-exchage目录下

kubefate cluster install -f ./examples/party-exchage/rollsite.yaml
#查看cluster的状态是否是Running确认是否成功运行。

kubefate cluster ls

下载镜像可能需要一些时间,过一会会发现,状态已经是running了,说明已经部署好了exchge节点。

添加Party

对应已经运行的exchange集群,新的Party加入,需要新增加Party信息,那么你可以修改rollsite.yaml 文件添加新的Party。然后呢使用kubefate的update命令更新到exchange集群。

kubefate cluster update -f ./examples/party-exchage/rollsite.yaml

然后稍等片刻就可以生效(这是因为程序对party信息的加载有一个小的时间周期)。

配置Party

刚刚已经配置好了exchange节点,现在需要配置参与方party,下面以9999为例子。

在一台新的虚拟机中重复上述(一直到部署exchege节点之前)步骤,然后开始配置party节点的配置文件。进入当前目录下的examples文件夹中可以看到三个文件夹,其中有一个是party-9999

进入该文件夹下,打开cluster.yaml文件,修改配置文件内容

$ cat cluster.yaml
name: fate-9999
namespace: fate-9999
chartName: fate
chartVersion: v1.8.0
partyId: 9999
registry: ""
imageTag: "1.8.0-release"
pullPolicy: 
persistence: false
istio:
  enabled: false
modules:
  - rollsite
  - clustermanager
  - nodemanager
  - mysql
  - python
  - fateboard
  - client

backend: eggroll

rollsite: 
  type: NodePort
  nodePort: 30091
  exchange:
    ip: 192.168.100.1  #修改为自己刚配置的exchange节点的ip
    port: 30000

配置完成后验证

kubefate cluster install -f ./examples/party-9999/cluster.yaml
#查看cluster的状态是否是Running确认是否成功运行。

kubefate cluster ls

配置10000和8888的步骤同上,至此三个party就全部配置完成了。

验证 

通过上边的部署,我们已经成功部署了通过exchange互联的联邦学习网络,包含三个Party,计算引擎为eggroll。下面我们通过一些测试检查联邦学习网络的可用性。

多方连接测试

每个不同的两方测试toy_example确认双方互通。

  1. Party-9999和Party-10000

    通过命令行进入Party-9999的python container。然后运行toy命令

    kubectl -n fate-9999 exec -it ${python容器名称} -c python -- bash
    cd ../examples/toy_example/
    python run_toy_example.py 9999 10000 1 
  2. Party-10000和Party-8888

    kubectl -n fate-10000 exec -it  ${python容器名称}  -c python -- bash
    cd ../examples/toy_example/
    python run_toy_example.py 10000 8888 1 
  3. Party-8888和Party-9999

    kubectl -n fate-8888 exec -it  ${python容器名称}  -c python -- bash
    cd ../examples/toy_example/
    python run_toy_example.py 8888 9999 1 

最后日志出现类似success to calculate secure_sum, it is 2000.0000000000002则表示toy_example互通测试成功。

总结

欢迎大家一起交流学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值