moonbox接入k8s

github地址:https://github.com/JayeShen/Moonbox-k8s/tree/main

前提

moonbox开发时k8s并不流行,所以使用ip+port的方式接入,但是k8s环境中,k8s的pod会经常变化,所以需要使用服务发现的方式接入。

这里我开发一个moonbox-agent给被测应用使用,通过服务发现的方式接入moonbox。

moonbox-agent需要以pre方式agent到被测应用,在pod中通过netty控制moonbox、sandbox的启停。

架构图

在这里插入图片描述

步骤

1、数据库新增服务管理表

create table sys_app
(
    id                  bigint                                 not null  AUTO INCREMENT COMMENT comment '自增主键'
        primary key,
    system_code         varchar(128)                            null comment '系统编码',
    system_name         varchar(128)                            null comment '系统名称',
    app_name            varchar(128)                            not null comment '项目名',
    channel_id          varchar(128)                            null comment 'netty管道id',
    last_heartbeat_time timestamp default CURRENT_TIMESTAMP     not null on update CURRENT_TIMESTAMP comment '最后上报时间',
    ip                  varchar(128)                            null comment '机器ip',
    remark              varchar(255)                            null comment '补充字段',
    creator             varchar(128)                            null comment '创建人',
    app_env             varchar(128)                            null comment '环境',
    create_time         timestamp default '0000-00-00 00:00:00' not null comment '创建时间',
    update_time         timestamp default '0000-00-00 00:00:00' comment '更新时间',
    online_state        int(2)                                  null comment '数据删除状态,1在线,0为离线',
    constraint idx_channel_id
        unique (channel_id)
);

2、moonbox-server端开启一个netty服务

修改moonbox-web中application.properties

moonbox.netty.server.port=7777

3、打包moobox-proxy

在moonbox-agent/moonbox-proxy下修改moonbox-proxy.properties

#moonbox服务端ip
moonbox.netty.server.ip=10.56.34.68
#moonbox服务端netty端口
moonbox.netty.server.port=7777

在moonbox-agent/moonbox-proxy下执行mvn clean package -Dmaven.test.skip=true

将target下生成的jar包上传到服务器
在这里插入图片描述

4、修改被测应用启动脚本,添加参数

例如:

java -XX:+StartAttachListener -javaagent:/moonbox/moonbox-proxy-1.0.0-SNAPSHOT.jar -jar -DsystemCode=“base” -DsystemName=“基础服务” -DappName=“gh-util-base-proxy” -Denv=sit demo.jar

参数说明:

-javaagent参数表示启动字节码增强

-XX:+StartAttachListener参数表示开启attach机制,在jvm启动时进行字节码增强

-DsystemCode参数表示系统编码,在moonbox中用于区分不同的系统

-DsystemName参数表示系统名称,在moonbox中用于区分不同的系统

-DappName参数表示应用名称,在moonbox中用于区分不同的应用

-Denv参数表示应用环境,在moonbox中用于区分不同的应用环境

在这里插入图片描述

5、启动moonbox-server

在这里插入图片描述

6、启动被测应用

我不想在镜像中安装太多软件,例如curl、dos2unix,或者有的项目组在公司没有操作基础镜像的权限,所以在moonbox-agent中只运行这一段命令:sh ~/.sandbox-module/bin/start-remote-agent.sh " + appName +" "+ taskConfig
在这里插入图片描述

将moonbox启动所需文件和文件夹直接打包在docker镜像的中(必须是根目录),或者通过k8s的configmap挂载到容器中

具体包括:

文件夹:.sandbox-module/、、sandbox/,文件.sandbox.token

在这里插入图片描述

有下面日志就表示moonbox-agent启动成功,其日志路径和日志级别可以在log4j2.xml中配置
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐