• Docker Swarm 集群搭建


    Docker Swarm Mode
    Docker Swarm 集群搭建
    Docker Swarm 节点维护
    Docker Service 创建

    1.准备主机

     搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂
    时的角色分配如下(注意,搭建完成后会切换角色):

    hostiprole
    docker192.168.137.100manager
    docker2192.168.137.101manager
    docker3192.168.137.102manager
    docker4192.168.137.103worker
    docker5192.168.137.104worker

    Hyper-v 设置静态IP 搭建集群

    2.搭建swarm集群

    2.1 查看 swarm 激活状态

    在任意 docker 主机上通过 docker info 命令可以查看到当前 docker 引擎 Server 端对于swarm 的激活状态。由于尚未初始化 swarm 集群,所以这些 docker 主机间没有任何关系,且 swarm 均未被激活。

    docker info
    
    • 1

    在这里插入图片描述

    2.2 swarm 初始化

    在主机名为“docker”的主机上运行 docker swarm init 命令,创建并初始化一个 swarm。

    # 如果多网卡,需要指定ip。--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。
    docker swarm init --advertise-addr 192.168.137.100:2377 --listen-addr 192.168.137.100:2377
    
    • 1
    • 2

    在这里插入图片描述

    2.3 添加 worker 节点

    复制 docker swarm init 命令的响应结果中添加 wroker 节点的命令在 docker4 与 docker5节点上运行,将这两个节点添加为 worker 节点。

    # ip表示manager主机ip:port
    # --advertise-addr参数表示worker节点使用此ip地址与manager联系
    docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377
    
    docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.104:2377
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.4 添加 manager 节点

    (1)获取添加命令

    若要为 swarm 集群添加 manager 节点,需要首先在 namager 节点获取添加命令

    docker swarm join-token manager
    
    • 1

    (2)添加节点

    复制 docker swarm join-token 命令生成的 manager 添加命令,然后在 docker2 与 docker3节点上运行,将这两个节点添加为 manager 节点。

    docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.101:2377
    
    docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-6cqtvvvohw38xgcdn06bgecyp 192.168.137.100:2377 --advertise-addr 192.168.137.102:2377
    
    • 1
    • 2
    • 3

    2.5 查看 swarm 节点

    在 manager 任意一个节点 docker、docker2、docker3 上通过 docker node ls 命令可以查看到当前swarm 集群所包含的节点状态数据。

    在这里插入图片描述

    3. swarm 集群维护

    当一个节点想从 swarm 集群中退出时,可以通过 docker swarm leave 命令。不过 worker节点与 manager 节点的退群方式是不同的。

    3.1 worker 退群

    对于 worker 节点退群,直接运行 docker swarm leave 命令即可。

    在这里插入图片描述

    此时在 manager 节点中查看节点情况,可以看到 docker4 已经 Down 了。

    3.2 worker 重新加入

    在 manager 节点上运行 docker swarm join-token worker 命令,查看加入 worker 节点的命令。

    复制生成的命令,在 docker4 节点上运行,将此节点添加到 swarm 集群。

    docker swarm join --token SWMTKN-1-14pekii6qepms5f3tfg8wt7rixqyybjb12ga8vahme52fm490i-43kozm8fpi1s9ist2kk4ysv36 192.168.137.100:2377 --advertise-addr 192.168.137.103:2377
    
    • 1

    3.3 查看节点情况

    此时在 manager 节点中查看节点情况,可以看到原来的 docker4 依然是 Down,但又新增了一个新的 docker4 节点,其状态为 Ready。

    在这里插入图片描述

    此时在 manager 节点通过 docker info 命令可以查看到节点数量变为了 6 个。

    在这里插入图片描述

    3.4 删除 Down 状态节点

    对于Down状态的节点是完全可以将其删除的。通过在manager节点运行docker node rm命令完成。

    docker node rm <nodeId>
    
    • 1

    在这里插入图片描述

    3.5 manager 退群

     对于 manager 节点,原则上是不推荐直接退群的,这样会导致 swarm 集群的一致性受到损坏。如果 manager 执意要退群,可在 docker swarm leave 命令后添加-f`` 或–force`` 选项进行强制退群。

    4. swarm 自动锁定

    4.1 swarm 集群自动锁定原理

     在 manager 集群中,swarm 通过 Raft 日志方式维护了 manager 集群中数据的一致性。即在 manager 集群中每个节点通过 manager 间通信方式维护着自己的 Raft 日志。

     但在通信过程中存在有一种风险:Raft 日志攻击者会通过 Raft 日志数据的传递来访问、篡改 manager 节点中的配置或数据。为了防止被攻击,swarm 开启了一种集群自动锁定功能,为 manager 间的通信启用了 TLS 加密。用于加密和解密的公钥与私钥,全部都维护在各个节点的 Docker 内存中。一旦节点的 Docker 重启,则密钥丢失

     swarm 中通过 autolock 标志来设置集群的自动锁定功能:为 true 则开启自动锁定,为
    false 则关闭自动锁定。

    4.2 设置自动锁定

     在 manager 节点通过 docker swarm update –-autolock=true 命令可以开启当前 swarm 集群的自动锁定功能。

    在这里插入图片描述

    此时查看 manager 的 docker info 可以看到,autolock 已经为 true 了。

    在这里插入图片描述

    4.3 查看解锁密钥

    如果没有保存 docker swarm update --autolock=true 命令中生成的密钥,也可通过在manager 中运行 docker swarm unlock-key 命令查看。

    4.4 关闭一个 manager, 模拟宕机重新加入

    直接关闭 docker3 的 docker 引擎,模拟一个 manager 宕机的情况。再启动 docker3 的 docker 引擎。

    systemctl stop docker
    systemctl start docker
    
    • 1
    • 2

    此时再查看该节点的 docker info,可以看到 Swarm 值为 locked,即当前节点看到的 Swarm集群的状态为锁定状态,其若要加入,必须先解锁。

    在这里插入图片描述

    即使 docker3 已经正常启动,也没有被加入到集群中

    在这里插入图片描述

    在 docker3 中运行 docker swarm unlock 命令 输入密钥,解锁 swarm。

    此时再查看节点信息,该 manager 已经加入。

    在这里插入图片描述

  • 相关阅读:
    利用tomcat部署 springmvc项目的问题
    Python 笔记03(多线程)
    100天精通Python(基础篇)——第13天:对表达式进行格式化
    深度学习基础与线性回归实例
    命令式编程和声明式编程
    猿创征文 |【数据结构】2个例题带你理解图的遍历:广度优先搜索
    Unity类银河恶魔城学习记录14-5 p152 Lost currency save and enemy‘s currency drop
    Redis实现全局唯一id
    【VScode】前端必备插件(持续补充中...)
    让业务满意的性能测试报告模板应该是怎样的?
  • 原文地址:https://blog.csdn.net/weixin_43847283/article/details/134000671