1 集群上传与apiserver联调
没有tmux如何上传???
docker run -d -p 8000:8000 \
-v /data:/app/public --name go --privileged \
--restart=always\
codeskyblue/gohttpserver --upload --delete
会上传空字符串,apiserver将其解析为name=pane_info=""的记录
(base) [sunye@BJ-IDC1-10-10-15-115 ~]$ wget -qO- http://go.d5.sensetime.com/sunye/202206/apiserver/utils/upload_tmux_session.sh | sh
Uploading tmux session...
ip: 10.10.15.115
user: sunye
updated_time: Thu Jun 16 15:14:18 2022
no server running on /tmp/tmux-900022744/default
no server running on /tmp/tmux-900022744/default
no server running on /tmp/tmux-900022744/default
INFO:
all: {"ip":"10.10.15.115","updated_time":"Thu Jun 16 15:14:18 2022","info":";"}
"No sessions. Nothing changed"
Successfully upload to ostrich apiserver, result at http://testapi.ostrich.sensetime.com/v1/ostrich/tmuxsession/sunye
{
"ip": "10.10.15.115",
"name": "",
"pane_info": "",
"updated_time": "2022-06-16 15:14:11",
"user_id": 13
}
如何设置用户crontab?
- 使用quota一样的方式:不可靠
- 脚本设置crontab:https://blog.csdn.net/leonnew/article/details/120227599
- 是否能检测用户已经添加了上传tmux session的crontab?
通过下述命令一键安装上传到
# 1. 无crontab时仍然执行
# 2. 避免收到通知
# 3. 能够检测到以前设置过的upload
# 4. 每10分钟上传一次
# 5. 运行后立即上传
echo `crontab -l > conf` && sed -i "/upload_tmux_session.sh/d" conf \
&& echo "0,10,20,30,40,50 * * * * wget -qO- http://go.d5.sensetime.com/sunye/202206/apiserver/utils/upload_tmux_session.sh \
| sh > /dev/null 2>&1" >> conf && crontab conf && rm -f conf \
&& wget -qO- http://go.d5.sensetime.com/sunye/202206/apiserver/utils/upload_tmux_session.sh \
| sh
操控远程安装上传tmux session agent
用户登录了mtc_web进入对应的集群时:查询API中是否存在改ip的tmux session信息,如不存在,或者时间过期(>10min),则自动登录ip去安装!
具体的,add_machine函数调用时,启动了新的ws,在sshTerm.vue
> created() > connectHost() 中调用
每次登录到集群都会判断tmux上传是否过期,运行指令设置crontab
中文date???
由于在某些机器上日期为中文导致apiserver不能解析,必须使用格式化字符串的方式
all: {"ip":"10.10.17.32","updated_time":"2022年 06月 17日 星期五 15:39:20 CST","info":";"}
"Invalid updated_time format"
[sunye@BJ-IDC1-10-10-17-32 ~]$ date
2022年 06月 17日 星期五 15:40:29 CST
改为date +'%Y-%m-%d %H:%M:%S'
,联调apiserver,同接受多种时间格式
2 前端获取到tmux session信息并渲染到cluster&job页面
打开web时获取tmux session并存储到全局
与real_machines逻辑一致,在machines页面如果信息不存在,就获取并解析
注意tmux是一个字典,每个ip是一个key,而不是每个session是一个key,这里需要对于apiserver的输出做处理,具体见machine.js
async get_tmux(content) {
console.log('getting tmux')
this.loading = true
let res = await get_tmux_session(
'sunye'
// this.$route.query['name'] || this.$store.getters.username
)
let sessions = res.data
// clusters = jobs
let tmux = new Map()
sessions.forEach(session => {
let time_diff = new Date().getTime() - new Date(session['updated_time']).getTime()
if (time_diff < 605 * 1000) {
let ip = session['ip']
if (tmux.get(ip) == undefined) tmux.set(ip, [])
tmux.get(ip).push(session)
}
})
this.loading = false
console.log(tmux)
content.commit('SET_TMUX', tmux)
},
同时在cluster和job页面显示该ip所有的tmux session信息
支持对每个session设置job,将session_job信息缓存到前端(能够保存session_job,但与api_server及数据库无关)
设想对于每个符合该集群的session,在页面上只显示其名称,鼠标悬浮于名称上时弹出一个小窗口,里面包含tmux信息表格(包括session_job),及tmux_pane表格
Web端无法使用本地文件作为缓存?
fs 是 nodejs 服务端的模块,用来开发 web api 时使用的,vue 属于前端框架运行在浏览器环境中,在浏览器环境中时没有 fs 模块的,所以会输出空对象;在浏览器中如果想要读取文件,建议使用 FileReader,具体的 FileReader 的介绍可以查看 FileReader - Web API 接口参考 | MDN (mozilla.org)
点击tmux_name打开终端并连接到tmux session
3 前端获取到job信息并渲染到job页面
支持对每个job设置enable_tb, work_dir,缓存到前端
4 job页面:操控远程打开tb并且展示tb页面
集群上如何安装tb,是否能后台开启一个tb?
wget -qO- http://go.d5.sensetime.com/sunye/202206/apiserver/utils/open_tensorboard.sh | sh
成功在bj15上启动了一个tensorboard,但是通过代理服务器上的端口却访问不了?无论使用ip还是域名,都出现:无法访问此网站,10.5.64.198 的响应时间过长。
这是因为在启动时没有制定Host=0.0.0.0
,改过之后成功打开:
评论区