我的环境介绍:
本地三台虚拟机,搭建了docker swarm集群,一台manager节点,两台worker节点,并在主节点搭建了镜像仓库。
(base) [root@master apps]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
i2534x5pj3vvcmtvyi7ihqlnd * master Ready Active Leader 20.10.8
jp9uhzum8qz8qyq7ia3ova2hc slave1 Ready Active 20.10.7
ody26k2fpyajkyhmbfnrcewqb slave2 Ready Active 1.13.1
问题前置操作:
今日在manager节点部署Apollo单机版正常运行,遂进一步希望部署成集群版本。
具体排查过程:
于是开始修改worker节点环境:
根据yml配置文件中的限制性条件,为worker节点添加label,创建volume路径
以apollo-admin为例:
(base) [root@master apps]# cat apollo-admin.yml
version: '3.4'
services:
app:
image: 192.168.40.128:5000/gion-apollo-adminservice:1.2.0
networks:
- hostnet
deploy:
placement:
constraints:
- node.labels.is_apollo_admin==true
mode: global
update_config:
parallelism: 1
delay: 10s
order: stop-first
volumes:
- /log/apollo/admin/:/opt/logs/100003172/
environment:
............................
修改完后通过docker stack deploy 启动后,发现并没有部署到任何其他节点上:
经排查发现worker节点并没有yml文件中所需的镜像,原以为会直接调用看来不是。
于是手动pull镜像:
[root@slave2 ~]# docker pull 192.168.40.128:5000/gion-apollo-adminservice:1.2.0
Trying to pull repository 192.168.40.128:5000/gion-apollo-adminservice ...
Get https://192.168.40.128:5000/v1/_ping: http: server gave HTTP response to HTTPS client
拉取不到是因为没有修改这个配置文件:/etc/docker/daemon.json
在该配置文件中添加"insecure-registries" : [ “192.168.40.128:5000” ]
[root@slave1 ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries" : [ "192.168.40.128:5000" ]
}
重启docker验证:
[root@slave1 ~]# curl -XGET http://192.168.40.128:5000/v2/_catalog
{"repositories":["gion-apollo-adminservice","gion-apollo-configservice","gion-apollo-portal","gion-eureka","gion-zuul"]}
问题已解决。