当 xxl-job 遇上 docker → 它晕了,但我不能乱!
开心一刻
某次住酒店,晚上十点多叫了个外卖
过了一阵儿,外卖到了
因为酒店电梯要刷卡,所以我下楼去接
到了电梯口看到个模样不错的妹纸
我:是你么?
妹纸愣了下:嗯!
于是拉上进电梯回房间,正准备开始呢
我俩的电话同时响了
按下接听键,一男一女同时问:我到电梯口了,你人呢?
尴尬了,取错外卖了
然后一起回电梯口,四个人一起上电梯,电梯里非常尴尬
我:呵呵,你的妹纸不错
他:呵呵,你也是
前情回顾
在当 xxl-job 遇上 docker → 它晕了,我也乱了!,有两个场景没给大家演示,先补上
executor 和 admin 在同一台宿主机上通过 docker 部署
这里有必要给大家简单讲一下 Docker 的 bridge 网络模式
docker0 类似一个交换机,它有很多接口,每个接口叫 veth ,在宿主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫 veth pair )
每个容器实例内部也有一块网卡,其接口叫 eth0 ; docker0 上面的每个 veth 匹配某个容器内部的 eth0 ,两两配对,一一匹配
如此,将同个宿主机上的所有容器都连接到同个内部网络上,那么这些容器之间的网络是互通的
所以这种情况下, xxl-job-admin 是可以调通 xxl-admin-executor 的,因为它们在同一个内部网络上
executor 和 admin 都通过 docker 部署,但不在同一个宿主机
上一篇提到了,但没告诉大家结果,也不知道大家有没有去验证,这里再给大家演示下
从结果来看, xxl-job-admin 是访问不通 xxl-job-executor 的,想知道为什么吗?
两台宿主机的 docker0 分别构成了一个内部网络,但这两个内部网络是隔离的、不通的!
这就好比我的局域网的 192.168.1.115 访问你的局域网的 192.168.1.118 ,你说能访问得通吗?
自动注册
关于自动注册的问题,很多小伙伴在上一篇的评论区给出一些解决方案,我来给大家试试水
docker compose
xxl-job-admin 镜像不需要改动,以 docker-compose 进行编排部署即可, docker-compose.yml 内容如下
xxl-job-executor 需要修改下配置
用 服务名 替换具体的ip
改完之后重新生成 xxl-job-executor 的镜像 sample-executor-compose:1.2
然后以 docker-compose 进行编排部署, docker-compose.yml 内容如下
我们来看下效果
额,自动注册好了!你们是不是爱上我了?
etcd + flannel
配置过程就不演示了,可参考:docker使用 Flannel(etcd+flannel)网络、etcd安装和所遇到的坑
当IP情况类似如上所示,则说明配置成功了
我们再来看看 xxl-job 的自动注册
xxl-job-executor 自动注册的IP 10.10.96.2 , xxl-job-admin 可以正常调度 xxl-job-executor
k8s
k8s 集群搭建过程不是那么简单,但也不是很复杂;搭建好的集群信息如下
在 k8s 集群部署 xxl-job-admin 、 xxl-job-executor 成功后,我们来看下 xxl-job 的自动注册
如你所见,自动注册是可以正常调度的!
我们再来看下 xxl-job-admin 、 xxl-job-executor 所在节点
sample-xxl-job-admin-56bb76f846-7rnmw 在节点 docker221
sample-xxl-job-executor-78c4997dd4-562hw 在节点 docker220
不在同一个节点哦!
总结
1、三种方式(docker compose、etcd+flannel、k8s)选哪一种,需要结合具体情况来定
如果想实现简单点,那就选 docker compose
如果已经使用了 k8s ,那就用 k8s 方式就行了
实现方式肯定还有其他的,比如 etcd + flannel 只是属于打通内部网络的一种
2、环境的搭建,楼主都省略了,有两点目的
2.1 考虑到篇幅问题,如果把搭建环境的详细过程都加进来,整篇篇幅就太长了,担心你们看的累
2.2 希望大家都去尝试搭建一下,受过伤才会刻骨铭心,楼主是深有感触
你们不要觉得我坏,我就是坏!!!