6.Docker_Swarm集群

Docker Swarm

1.简介

Docker Swarm包含2个核心组件:安全集群/编排引擎

企业级安全集群 编排引擎
使用 1.1/多个docker节点连接,用户以集群方式管理 1.将应用定义在声明式配置文件中使用原生docker命令完成微服务应用部署等操作
内置 2.内置分布式集群存储/加密网络/公用TLS/接入令牌/数字证书管理PKI 2.提供一套丰富的API部署和管理
单位 节点(管理节点/工作节点) 服务(在API中是一个对象元素,基于容器封装了高级特性),当容器封装在服务中时被称为一个任务/副本

此外,docker swarm已经从基于引擎之上的独立产品转变成集成于docker引擎中的产品

2.详解

实例地址:

2.1 Docker Swarm初步介绍

  1. 组成:一个Swarm可以由1个或多个节点组成,这些节点可以是虚拟机/物理服务器/树莓派/云实例

  2. 依赖:节点之间需要有可靠网络保证其运行

6.Docker_Swarm集群_第1张图片

Swarm架构中最主要的处理部分是Swarm节点,Swarm管理的对象是Docker Cluster,Docker Cluster由多个Docker Node组成,负责给Swarm发送请求的是Docker Client

2.2 Swarm 集群搭建

0. 搭建前提

需要在路由器和防火墙中开放以下端口

  1. 2377/tcp:用于客户端于Swarm进行安全通信
  2. 7946/tcp与7946/udp:用于控制面gossip分发
  3. 4789/udp:用于基于VXLAN的覆盖网络

1. 初始化管理节点

单引擎模式节点:不包含在任何Swarm中的docker节点

Swarm模式:已经加入集群的docker节点

  1. 切换命令:docker swarm init:将单引擎模式节点切换为swarm模式,创建新的Swarm,将自身设置为第一个管理节点

  2. 切换实例

    docker swarm init \
    --advertise-addr 10.0.0.1:2377 \
    --listen-addr 10.0.0.1:2377
    

    –advertise-addr:指定其他节点用来连接当前管理节点的IP和端口

    –listen-addr:指定用于承载Swarm流量的IP和端口,一般与前者一致

    2377为默认端口

    docker node ls //列出Swarm中的节点
    

2.加入额外的管理节点

  1. 在当前管理节点获取添加新节点的Swarm命令和Token(一个节点会成为管理还是工作完全取决于使用什么token)

    docker swarm join-token manager
    
  2. 在未加入的主机上输入命令将节点添加至集群

    docker swarm join\
    --token <token str> \
    10.0.0.1:2377 \  #分配token的管理节点的ip和端口
    --advertise-addr 10.0.0.2:2377 \
    --listen-addr 10.0.0.2:2377
    
  3. 在任意一个管理节点使用docker node ls命令查看Swarm节点

    在输出的信息中,会出现所有节点的信息,其中:
    1.当前执行命令的主机ID后使用*标识
    2.manager status列:非管理节点为空,管理节点分为主管理(Leader),从管理(reachable)
    

3.加入工作节点

  1. 在当前管理节点获取添加新节点的Swarm命令和Token

    docker swarm join-token worker
    

    此时会输出分配的Token和添加节点的命令

  2. 在未加入的主机上输入命令将节点添加至集群

    docker swarm join\
    --token  \
    10.0.0.1:2377 \  #管理节点的ip和端口
    --advertise-addr 10.0.0.2:2377 \
    --listen-addr 10.0.0.2:2377
    

    后两个参数是自选的,但是每次清晰的指定自己的IP总是好的

  3. 在任意一个管理节点使用docker node ls命令查看Swarm节点

4.Swarm管理器的高可用性(HA)

6.Docker_Swarm集群_第2张图片

  1. 如上图所示,1.远程客户端发送命令 2.非主节点将命令转发给主节点 3.主节点对集群执行命令。

  2. Swarm实现了一种主从方式的多管理节点的HA,这意味着多个管理节点中只有唯一leader处于活动状态,负责任务分发及变更配置,如果备用管理节点收到命令,会转发给主节点。

  3. 基于共识算法的管理节点HA支持策略:

    1. **部署奇数个管理节点:**当网络需要分区时,不会出现每个分区拥有相同数目的节点的情况,可以使掌握多个管理节点的分区继续对集群进行管理。管理节点在接到命令后只有确定本方网络拥有大多数才会执行。

    2. **部署3/5个管理节点:**更多的参与节点意味着需要花费更多的时间来达成共识

5.Swarm内置安全机制

5.1 锁定Swarm
  1. 为什么:旧的管理节点重启后接入集群网络会得到Raft数据库(支持共识算法的)长时间的访问权,如果进行备份恢复还可能抹除集群中较新的节点配置,所以要加个验证机制证明操作者的权限,禁止非法接入

  2. 怎么做:

    1.新建集群时:docker swarm init --autolock=true
    2.更新集群配置:docker swarm update --durolock=true
    
    3.以上操作会给出一个登录凭证(key)
    
    #以一个管理节点的重启为例:
    service docker restart
    
    docker node ls #此时显示这个节点未接入集群
    
    docker swarm unlock #使用这个命令解锁,输入保存的登录凭证
    

2.3 Swarm服务部署

Swarm中最小的调度单位为服务,把容器进行了封装,仍能够提供常规的比如端口映射等服务,同时还增加了额外的特性,比如声明服务需要几个副本,docker会自动在Swarm中的节点上进行相对均衡的部署

1.创建新服务

docker service create --name web-fe \
-p 8080:8080 \ 入站模式端口映射
-publish published=80,target=80,mode=host\ 主机模式端口映射
--replicas 5 \
nigepoluation/plur-docker-client #服务要使用的镜像,来自于应用容器化得到的image


--name:容器的名字
--replicas:告知docker需要几个此服务的副本同时运行
最后一行告诉docker服务需要拉取使用哪个镜像

启动后Swarm中会实例化5个副本,分配到任务的节点将拉取指定的镜像,以此为例,并会运行一个开放8080端口的容器。Swarm会不断监视5个副本的状态,如果出现某个副本宕机的状况,docker将会立刻实例化一个其他的副本以保持状态,这一特性十分强大,使服务具有了一定的自愈能力


-p 8080:8080会建立Swarm集群范围内的网络流量映射。到达Swarm任何节点的8080端口的流量都会映射到任何服务副本的内部8080端口

此处有两个模式可选:

  1. 入站模式(Ingress Mode):在集群中所有节点开放端口,所有节点都配置有映射,没有副本的节点接到请求会转发给有副本的节点处理
  2. 主机模式(host Mode):仅在有副本的主机上开放端口

2.查看服务及副本列表以及副本状态

#查看服务
docker service ls
#查看副本及状态
docker service ps <service-name>
#查看服务详细信息
docker inspect --pretty <service-name>

3.副本模式or全局模式

  1. 副本模式:部署时均匀的将副本分配在整个集群中

  2. 全局模式:每个节点仅部署一个副本

    docker service create --mode global
    

4.服务的扩容与删除

#扩容
docker service scale <service-name>=number
#删除
docker service rm <service-name>

5.滚动升级

当服务拥有多个副本时,手动更新每个副本所依赖的镜像是十分繁琐的,Swarm为我们提供了滚动升级特性

1.创建服务

同上,主要看一下端口映射的知识

2.滚动升级

需要进行业务升级,已升级的业务代码以及容器化,因此服务的容器副本需要替换掉目前所依赖运行的镜像

docker service update \
--image image:v2
--update-parallelism 2\
--update-delay 20s <service-name>
  1. –image:需要替换的镜像
  2. –update-parallelism:每次滚动替换的更新的副本数
  3. –update-delay :每次替换的间隔
  4. 所升级服务的名称

2.4 故障排除

docker service logs
--follow:跟踪
--tail:只查看最近的日志
--details:查看细节

3.命令

命令 用途
docker swarm init 初始化集群
docker swarm join-token 申请加入所需的命令和token
docker node ls 列出集群的所有节点
docker service create 创建服务
docker service ls 列出服务
docker service ps 查看服务副本信息
docker service inspect 查看服务详细信息
docker service scale 服务扩容
docker service update 更新服务属性,滚动升级等
docker service logs 查看日志
docker service rm 删除服务

你可能感兴趣的:(Docker,docker)