-
Notifications
You must be signed in to change notification settings - Fork 222
在TKG上使用KubeFATE部署FATE
TKG(Tanzu Kubernetes Grid) 集群是由 VMware 构建、签名和支持的开源 Kubernetes 容器编排平台的完整分发版。可以通过使用 Tanzu Kubernetes Grid 服务在主管集群上置备和运行 Tanzu Kubernetes 集群。主管集群是启用了 vSphere with Tanzu 的 vSphere 集群。
接下来我们一起看下如何在TKG上运行FATE。
item | version |
---|---|
Kubernetes | v1.18.15+vmware.1 |
KubeFATE | v1.6.0-a |
由于我们会在两个集群分别安装FATE,所有操作都在同一个host上,所以我们首先分别准备两个工作目录,分别是PartyA
和PartyB
。
(PartyA)$ # 这个代表运行在PartyA的命令
(PartyB)$ # 这个代表运行在PartyB的命令
$ # 这个代表在两个工作目录同时运行
项 | PartyA | PartyB |
---|---|---|
PartyID | 9999 | 10000 |
KubeFATE serviceurl | partya.example.com | partyb.example.com |
Kubernetes context | tkc-1 | tkc-2 |
ingress IP | 192.168.18.131 | 192.168.20.135 |
Kubernetes context通过登录到TKC获得,ingress IP
通过安装ingress-controller后查看。
这里,我们已经准备了两个TKC集群,使用kubectl vsphere login
登录后,分别查看对应的k8s版本信息。
(PartyA)$ kubectl --context=tkc-1 version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.15+vmware.1", GitCommit:"9a9f80f2e0b85ce6280dd9b9f1e952a7dbf49087", GitTreeState:"clean", BuildDate:"2021-01-19T22:59:52Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
(PartyB)$ kubectl --context=tkc-2 version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.15+vmware.1", GitCommit:"9a9f80f2e0b85ce6280dd9b9f1e952a7dbf49087", GitTreeState:"clean", BuildDate:"2021-01-19T22:59:52Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
如果无法访问dockerhub,需要下载镜像上传到对应的worknode或者自己harbor上。我们本次安装直接使用dockerhub下载。
由于我们可以直接访问GitHub也可以不用手动下载chart。如果是离线环境则需要下载并上传chart文件,fate-v1.6.0-a.tgz。
安装一个ingress-controller(例如ingress-nginx)。安装完成后分别通过kubectl get svc -n ingress-nginx
获得ingress IP。
(PartyA)$ kubectl --context=tkc-1 get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.108.42.103 192.168.18.131 80:32250/TCP,443:32437/TCP 1d
ingress-nginx-controller-admission ClusterIP 10.99.180.187 <none> 443/TCP 1d
(PartyB)$ kubectl --context=tkc-2 get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.102.226.6 192.168.20.135 80:30036/TCP,443:30941/TCP 1d
ingress-nginx-controller-admission ClusterIP 10.104.177.237 <none> 443/TCP 1d
上面的环境全部准备完毕,我们就可以开始在TKG上安装KubeFATE和FATE了。
下载安装包文件
$ curl -LO https://github.com/FederatedAI/KubeFATE/releases/download/v1.6.0/kubefate-k8s-v1.6.0.tar.gz && tar -xzf ./kubefate-k8s-v1.6.0.tar.gz
$ ls
cluster-serving.yaml cluster-spark.yaml cluster.yaml config.yaml examples kubefate kubefate-k8s-v1.6.0.tar.gz kubefate.yaml rbac-config.yaml
安装KubeFATE命令工具。
$ chmod +x ./kubefate && sudo mv ./kubefate /usr/bin
KubeFATE命令行工具使用golang编写,你也可以自己编译。
分别在两个TKC kubernetes上安装KubeFATE service。
(PartyA)$ kubectl --context=tkc-1 apply -f ../rbac-config.yaml
(PartyB)$ kubectl --context=tkc-2 apply -f ../rbac-config.yaml
修改KubeFATE serviceurl
(PartyA)$ cat ./kubefate.yaml
...
spec:
rules:
- host: partya.example.com
http:
paths:
...
(PartyB)$ cat ./kubefate.yaml
...
spec:
rules:
- host: partyb.example.com
http:
paths:
...
写入hosts文件
(PartyA)$ echo "192.168.18.131 partya.example.com" >> /etc/hosts
(PartyB)$ echo "192.168.20.135 partyb.example.com" >> /etc/hosts
如果使用私有镜像仓库,就需要修改kubefate.yaml
中镜像相关的字段。
修改config.yaml
的serviceurl
。
(PartyA)$ cat config.yaml
# TODO
# persistent layer
log:
level: info
user:
username: admin
password: admin
serviceurl: partya.example.com
(PartyB)$ cat config.yaml
# TODO
# persistent layer
log:
level: info
user:
username: admin
password: admin
serviceurl: partyb.example.com
操作完上面的步骤,我们通过kubefate version
查看KubeFATE环境是否安装完成。
(PartyA)$ kubefate version
* kubefate commandLine version=v1.4.1
* kubefate service version=v1.4.1
(PartyB)$ kubefate version
* kubefate commandLine version=v1.4.1
* kubefate service version=v1.4.1
如果出现kubefate service version=
说明安装成功。
两方的KubeFATE环境已经完成接下来,就可以安装FATE了。
我们TKC是支持LoadBalancer的,所以我们的FATE暴露通过LoadBalancer。
(PartyA)$ cat cluster.yaml
name: fate-9999
namespace: fate-9999
chartName: fate
chartVersion: v1.6.0-a
partyId: 9999
registry: ""
imageTag: ""
pullPolicy:
imagePullSecrets:
- name: myregistrykey
persistence: false
istio:
enabled: false
podSecurityPolicy:
enabled: true # TKC 集群默认是开启podSecurityPolicy验证的,这里需要配置true
modules:
- rollsite
- clustermanager
- nodemanager
- mysql
- python
- fateboard
- client
backend: eggroll
rollsite:
type: LoadBalancer
nodePort: 30091
(PartyB)$ cat cluster.yaml
name: fate-10000
namespace: fate-10000
chartName: fate
chartVersion: v1.6.0-a
partyId: 10000
registry: ""
imageTag: ""
pullPolicy:
imagePullSecrets:
- name: myregistrykey
persistence: false
istio:
enabled: false
podSecurityPolicy:
enabled: true # TKC 集群默认是开启podSecurityPolicy验证的,这里需要配置true
modules:
- rollsite
- clustermanager
- nodemanager
- mysql
- python
- fateboard
- client
backend: eggroll
rollsite:
type: LoadBalancer
nodePort: 30101
部署FATE前需要先创建对应namespace。
(PartyA)$ kubectl --context=tkc-1 create namespace fate-9999
(PartyB)$ kubectl --context=tkc-2 create namespace fate-10000
然后kubefate命令部署
(PartyA)$ kubefate cluster install -f cluster.yaml
(PartyB)$ kubefate cluster install -f cluster.yaml
等待部署成功
(PartyA)$ kubefate job describe <jobID> # 上一步安装cluster会获得<jobID>
(PartyB)$ kubefate job describe <jobID> # 上一步安装cluster会获得<jobID>
等待job状态成为Success
,表示部署成功。
也可以通过kubefate cluster list
、kubefate cluster describe <clusterID>
查看cluster的状态为Running,表示部署成功。
由于LoadBalancer的IP是LoadBalancer服务实时分配的,所以需要安装完成FATE后,然后再互相配置对方的地址信息。
(PartyA)$ kubectl --context=tkc-1 get svc/rollsite -n fate-9999
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rollsite LoadBalancer 10.103.75.93 192.168.18.132 9370:30091/TCP 12m
(PartyB)$ kubectl --context=tkc-2 get svc/rollsite -n fate-10000
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rollsite LoadBalancer 10.99.31.113 192.168.20.136 9370:30101/TCP 12m
通过上述命令分别获得双方的rollsite的LoadBalancer的IP。
在cluster.yaml互相配置对方信息
(PartyA)$ cat cluster.yaml
...
rollsite:
type: LoadBalancer
nodePort: 30091
partyList:
- partyId: 10000
partyIp: 192.168.20.136
partyPort: 9370
(PartyB)$ cat cluster.yaml
...
rollsite:
type: LoadBalancer
nodePort: 30101
partyList:
- partyId: 9999
partyIp: 192.168.18.132
partyPort: 9370
接着更新配置信息
(PartyA)$ kubefate cluster update -f cluster.yaml
(PartyB)$ kubefate cluster update -f cluster.yaml
等待job状态为Success
或者cluster状态为Running
表示更新成功。
运行toy_example检查
(PartyA)$ kubectl --context=tkc-1 exec -it svc/fateflow -c python -n fate-9999 -- bash
(app-root) bash-4.2# cd /data/projects/fate/examples/toy_example/
(app-root) bash-4.2# python run_toy_example.py 9999 10000 1
...
最后日志出现类似success to calculate secure_sum, it is 2000.0000000000002
则表示toy_example互通测试成功
我们在前边的部署中部署了fateboard组件,那么默认情况下可以通过访问http://.fateboard.example.com来查看fateboard页面。
当然在查看之前需要写入hosts文件
(PartyA)$ echo "192.168.18.131 party9999.fateboard.example.com" >> /etc/hosts
(PartyB)$ echo "192.168.20.135 party10000.fateboard.example.com" >> /etc/hosts
然后就可以通过URL查看fateboard页面页面了。
notebook页面与FATEBoard类似,我们也在前边的部署中部署了client组件,那么默认情况下可以通过访问http://.notebook.example.com来查看notebook页面。
当然在查看之前需要写入hosts文件
(PartyA)$ echo "192.168.18.131 party9999.notebook.example.com" >> /etc/hosts
(PartyB)$ echo "192.168.20.135 party10000.notebook.example.com" >> /etc/hosts
然后就可以通过URL查看notebook页面页面了。
前边的配置都是使用默认URL,我们也可以通过配置使用自定义的URL。类似如下配置:
(PartyA)$ cat cluster.yaml
...
host:
fateboard: party9999.fateboard.vmware.com
client: party9999.notebook.vmware.com
...
(PartyB)$ cat cluster.yaml
...
host:
fateboard: party10000.fateboard.vmware.com
client: party10000.notebook.vmware.com
...
然后配置hosts文件。
(PartyA)$ echo "192.168.18.131 party9999.notebook.vmware.com" >> /etc/hosts
(PartyB)$ echo "192.168.20.135 party10000.notebook.vmware.com" >> /etc/hosts
然后我们更新kubefate cluster update更新cluster配置。更新完成之后,就可以通过 自定义的URL访问UI界面了。
Welcome to KubeFATE's wiki page.