搭建一个DockerSwarm集群

背景:

        原来的项目是使用DockerSwarm技术进行搭建的,虽然现在都是使用Kubernetes技术进行集群的搭建,但技术本身没有过时之分只有适不适合你的应用场景。本篇文章记录了搭建DockerSwarm集群的流程和使用的命令等,有3台Centos,myhost1作为manager节点,另外两台myhost2、myhost3作为worker节点。

1. Linux

①设置主机名

#hostnamectl set-hostname myhost1

#hostnamectl set-hostname myhost2

#hostnamectl set-hostname myhost3

然后进行安装docker(略)

②配置Docker开机启动:

#systemctl enable docker

③启动Docker:

#systemctl start docker

2. Docker

①在myhost1上执行集群初始化命令

#docker swarm init

②然后复制第一步显示的命令:

#docker swarm join --token SWMTKN-1-xxxxx  ip:2377

③添加worker节点到Swarm集群中:

在另外两台机器上myhost2、myhost3上执行:

#docker swarm join --token SWMTKN-1-xxxxx   ip:2377

④查看集群中的节点:

# docker node ls

⑤查询节点信息

# docker node inspect HOSTNAME

其中HOSTNAME为节点名称,就可以查询到节点的信息。

当然docker node命令还有许多子命令功能,例如:

demote/promote/ps/rm/update,在命令行中可以输入

# docker node 来查看帮助文档来进行操作。

⑥给不同的节点打上标签,用于将任务分配

# docker node update --label-add app=slave1 myhost2

# docker node update --label-add app=slave2 myhost3

⑦在manager机器上查询某个节点的标签信息

# docker node inspect HOSTNAME | grep app

就可以查看到HOSTNAME这个节点的标签信息。

打标签的目的:是用于后续部署stack时,按照各主机的标签将不同的组件分配到不同的主机上运行。

关于docker node命令还有promote、demote、update、rm命令

⑧如果未来有第4台机器,如何将第4台机器加入集群中,myhost4

在myhost1的manger主机上查看添加worker的token :

#docker swarm join-token worker

复制相应的命令,然后粘贴到myhost4主机上进行执行即可加入到集群中。

3. DockerSwarm

范围由大到小:  stack-> service -> task -> container 

①编写yml文件

例如: Docker-compose-atlassian.yml

②在manager节点上部署应用组件:

#docker stack deploy -c Docker-compose-atlassian.yml atlassian

③查看集群中的stack列表:

# docker stack ls

④查看这个stack中的所有服务:

#docker stack services STACK_NAME

显示出的id为serviceID

其余还包括ps和rm子命令,ps用于列出某个stack中的task,其中id为taskID,其中taskID是容器names的一部分。

而rm用于移除某个stack,从而停止整个stack中的所有服务。

# docker stack rm STACK_NAME

但是不会删除在磁盘上的volume,并且重新启动也没有问题

⑤查看所有的服务的列表和具体的服务中的任务task信息:

#docker service ls

#docker service ps SERVICENAME

其中SERVICENAME为你的服务名称,可以列出当前的服务中的任务taskID,并且可以看到详细信息里面标识了这个服务具体在哪台主机NODE上

⑥查看具体服务的信息

# docker service inspect SERVICENAME

⑦删除一些服务:

# docker service rm SERVICENAME

如果是一个stack里面包含多个服务,那么这个命令只删除SERVICENAME服务,而不删除其他服务。

剩余的是 rollback、scale、update等命令,是回滚、扩展和更新的命令。

不要使用docker stop CONTAINER_ID来停止服务,因为这种方式只是停止了这个容器的运行,而并不会停止服务,是因为在部署时进行了restart_policy的设置

上一篇:LeetCode - 547. 省份数量


下一篇:图解数据结构:使用C++(第四章)