我算是一个极保守的运维, 对于新技术,我会去学习,去研究,但却很少去使用。运维是一个不断需要学习的职位,但却不是一个可以随意折腾的工种。新的技术,新的方案可能会对我们的工作,对我们的架构有更好的帮助,但我们使用时候,更应该谨慎的实施,我们需要仔细的考虑一些问题,比如现有架构或技术是否有升级的必要;运维人员对新技术的掌握程度;升级带来多大的风险;在一切都是Yes的情况下,我们又要敢于承担责任,大胆的实施。
Docker Swarm 包涵两个集群功能和微服务应用编排引擎两方面。集群即指由多个Docker节点组成;编排引擎则指swarm自身提供丰富的API来管理微服务。在应用层面来说,简单来讲即是使用命令(api)来部署和管理微服务的swarm集群。
前期你需要注意什么
1. 服务器将磁盘分为数据盘与系统盘,将Docker swarm 的数据目录修改为数据盘,严禁放入系统盘,否则会造成节点假死
2. 在各个节点之间开放Docker swarm 内部使用端口,否则会造成集群之间通信失败。即以下端口
2377/tcp:用于客户端与 Swarm 进行安全通信。7946/tcp 与 7946/udp:用于控制面 gossip 分发。4789/udp:用于基于 VXLAN 的覆盖网络。3. 为了安全考虑,最好不要使用Root用户操作,将普通用户加入docker组即可。
4. Docker Swarm 使用Raft共识算法来实现管理节点的HA, 所以管理节点需要部署奇数个,建议3或5个。请自行查看Raft共识算法的一些知识。
5. Docker Swarm管理命令只可以在管理节点执行,工作节点不可使用。
Docker Swarm集群操作
切换到Swarm模式,并将此服务器设置为第一个管理节点
[xcc@xcc ~]$ docker swarm init
查看节点序列
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
查看加入集群的token, worker为使加入节点作为工作节点, manager为使加入节点作为管理节点
[xcc@xcc ~]$ docker swarm join-token worker|manager
如:
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
将节点加入集群
[xcc@xcc ~]$ docker swarm join --token xxxxxxx xx.xx.xx.xx:2377
如
docker swarm join \\
--token SWMTKN-1-5ibimzdof5ez8ej6sdudinmm8s79urmm6h28x1pnu02rasiyxa-1j9bsv6feebnumq386sngy647 \\
192.168.0.103:2377
离开(退出)此集群
离开(退出)此集群[xcc@xcc ~]$ docker swarm leave
DockerSwarm 服务操作
服务是Docker Swarm中最小的调试单元, 即使用docker service create创建的单元,它是基于容器进行封装,被称为副本或任务,服务中包括扩缩容,滚动升级及回滚等特性。
创建一个新的服务
[xcc@xcc ~]$ docker service create
如
[xcc@xcc ~]$ docker service create --name test_1-p 8080:8080 --replicas 5 nginx
即创建一个有5个副本,名称为test_1的Nginx集群,集群将内部8080端口映射为外部此端口。
注:
此命令有丰富 的参数,如: --network 指定网络Docker swarm会轮询检查各个服务,如果状态不一致,则其会自动调整,如某个副本退出,则swarm会自动启动一个副本,以达到配置的要求默认为副本模式,也可使用全局模式,此模式下一个docker节点固定的只启动一个副本查看所有的服务
[xcc@xcc ~]$ docker service ls
查看服务副本列表及各副本的状态。
[xcc@xcc ~]$ docker service ps test_1
查看服务详细的信息
[xcc@xcc ~]$ docker service inspect --pretty test_1
通过调整最后的数字,对服务进行扩容或者缩容
[xcc@xcc ~]$ docker service scale test_1=10
滚动升级
[xcc@xcc ~]$ docker service update --imageredis test_1
回退到上一个版本
命令: docker service logstest_1
查看test_1的日志
[xcc@xcc ~]$ docker service logstest_1
删除test_1服务
[xcc@xcc ~]$ docker service rm test_1