在Kubernets上部署RAP2(使用Helm)
需要找一个合适的API设计工具,考察了YAPI,RAP2,还有不成系统的RAML,暂定RAP2。
前端:https://github.com/thx/rap2-dolores
后端:https://github.com/thx/rap2-delos
在线Demo:http://rap2.taobao.org/
DockerHub:https://hub.docker.com/r/rapteam/rap2-delos
RAP2,官方是推荐用docker-compose安装的,安装也很方便,但是要利用现有的基础设置,
需要琢磨一下如何在Kubernetes上部署,总体还算简单,步骤如下。
安装前提:
- 已部署Kubernetes环境
- 已在Kubernetes设置好默认的StorageClass
- Node机器上可以正常使用kubectl
1. download 现有compose文件
#wget https://raw.githubusercontent.com/thx/rap2-delos/master/docker-compose.yml
2.download kompose
Kompose是Docker Compose到容器编排器(如Kubernetes(或OpenShift))的转换工具。
https://kompose.io/
#curl -L https://github.com/kubernetes/kompose/releases/download/v1.24.0/kompose-linux-amd64 -o kompose
#chmod u+x kompose
#mv kompose /usr/local/bin
3.将compose文件转为helm chart(在compose目录下)
重要的一部,将compose文件转成Helm chart(也可直接转为k8s文件)
#kompose convert --chart
默认生成的目录是docker-compose,为好辩识改名为rap2-helm
#mv docker-compose rap2-helm
4.删除错误设置(直接改compose文件也可)
似乎官方好久没有维护了,compose文件中存在问题,导致生成的k8s文件也有问题,需要如下修改:
#vim mysql-deployment.yaml
删除如下的MYSQL_USER的环境变量设置
40 - name: MYSQL_USER
41 value: root
5.增加mysql和redis的服务(要通过服务名访问)
根据现有dolores-service.yaml文件对应复制,修改即可(服务名和端口)
mysql的端口:3306
redis的端口:6379
如mysql-service.yaml ,redis的内容一样,只需要修改服务名为redis,端口为6379即可。
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert --chart
kompose.version: 1.24.0 (4a2a0458)
creationTimestamp: null
labels:
io.kompose.service: mysql
name: mysql
spec:
ports:
- name: "3306"
port: 3306
targetPort: 3306
selector:
io.kompose.service: mysql
status:
loadBalancer: {}
最后做成的有如下文件:
- delos-service.yaml
- delos-deployment.yaml
- dolores-service.yaml
- dolores-deployment.yaml
- redis-deployment.yaml
- redis-service.yaml (新做)
- mysql-claim0-persistentvolumeclaim.yaml
- mysql-deployment.yaml (需要修改)
- mysql-service.yaml (新做)
6. 执行安装
在rap2-helm的同层目录执行(本地chart)
#helm install my-rap2 rap2-helm
#helm ls
如果以上yaml修改的不对,修改可以重新upgrade,可执行多次
#helm upgrade my-rap2 rap2-helm
安装完成后,可以看到service和pod状况。如果没有修改上述的mysql设置,则mysql的pod不能运行成功。
7.DB初始化
原有的docker-compose模式中,需要执行DB初始化。是通过如下docker-compose excute命令执行的:
docker-compose exec delos node scripts/init
改成Kubernets后,需要手工连接到delos的pod下执行。可在K8S上进入delos pod的终端,或者通过kubectl连接到pod。
在/app目录下执行,原有初始化命令:
#node scripts/init
如果一切正常,可以看到数据被成功初始化。
8. 改为NodePort端口访问
在原有docker-compose模式下,直接装在宿主机上,端口是可以直接访问的,换成k8s,默认是ClusterIP形式。
为了使用方便,将访问方式从ClusterIP改为NodePort。当然也可以使用ingress做导出。
修改delos-service.yaml和dolores-service.yaml文件,
9. 在Node节点上做端口映射
因为rap2的镜像内部似乎是硬编码了delos的38080端口,无法修改。
而kubernetes上用nodeport只能映射最大32627的端口,所以只能在Node节点上做手工端口映射。
如节点ip是172.28.74.31
后端delos的Nodeport端口为:32720,执行以下命令做本地端口映射(Linux)
#ssh -gqTfnNL 38080:172.28.74.31:32720 localhost
10. 访问
dolores的Nodeport端口为:30263,浏览器访问如下URL即可。
http://172.28.74.31:30263/
终于可以访问了。
最后,修改后的helm chart打包如下,可以直接使用,一键安装。
https://download.youkuaiyun.com/download/ydogg/85966850