docker swarm集群搭建

  • 简介

    Swarm:作用于运行docker engine(引擎)的多个主机组成的集群。
    node:每一个docker engine都是一个node(节点),分为manager和worker。
    manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager node,它们会自动协调并选举出一个Leader执行编排任务。但相反,不能没有manager node。
    worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个work node,不过可以将它设置为manager-only node,让它只负责编排和管理工作。
    service:用来定义worker上执行的命令。
    
  • 部署准备

    head			      c1				c2
    192.168.196.130		192.168.196.132		192.168.196.131
    
  • 关闭防火墙

    # firewalld
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    # selinux
    vi /etc/selinux/config
    改为 SELINUX=disabled
    
  • 时间同步

    与head时间同步即可
    ntpdate 192.168.196.130
    
  • head节点

    docker swarm init --advertise-addr 192.168.196.130
    
    # 成功执行后会生成下面的代码
    docker swarm join --token SWMTKN-1-2jk3nhq8rz7eukh1rk66w197xfnbgvgull2zoq9fvge26et302-25s1k7n303gi19pksw2gqve7p 192.168.196.130:2377
    
  • c1和c2节点分别执行下面的代码,意思是让c1和c2加入到集群中

    docker swarm join --token SWMTKN-1-2jk3nhq8rz7eukh1rk66w197xfnbgvgull2zoq9fvge26et302-25s1k7n303gi19pksw2gqve7p 192.168.196.130:2377
    
  • 在head主机上查看节点状态

    ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    jkgnbzwo1jakkhaive404mi78     c1         Ready     Active                          20.10.6
    cgehjyv4hf8fu0voe648oxw0w     c2         Ready     Active                          20.10.6
    k6cgvrxx2t0t3wjr4666xy9cw *   head       Ready     Active         Leader           20.10.6
    # 说明目前head是领导者
    
  • 部署docker swarm集群网络

    docker network create -d overlay --attachable docker  # overlay覆盖型网络
    
  • 部署一个图形化webui界面

    docker pull dockersamples/visualizer
    
  • 运行镜像

    docker run -d -p 8080:8080 -e HOST=192.168.196.130 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
    
  • 网页访问

    192.168.196.130:8080
    
  • 让所有节点执行命令任务

    docker service create --replicas 5 --network docker --name web01 -p 80 nginx:latest
    # docker service create 创建服务
    # --name  表示服务的名称
    # --replicas 表示指定5个正在运行的实例(可以理解为1个实例等于1个容器)
    # 上面的意思是让所有worker节点共执行5个实例,任务为开启nginx
    
    
  • 让leader节点不参加工作

    docker node update head --availability drain
    
  • 查看service任务信息

    docker service ps web01
    
  • 增加和减少容器数量

    docker service scale web01=0  # 减少
    docker service sacle web01=8  # 增加
    
  • 常用命令

    离开集群:
    docker swarm leave
    
    删除节点:
    docker node rm node02			#这里注意,只有申请离开集群的node才可以删除。
    
    生成令牌,可以是manager身份或worker身份:
    docker swarm join-token [manager | worker]
    
    降级为work与升级为manager:
    docker node demote(降级):将swarm节点的manager降级为work
    docker node promote(升级):将swarm节点的work升级为manager
    
    
    查看service列表:
    docker service ls
    
    查看service信息:
    docker service ps xxx
    
    增加容器与减少容器:
    docker service scale web1=8
    docker service scale web1=3			#等号后接容器的数量。
    
    删除服务
    docker service rm web01(启动时指定的name名称)
    
    docker node update node01 --availability drain 
    可以设置三个参数:
    active"|"pause"|"drain		#活跃”|“暂停”|“不工作
    
上一篇:Docker Swarm集群


下一篇:Docker学习记录 - 容器管理