zoukankan      html  css  js  c++  java
  • docker-swarm集群部署

    docker-swarm集群部署

    一、swarm介绍

        Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker。

        Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

       从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

    二、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上执行的命令。

    三、swarm集群部署

    1.环境

    节点1:node1       192.168.172.128

    节点2:node2       192.168.172.131

    节点3:node3       192.168.172.132

    2.免密登录

    [root@localhost ~]# cat /etc/hosts        ##三台机子都需要做
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.172.128 node1
    192.168.172.131 node2
    192.168.172.132 node3
    [root@localhost ~]# ssh-keygen -t rsa     ##三台机子都需要做
    [root@localhost ~]# ssh-copy-id -i 192.168.172.131
    [root@localhost ~]# ssh-copy-id -i 192.168.172.132

    3.开启允许的端口  

    firewall-cmd --add-port={2377,7946,4789}/tcp --permanent
    firewall-cmd --add-port={7946,4789}/udp --permanent
    firewall-cmd --reload

    4.构建一份私有仓库

    (1):

    [root@localhost ~]# docker pull registry:2
    [root@localhost ~]# docker run -dit -p 5000:5000 --restart always -v /opt/data/registry/:/var/lib/registry --name registry registry:2

    (2):

    vim /usr/lib/systemd/system/docker.service
    ExecStart=/usr/bin/dockerd --insecure-registry=192.168.172.128:5000  -H fd:// --containerd=/run/containerd/containerd.sock      

    (3):

    systemctl daemon-reload
    systemctl restart docker

    (4):

    docker tag httpd:latest  192.168.172.128:5000/httpd
    docker tag busybox:latest  192.168.172.128:5000/busybox

    (5):

    docker push 192.168.172.128:5000/httpd:latest 
    docker push 192.168.172.128:5000/busybox:latest 

    (6):

    curl 192.168.172.128:5000/v2/_catalog

    5.初始化docker swarm

    docker swarm init --advertise-addr 192.168.172.128

    把另外两台节点加入

    [root@localhost ~]# docker swarm join --token SWMTKN-1-1i55rke1jsi0fg3fwa8ade1elfi9gy572j9rknvb5ltv0etdm3-extg6rkqfvaso1vhcped5z4kn 192.168.172.128:2377
    This node joined a swarm as a worker.         #在另外两个节点上操作

    查看节点有哪些:

    [root@localhost ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    wl9tv3om7ubbfzupl65lovdu3 *   node1               Ready               Active              Leader              19.03.12
    hv3mxu6u7l7ei2h565c52yuf2     node2               Ready               Active                                  19.03.12
    35rbxdx15fmiu3v7q9xngpvpr     node3               Ready               Active                                  19.03.12

    把node2加入/踢出为manager node

    docker node promote  node2 (加入)
    docker node demote node2   (踢出)

    6、添加可视化工具

    [root@localhost ~]# docker pull dockersamples/visualizer

      [root@localhost ~]# docker tag dockersamples/visualizer:latest 192.168.172.128:5000/dockersa
      [root@localhost ~]# docker push 192.168.172.128:5000/dockersamples/visualizer:latest

    
     docker run -dit -p 8888:8080 -e PORT=8080  -v /var/run/docker.sock:/var/run/docker.sock 192.168.172.128:5000/dockersamples/visualizer:latest

     创建swarm服务:

    [root@localhost ~]# docker  service  create  --name  web1     192.168.172.128:5000/httpd

    查看:

    [root@localhost ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE                               PORTS
    q7nb1cpvvgqn        web1                replicated          1/1                 192.168.172.128:5000/httpd:latest   

    服务的伸缩:
    把服务增加到5个:

    [root@localhost ~]# docker service  scale  web1=5

    docker service scale web_server=3      ##减少到3个

     模拟节点故障,down掉node2,可以发现服务转移

  • 相关阅读:
    Linux下chmod 777 修改权限
    设计模式
    oracle连接出错的解决方法
    JSON简介
    Kafka安装部署
    磁盘挂载及文件系统初始化
    ES Templates push
    常用脚本
    RocketMQ 零拷贝
    kafka Py客户端
  • 原文地址:https://www.cnblogs.com/cy888888/p/13214695.html
Copyright © 2011-2022 走看看