如何进行Docker Swarm 集群环境搭建及弹性服务部署

技术如何进行Docker Swarm 集群环境搭建及弹性服务部署如何进行Docker Swarm 集群环境搭建及弹性服务部署,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能

如何搭建Docker Swarm集群环境,部署灵活的服务,相信很多没有经验的人都不知所措。因此,本文总结了问题产生的原因及解决方法。希望你能通过这篇文章解决这个问题。

集群搭建

环境准备

如何进行Docker  Swarm  集群环境搭建及弹性服务部署

安装了Docker的五台CentOS机器,版本:CentOS 7.8.2003

Docker Engine 1.12(最低要求是1.12,本文使用19.03.12)

打开以下端口或关闭防火墙:

用于集群管理通信的TCP端口2377;

以及用于节点间通信的TCP UDP端口7946;

UDP端口4789,用于覆盖网络。

00-1010角色IPHOSTNAMEDocker版本管理器192.168.10.101管理器119.03.12管理器192.168.10.102管理器219.03.12管理器192.168.10.103管理器319.03.12工人1992 18.10.10工人119.03.12工人192.168.10.11

或者hostname CTL set-hostname hostname修改机器的主机名(立即生效,重启也生效);

或者vi /etc/hosts编辑hosts文件,如下所示,并将主机名添加到127.0.0.1(重启生效)。

127 . 0 . 0 . 1 localhostlocalhost . localdomainlocalhost 4 . localdomain4 manager 1

3360:1 localhost localhost . local domain localhost 6 localhost 6 . local domain 6

机器分布

在任何节点下创建一个新的Swarm集群,并使用docker swarm init命令加入,默认情况下,该节点将成为Manager节点。根据我们预先定义的角色,我们可以在从101到103的任何机器上运行这个命令。

通常,第一个加入集群的管理节点将成为Leader,随后加入的管理节点是可达的。如果当前的领导者去世,所有可达将重新选举一个新的领导者。

[root @ localhost ~]# dockerwarminit-ad-addr 192 . 168 . 10 . 101

swarm initialized : current node(clumstpieg0qzzxt1caeazg8g)是一个nowamanager。

toad workers to this swarm,runthefollowingcommand:

sp;  docker swarm join --token SWMTKN-1-5ob7jlej85qsygxubqypjuftiwruvew8e2cr4u3iuo4thxyrhg-3hbf2u3i1iagurdprl3n3yra1 192.168.10.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

如何进行Docker Swarm 集群环境搭建及弹性服务部署

加入集群

  Docker 中内置的集群模式自带了公钥基础设施(PKI)系统,使得安全部署容器变得简单。集群中的节点使用传输层安全协议(TLS)对集群中其他节点的通信进行身份验证、授权和加密。

  默认情况下,通过 docker swarm init 命令创建一个新的 Swarm 集群时,Manager 节点会生成新的根证书颁发机构(CA)和密钥对,用于保护与加入群集的其他节点之间的通信安全。

  Manager 节点会生成两个令牌,供其他节点加入集群时使用:一个 Worker 令牌,一个 Manager 令牌。每个令牌都包括根 CA 证书的摘要和随机生成的密钥。当节点加入群集时,加入的节点使用摘要来验证来自远程管理节点的根 CA 证书。远程管理节点使用密钥来确保加入的节点是批准的节点。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

Manager

  若要向该集群添加 Manager 节点,管理节点先运行 docker swarm join-token manager 命令查看管理节点的令牌信息。

docker swarm join-token manager

如何进行Docker Swarm 集群环境搭建及弹性服务部署

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  然后在其他节点上运行 docker swarm join 并携带令牌参数加入 Swarm 集群,该节点角色为 Manager。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

如何进行Docker Swarm 集群环境搭建及弹性服务部署

Worker

  通过创建集群时返回的结果可以得知,要向这个集群添加一个 Worker 节点,运行下图中的命令即可。或者管理节点先运行 docker swarm join-token worker 命令查看工作节点的令牌信息。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  然后在其他节点上运行 docker swarm join 并携带令牌参数加入 Swarm 集群,该节点角色为 Worker。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

如何进行Docker Swarm 集群环境搭建及弹性服务部署

查看集群信息

  在任意 Manager 节点中运行 docker info 可以查看当前集群的信息。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

查看集群节点

  在任意 Manager 节点中运行 docker node ls 可以查看当前集群节点信息。

docker node ls

如何进行Docker Swarm 集群环境搭建及弹性服务部署

* 代表当前节点,现在的环境为 3 个管理节点构成 1 主 2 从,以及 2 个工作节点。

  节点 MANAGER STATUS 说明:表示节点是属于 Manager 还是 Worker,没有值则属于 Worker 节点。

  • Leader:该节点是管理节点中的主节点,负责该集群的集群管理和编排决策;

  • Reachable:该节点是管理节点中的从节点,如果 Leader 节点不可用,该节点有资格被选为新的 Leader;

  • Unavailable:该管理节点已不能与其他管理节点通信。如果管理节点不可用,应该将新的管理节点加入群集,或者将工作节点升级为管理节点。

  节点 AVAILABILITY 说明:表示调度程序是否可以将任务分配给该节点。

  • Active:调度程序可以将任务分配给该节点;

  • Pause:调度程序不会将新任务分配给该节点,但现有任务仍可以运行;

  • Drain:调度程序不会将新任务分配给该节点,并且会关闭该节点所有现有任务,并将它们调度在可用的节点上。

删除节点

Manager

  删除节点之前需要先将该节点的 AVAILABILITY 改为 Drain。其目的是为了将该节点的服务迁移到其他可用节点上,确保服务正常。最好检查一下容器迁移情况,确保这一步已经处理完成再继续往下。

docker node update --availability drain 节点名称|节点ID

  然后,将该 Manager 节点进行降级处理,降级为 Worker 节点。

docker node demote 节点名称|节点ID

  然后,在已经降级为 Worker 的节点中运行以下命令,离开集群。

docker swarm leave

  最后,在管理节点中对刚才离开的节点进行删除。

docker node rm 节点名称|节点ID
Worker

  删除节点之前需要先将该节点的 AVAILABILITY 改为 Drain。其目的是为了将该节点的服务迁移到其他可用节点上,确保服务正常。最好检查一下容器迁移情况,确保这一步已经处理完成再继续往下。

docker node update --availability drain 节点名称|节点ID

  然后,在准备删除的 Worker 节点中运行以下命令,离开集群。

docker swarm leave

  最后,在管理节点中对刚才离开的节点进行删除。

docker node rm 节点名称|节点ID

服务部署

注意:跟集群管理有关的任何操作,都是在 Manager 节点上操作的。

创建服务

  下面这个案例,使用 nginx 镜像创建了一个名为 mynginx 的服务,该服务会被随机指派给一个工作节点运行。

docker service create --replicas 1 --name mynginx -p 80:80 nginx

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  • docker service create:创建服务;

  • --replicas:指定一个服务有几个实例运行;

  • --name:服务名称。

查看服务

  可以通过 docker service ls 查看运行的服务。

[root@manager1 ~]# docker service ls
ID                NAME           MODE              REPLICAS        IMAGE              PORTS
hepx06k5ik5n      mynginx        replicated        1/1             nginx:latest       *:80->80/tcp

  可以通过 docker service inspect 服务名称|服务ID 查看服务的详细信息。

[root@manager1 ~]# docker service inspect mynginx
[
    {
        "ID": "k0dbjg1zzy3l3g71kdwa56ect",
        "Version": {
            "Index": 127
        },
        "CreatedAt": "2020-09-16T10:05:55.627974095Z",
        "UpdatedAt": "2020-09-16T10:05:55.629507771Z",
        "Spec": {
            "Name": "mynginx",
            "Labels": {},
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image": "nginx:latest@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0",
                    "Init": false,
                    "StopGracePeriod": 10000000000,
                    "DNSConfig": {},
                    "Isolation": "default"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition": "any",
                    "Delay": 5000000000,
                    "MaxAttempts": 0
                },
                "Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "OS": "linux"
                        },
                        {
                            "Architecture": "arm64",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "386",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "mips64le",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "ppc64le",
                            "OS": "linux"
                        },
                        {
                            "Architecture": "s390x",
                            "OS": "linux"
                        }
                    ]
                },
                "ForceUpdate": 0,
                "Runtime": "container"
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 1
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "RollbackConfig": {
                "Parallelism": 1,
                "FailureAction": "pause",
                "Monitor": 5000000000,
                "MaxFailureRatio": 0,
                "Order": "stop-first"
            },
            "EndpointSpec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80,
                        "PublishMode": "ingress"
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 80,
                        "PublishMode": "ingress"
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol": "tcp",
                    "TargetPort": 80,
                    "PublishedPort": 80,
                    "PublishMode": "ingress"
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID": "st2xiy7pjzap093wz4w4u6nbs",
                    "Addr": "10.0.0.15/24"
                }
            ]
        }
    }
]

  可以通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  在对应的任务节点上运行 docker ps 可以查看该服务对应容器的相关信息。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

调用服务

  接下来我们测试一下服务是否能被正常访问,并且该集群下任意节点的 IP 地址都要能访问到该服务才行。

  测试结果:5 台机器均可正常访问到该服务。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

弹性服务

  将 service 部署到集群以后,可以通过命令弹性扩缩容 service 中的容器数量。在 service 中运行的容器被称为 task(任务)。

  通过 docker service scale 服务名称|服务ID=n 可以将 service 运行的任务扩缩容为 n 个。

  通过 docker service update --replicas n 服务名称|服务ID 也可以达到扩缩容的效果。

  将 mynginx service 运行的任务扩展为 5 个:

[root@manager1 ~]# docker service scale mynginx=5
mynginx scaled to 5
overall progress: 5 out of 5 tasks 
1/5: running   [==================================================>] 
2/5: running   [==================================================>] 
3/5: running   [==================================================>] 
4/5: running   [==================================================>] 
5/5: running   [==================================================>] 
verify: Service converged

  通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  我们再来一波缩容的操作,命令如下:

[root@manager1 ~]# docker service update --replicas 3 mynginx
mynginx
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged

  通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  在 Swarm 集群模式下真正意义实现了所谓的弹性服务,动态扩缩容一行命令搞定,简单、便捷、强大。

删除服务

  通过 docker service rm 服务名称|服务ID 即可删除服务。

[root@manager1 ~]# docker service rm mynginx
mynginx
[root@manager1 ~]# docker service ls
ID                NAME              MODE              REPLICAS          IMAGE             PORTS

滚动更新及回滚

  以下案例将演示 Redis 版本如何滚动升级至更高版本再回滚至上一次的操作。

  首先,创建 5 个 Redis 服务副本,版本为 5,详细命令如下:

# 创建 5 个副本,每次更新 2 个,更新间隔 10s,20% 任务失败继续执行,超出 20% 执行回滚,每次回滚 2 个
docker service create --replicas 5 --name redis \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-monitor 20s \
--rollback-parallelism 2 \
--rollback-max-failure-ratio 0.2 \
redis:5
  • --update-delay:定义滚动更新的时间间隔;

  • --update-parallelism:定义并行更新的副本数量,默认为 1;

  • --update-failure-action:定义容器启动失败之后所执行的动作;

  • --rollback-monitor:定义回滚的监控时间;

  • --rollback-parallelism:定义并行回滚的副本数量;

  • --rollback-max-failure-ratio:任务失败回滚比率,超过该比率执行回滚操作,0.2 表示 20%。

  然后通过以下命令实现服务的滚动更新。

docker service update --image redis:6 redis

如何进行Docker Swarm 集群环境搭建及弹性服务部署

  回滚服务,只能回滚到上一次操作的状态,并不能连续回滚到指定操作。

docker service update --rollback redis

如何进行Docker Swarm 集群环境搭建及弹性服务部署

常用命令

docker swarm

命令 说明
docker swarm init 初始化集群
docker swarm join-token worker 查看工作节点的 token
docker swarm join-token manager 查看管理节点的 token
docker swarm join 加入集群

docker node

命令 说明
docker node ls 查看集群所有节点
docker node ps 查看当前节点所有任务
docker node rm 节点名称|节点ID 删除节点(-f强制删除)
docker node inspect 节点名称|节点ID 查看节点详情
docker node demote 节点名称|节点ID 节点降级,由管理节点降级为工作节点
docker node promote 节点名称|节点ID 节点升级,由工作节点升级为管理节点
docker node update 节点名称|节点ID 更新节点

docker service

命令 说明
docker service create 创建服务
docker service ls 查看所有服务
docker service inspect 服务名称|服务ID 查看服务详情
docker service logs 服务名称|服务ID 查看服务日志
docker service rm 服务名称|服务ID 删除服务(-f强制删除)
docker service scale 服务名称|服务ID=n 设置服务数量
docker service update 服务名称|服务ID 更新服务

看完上述内容,你们掌握如何进行Docker Swarm 集群环境搭建及弹性服务部署的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/142172.html

(0)

相关推荐

  • 志趣的意思,你是如何理解志趣相投的

    技术志趣的意思,你是如何理解志趣相投的臭味相投的常见,比如麻将馆里的人,上了牌桌都成了相差无几的德性志趣的意思。志趣相投的人,要么是做同一样工作,就是团队精神吧。要么是经商共赢的人,就是齐心协力吧。但是越有文化知识的人越

    生活 2021年10月19日
  • 服务器香港:香港云服务器会影响您的 SEO 吗

    技术服务器香港:香港云服务器会影响您的 SEO 吗谈到SEO,细节很重要。通常被忽视的细节之一是您选择的服务器是否可靠。通常很多站长会花很多时间在网站内部的和外链的优化,但是却往往忽视了服务器的性能和稳定性会对您的排名产

    礼包 2021年10月19日
  • 抖音上怎么快速涨粉,抖音怎么才能快速获得粉丝

    技术抖音上怎么快速涨粉,抖音怎么才能快速获得粉丝我们后来认为它是一个概率问题,而概率本身又是一个数学问题,那么在一定条件下你只要把这些事情量化就可以做优化。既然可以优化,那就可以规模化。
    于是我们就去把不同的视频在不同的

    测评 2021年10月26日
  • Oracle与PostgreSQL内置的编程语言有什么不同

    技术Oracle与PostgreSQL内置的编程语言有什么不同本篇内容主要讲解“Oracle与PostgreSQL内置的编程语言有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带

    攻略 2021年11月8日
  • cad怎么画墙体,CAD2010怎样绘制墙线

    技术cad怎么画墙体,CAD2010怎样绘制墙线材料/工具:CAD1、打开CAD首先打开图层cad怎么画墙体,在原有的基础上新建一个图层,名字改为墙线,一般墙线的颜色都为黄色。2、下面点击界面上格式图标,选中里面的多线样

    生活 2021年10月26日
  • POSTGRESQL10.3 RPM包如何实现主从搭建

    技术POSTGRESQL10.3 RPM包如何实现主从搭建这篇文章主要介绍POSTGRESQL10.3 RPM包如何实现主从搭建,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、POSTGRE

    攻略 2021年11月16日