## RMDC-K8S 部署方案

### 构建
1. 前提条件
    1. 已经存在k8s集群
    2. 已经存在harbor仓库 harbor.wdd.io:8033
    3. 构建主机 192.168.35.80 已经存在go环境 node环境 docker环境


2. 需要实现的内容,在windwos实现powershell脚本,实现如下的功能
    1. 将本地的代码通过rsync推送至192.168.35.80的工作目录
    2. 在192.168.35.80实现代码的编译工作
        1. 前端使用node构建
        2. 后端使用go构建
        3. 构建产物放置于项目目录 rmdc-k8s-deploy/build目录下
    3. 在192.168.35.80实现dockerfile构建，以下为不同的模块
        1. 构建的dockerfile放置于项目目录 rmdc-k8s-deploy/dockerfile目录下
        2. 构建RMDC-Frontend前端代码
            1. 基础镜像为 harbor.wdd.io:8033/rmdc/nginx:1.27.0
            2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-frontend:${日期}
            3. 前端代码构建需要有生产环境构建的配置
            4. 前端代码的API调用的HOST 需要根据实际访问的域名进行配置
        3. 基础后端镜像构建
            1. 基础镜像为 harbor.wdd.io:8033/rmdc/alpine:3.23.0
            2. 指定docker的环境变量,时区等信息
            3. 安装常用的基础工具 ping curl telnet netcat nmap mtr traceroute
            4. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-backend-base:1.0
        4. 构建RMDC-Backend后端代码
            1. 基础镜像为 harbor.wdd.io:8033/rmdc/rmdc-backend-base:1.0
            2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-backend:${日期}
        5. 构建RMDC-watchdog镜像
            1. 基础镜像使用 harbor.wdd.io:8033/rmdc/rmdc-watchdog-base:1.0
                1. 参考[Dockerfile.backend-base](rmdc-k8s-deploy/dockerfile/Dockerfile.backend-base), 安装必要的工具
            2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-watchdog:${日期}
        6. 构建RMDC-watchdog-node镜像
            1. 基础镜像使用 harbor.wdd.io:8033/rmdc/rmdc-watchdog-base:1.0
            2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-watchdog-node:${日期}
    4. 在192.168.35.80实现harbor推送,将构建好的镜像推送至harbor仓库
    5. 此脚本能够通过参数，指定需要构建的模块
        1. 前端
        2. 后端
        3. RMDC-watchdog
        4. RMDC-watchdog-node
        5. RMDC-watchdog-agent

### K8S-YAML文件
1. RMDC组件需要实现的内容
    1. 部署文件需要放置于项目目录 rmdc-k8s-deploy/rmdc-app目录下
    2. 命名空间为 cmii-rmdc
    3. 为RMDC-frontend实现Deployment和Service如果此模块构建,则需要更新该yaml中的Tag如果此模块构建,则需要更新该yaml
        2. 镜像为 harbor.wdd.io:8033/rmdc/rmdc-frontend:${日期}
        3. 副本数量为1
        4. 端口暴露及Service端口
    3. 为RMDC-backend实现Deployment和Service
        1. 如果此模块构建,则需要更新该yaml中的Tag
        2. 镜像为 harbor.wdd.io:8033/rmdc/rmdc-backend:${日期}
        3. 副本数量为1
        4. 端口暴露及Service端口
        5. 如果此模块构建,则需要更新该yaml
    4. 实现Ingress部分
        1. Ingress的域名均采用 rmdc.titanium-bullhorses.io
        2. 最好在一个Ingress文件中实现
        3. 前端Ingress
        4. API接口的Ingress
2. RMDC-watchdog组件需要实现的内容
    1. 部署文件需要放置于项目目录 rmdc-k8s-deploy/rmdc-watchdog目录下
    2. 命名空间为 cmii-rmdc
    3. 为RMDC-watchdog实现Deployment和Service
        1. 如果此模块构建,则需要更新该yaml中的Tag
        2. 镜像为 harbor.wdd.io:8033/rmdc/rmdc-watchdog:${日期}
        3. 副本数量为1
        4. 端口暴露及Service端口
    4. RMDC-watchdog-node组件需要实现的内容
        1. 如果此模块构建,则需要更新该yaml中的Tag
        2. 镜像为 harbor.wdd.io:8033/rmdc/rmdc-watchdog-node:${日期}
        3. 副本数量为1
        4. 端口暴露及Service端口


## RMDC-watchdog-agent部分
部署文件需要放置于项目目录 rmdc-k8s-deploy/rmdc-uav目录下

### uav后端JAVA的基础镜像
1. 提供基于openjdk11 17 21的版本
2. 需要能够正确的显示中文日志及字符
3. 安装尽可能丰富的基础工具类
4. 需要指定JVM的时区为Asia/Shanghai
5. 需要设置java的PATH环境变量
6. 需要设置JAVA_HOME环境变量
7. 端口暴露为 EXPOSE 8080
8. 参考为 [Dockerfile-base-java17](rmdc-k8s-deploy/rmdc-uav/base-image/Dockerfile-base-java17)
9. 基础镜像需要尽可能的小
10. 需要修改使用国内的镜像源
11. 最好基于 harbor.wdd.io:8033/rmdc/alpine:3.23.0

    
#### 不嵌入RMDC-watchdog-agent的时候,
1. 使用传统的start_up.sh 即为ENTRYPOINT ["./start_up.sh"]
2. 需要构建 镜像名为 harbor.wdd.io:8033/rmdc/openjdk17-base-tools:1.0
3. 需要同时 进行Tag为harbor.cdcyy.com.cn/cmii/openjdk17-base-tools:3.0 并且推送该镜像


#### 当嵌入RMDC-watchdog-agent时候
1. 需要go进行build 得到RMDC-watchdog-agent的压缩包
    1. 需要记录构建出来二级制文件,命名规则为 rmdc-watchdog-agent-${日期}
2. 构建RMDC-watchdog-agent镜像
    1. 需要内嵌rmdc-watchdog-agent版本信息的环境变量 RMDC_WATCHDOG_AGENT_VERSION=${日期}
    2. OpenJDK-17版本   
        1. 基础镜像使用 harbor.wdd.io:8033/rmdc/openjdk17-base-tools:1.0
        2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-watchdog-agent-jdk17:1.0
    3. OpenJDK-11版本
        1. 基础镜像使用 harbor.wdd.io:8033/rmdc/openjdk11-base-tools:1.0
        2. 镜像命名为 harbor.wdd.io:8033/rmdc/rmdc-watchdog-agent-jdk11:1.0
3. 内嵌RMDC-watchdog-agent的时候, uav后端程序需要使用ENTRYPOINT ["/cmii/cmii-watchdog-agent", "-business-program-type", "java", "-business-program-path", "/cmii/jarfile.jar"]进行启动