# minDeploy **Repository Path**: leadkj/min-deploy ## Basic Information - **Project Name**: minDeploy - **Description**: 对helm3 sdk封装,提供相应接口在k8s中部署服务 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-07-13 - **Last Updated**: 2022-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 服务启动说明 * k8s认证信息,当前用户目录下要有.kube/config文件,能够和k8s 通信。 * 服务默认使用sqlite3存储数据,数据文件存在程序当前目录下my.db,如果要使用mysql需要给运行操作系统配置环境 变量,如下: | 名称 | 说明 | | ---- | ---- | | DB_TYPE | mysql,默认sqlite | | DB_HOST | 主机 | | DB_PORT | 端口 | | DB_USER | 账号 | | DB_PASS | 密码 | | DB_NAME | 数据库 | * 执行命令启动 ``` go run main.go ``` ## docker 环境运行 * 在当前目录下执行go build 或者make 命令,生产二进制文件 ``` go build -o minDeploy main.go 或者 make ``` * 执行docker build 命令生成镜像文件. 注意生成二进制文件都系统平台要和Dockerfile中基础镜像系统平台一致,默认 Dockerfile基础镜像系统为centos,所以二进制文件要在centos系列操作系统下生成。 ``` docker build mindeploy:v1.0.0 . ``` * 执行docker run 命令运行容器,主机k8s config文件都挂载,如果使用mysql ,环境变量都传入,下面是例子 ``` docker run -d -v /root/.kube/config:/root/.kube/config -e DB_TYPE=mysql -e DB_HOST=127.0.0.1 -e DB_PORT=3306 -e DB_USER=root -e DB_PASS=root -e DB_NAME=minDeploy mindeploy:v1.0.0 ``` ## 接口说明: ### 1. 部署chart * 接口地址: /api/install * ContentType: application/json * 入参示例: ``` { "name": "demo", "namespace": "test", "replicas": 1, "image": "nginx:latest", "ports": [ { "name": "http-80", "containerPort": 80, "protocol": "TCP" }, { "name": "http-3306", "containerPort": 3306, "protocol": "TCP" } ], "servicePorts": [ { "name": "http-80", "protocol": "TCP", "targetPort": 80, "port": 80 }, { "name": "http-3306", "protocol": "TCP", "targetPort": 3306, "port": 3306, "nodePort": 30006 } ], "serviceType": "NodePort", "env": [ { "name": "username", "value": "admin" }, { "name": "password", "value": "mypass" } ], "imagePullPolicy": "IfNotPresent", "resources": { "limits": { "cpu": "100m", "memory": "500M" }, "requests": { "cpu": "100m", "memory": "500M" } }, "volumeMounts": [ { "name": "dnsfile", "mountPath": "/etc/resolv.conf", "readOnly": true } ], "volumes": [ { "name": "dnsfile", "hostPath": { "path": "/etc/resolv.conf", "type": "File" } } ], "dAnnotations": { "key1": "value1" }, "sAnnotations": { "key1": "value1" }, "affinity": {}, "startupProbe": {}, "livenessProbe": {}, "readinessProbe":{} } ``` * 必传参数:[name,namespace,replicas,image,ports,servicePorts,serviceType],其他参数可选。 * 响应示例 ``` { "name": "demo", "namespace": "test", "processId": "mgqsriOjD7O4NZOlE66Tc16Mx" } ``` ### 2. 删除Release * 接口地址: /aip/uninstall * ContentType: application/json * 入参示例: ``` { "name":"demo", "namespace":"test" } ``` * 必传参数:[name,namespace] * 响应示例 ``` { "name": "demo", "namespace": "test", "processId": "00uEyfdIbHRSD0xmuZKbUZlTR" } ``` ### 3. 更新Release * 接口地址: /api/upgrade * ContentType: application/json * 入参示例: 和安装chart接口入参相同 * 必传参数:[没有必传参数] * 响应示例: ``` { "name": "demo", "namespace": "test", "processId": "00uEyfdIbHRSD0xmuZKbUZlTR" } ``` ### 4. 获取Release 列表 * 接口地址: /api/list * ContentType: application/json * 入参示例: ``` { "namespace": "test" } ``` * 必传参数:[namespace] * 响应示例 ``` { "namespace": "test", "processId": "OBdRRNgSsnTEqyAP6BVYQ9r0v-1658478912846836" } ``` ### 5. 获取Release * 接口地址: /api/get * ContentType: application/json * 入参示例: ``` { "name": "demo", "namespace": "test" } ``` * 必传参数:[name,namespace] * 响应示例 ``` { "name": "demo", "namespace": "test", "processId": "OBdRRNgSsnTEqyAP6BVYQ9r0v-1658478912846836" } ``` ### 6. 获取执行结果 * 接口地址: /api/result * ContentType: application/json * 入参示例: ``` { "processId": "n9TMM5SXxTxD4sbk7TsLgiZmq1658478821208428" } ``` * 必传参数:[processId] * 响应示例 ``` [ { "id": 6, "type": "Install", "status": "deployed", "info": "Install complete", "process_id": "n9TMM5SXxTxD4sbk7TsLgiZmq1658478821208428", "value": "", "release_name": "demo", "release_namespace": "test", "create_at": "0001-01-01T00:00:00Z", "delete_at": null } ] ```