Oracle 系统管理 - Linux 系统 - Backtrack 5 - 安全 - Juniper 技术 - Cisco 技术 - 思科模拟器 - Cisco 认证 - Cisco ios 下载

您现在的位置是:Docker > Docker > 解决Swarm管理Docker集群节点状态一直pending的问题

解决Swarm管理Docker集群节点状态一直pending的问题

时间:2018-07-11 09:31  来源:未知  阅读次数: 复制分享 我要评论

1 问题概述

在利用Swarm管理Docker集群时,很容易安装Swarm并将节点链接起来。但是,在集群中试图运行容器时,发现没有“健康”(healthy)的节点,导致容器无法再集群中运行。使用docker -H 10.4.230.62:2376 info命令(10.4.230.62是manage节点的ip)查看集群的节点状态,输出类似下图的信息

可以看到节点的状态是pending的。这个问题在网上也有很多人遇到,但是没有一个综合性的靠谱的解决方式,经过很长时间的摸索和大神的指导,终于解决了这个问题,其中有几个“坑”需要注意一下。

2 监听端口

 为了让 swarm manager 能够跟每台 swarm node 进行通信,集群中的每台节 点的 Docker daemon 都必须监听同一个网络接口。网上的通常做法是在/etc/default/docker文件中添加:DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock" ,但是这种方式并没有起作用(可能是环境不同,本文使用的是centos 7系统),通过netstat命令可以查看端口情况,结果如下图所示

可以发现并没有2375端口的输出信息,表示这个监听端口并没有起来。

换一种方式配置监听端口,通过在/etc/systemd/system/docker/service.d文件中添加:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock(替换原来的ExecStart=)。

重启docker,出现下图提示

 

按照提示输入: systemctl daemon-reload,出现下列的错误信息

按照提示输入systemctl status docker.service,输出下列的提示信息

这个错误信息在网上也没有一个明确的解决方案,后来经过大神提点可能是docker安装的有问题。

3 在centos上安装Docker

这里的实验环境是centos 7,按照官网(https://docs.docker.com/engine/installation/linux/centos/)的方式安装Docker

3.1 卸载原有的Docker

查看安装列表

[root@docker0 ~]# yum list installed | grep docker
docker.x86_64 1.10.3-46.el7.centos.14 @extras
docker-common.x86_64 1.10.3-46.el7.centos.14 @extras
docker-selinux.x86_64 1.10.3-46.el7.centos.14 @extras

卸载

[root@docker ~]# yum -y remove docker.x86_64 docker-common.x86_64 docker-selinux.x86_64

3.2 重新安装

更新yum源:sudo yum update

添加yum repo:sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF

安装Docker:sudo yum install docker-engine

启动Docker服务: sudo systemctl enable docker.service

启动 Docker daemon:serivce docker restart

4 防火墙问题

在重载Docker以后,发现2375端口可以起来了,如下图所示

重新安装swarm以后,搭建集群以后,不幸的是,节点的状态还是pending

又捣鼓了很久,终于在网上看到一条提示说可能是防火墙的原因,可以通过:iptables -F指令来暂停防火墙(不过这个命令据说要十分小心),终于解决了困扰很久的问题,通过:docker -H 10.4.230.62:2376 info指令查看节点状态,可以看到下面的提示

 

节点的状态终于变成Healthy了,那么接着就可以发布和运行容器了

相关资讯