zoukankan      html  css  js  c++  java
  • Docker集群管理(Docker Swarm)

    1.准备工作。

    • 准备好主机,我测试准备了3台主机。

      IP:192.168.43.28    担任角色:swarm manager

      IP:192.168.43.182  担任角色:swarm node

      IP:192.168.43.110  担任角色:swarm node

    • 安装好Docker Engine 

      CentOS Docker安装:

    yum -y install docker
    

      树莓派安装Docker可以参考:https://yeasy.gitbook.io/docker_practice/install/raspberry-pi

      Windows安装Docker:直接官网下载安装即可。https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe

    • 设置防火墙

    关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。

    2.创建Swarm并加入节点。

    1)创建Swarm,在192.168.43.28 中执行

    docker swarm init --advertise-addr 192.168.43.28
    执行结果:
    Swarm initialized: current node (1lptx3e7syne0b6pnrm987xun) is now a manager.
     
    To add a worker to this swarm, run the following command:
     
        # 这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)
        docker swarm join --token SWMTKN-1-4xb3dz6kg3bexpxz5eeifss2dtsmucf74nsixstyin3q169ona-9cwtdkjtdjwlwnsfeloxja6ug 192.168.43.28:2377 
     
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    

     2)其他节点加入集群,

    •   获取加入工作节点的token
    docker swarm join-token worker
    
    执行结果:
    To add a worker to this swarm, run the following command:
    
    docker swarm join --token SWMTKN-1-4xb3dz6kg3bexpxz5eeifss2dtsmucf74nsixstyin3q169ona-9cwtdkjtdjwlwnsfeloxja6ug 192.168.43.28:2377
    

      

      如果想加入管理节点,获取管理节点token命令

    docker swarm join-token manager
    
    •   加入集群,执行:
    docker swarm join --token SWMTKN-1-4xb3dz6kg3bexpxz5eeifss2dtsmucf74nsixstyin3q169ona-9cwtdkjtdjwlwnsfeloxja6ug 192.168.43.28:2377
    
    •   查看集群中机器及状态
    docker node ls
    执行结果:
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    v02i9sn3yet34o4twq7ir7ek6     docker-desktop      Ready               Active                                  19.03.8
    vqevr5pamsiv155x2ccuxg6eg     docker-desktop      Ready               Active                                  19.03.8
    1lptx3e7syne0b6pnrm987xun *   raspberrypi         Ready               Active              Leader              19.03.12
    
    •   修改节点availablity状态
    设置节点不可用:
    docker node update --availability drain v02i9sn3yet34o4twq7ir7ek6
    设置节点可用:
    docker node update --availability active v02i9sn3yet34o4twq7ir7ek6
    
    •   删除节点
    docker node rm --force v02i9sn3yet34o4twq7ir7ek6
    

     

     3.在swarm中部署服务(nginx为例)

    1)创建网络在部署服务,在管理节点(192.168.43.28 )运行命令,

    • 在管理节点(192.168.43.28 )运行命令,创建网络
    docker network create -d overlay nginx_net
    查看网络
    docker network ls | grep nginx_net
    
    • 在管理节点(192.168.43.28 )运行命令,部署服务
      docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx    # 只创建了一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx
      运行结果:
      olexfmtdf94sxyeetkchwhehg
      overall progress: 1 out of 1 tasks
      1/1: running   [==================================================>]
      verify: Service converged
      

      注意:不需要提前在节点上下载nginx镜像,这个命令执行后会自动下载这个容器镜像

    • 使用 docker service ls 查看正在运行服务的列表
      docker service ls
      执行结果:
      ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
      olexfmtdf94s        my_nginx            replicated          1/1                 nginx:latest        *:80->80/tcp
      

        

    2)查询Swarm中服务的信息(在管理节点上运行)

    • 查看swarm
    docker service inspect --pretty my_nginx
    运行结果:
    ID:             8nx16idy6eystnelu2214tnjj
    Name:           my_nginx
    Service Mode:   Replicated
     Replicas:      5
    Placement:
    UpdateConfig:
     Parallelism:   1
     On failure:    pause
     Monitoring Period: 5s
     Max failure ratio: 0
     Update order:      stop-first
    RollbackConfig:
     Parallelism:   1
     On failure:    pause
     Monitoring Period: 5s
     Max failure ratio: 0
     Rollback order:    stop-first
    ContainerSpec:
     Image:         nginx:latest@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
     Init:          false
    Resources:
    Networks: nginx_net
    Endpoint Mode:  vip
    Ports:
     PublishedPort = 80
      Protocol = tcp
      TargetPort = 80
      PublishMode = ingress
    
    • 查询到哪个节点正在运行该服务
    docker service ps my_nginx
    运行结果:
    ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR                              PORTS
    2xjblebabprw        my_nginx.1          nginx:latest        raspberrypi         Running             Running 7 hours ago
    92qra1x9nmsn        my_nginx.2          nginx:latest        docker-desktop      Running             Running 6 hours ago
    6my8umxa19nb         \_ my_nginx.2      nginx:latest        docker-desktop      Shutdown            Rejected 7 hours ago         "No such image: nginx:latest@s…"
    9r9yp00mku5w        my_nginx.3          nginx:latest        docker-desktop      Running             Running 4 hours ago
    kxkw4zofnzu9         \_ my_nginx.3      nginx:latest        docker-desktop      Shutdown            Shutdown 3 hours ago
    q39bye7fexwo         \_ my_nginx.3      nginx:latest        docker-desktop      Shutdown            Rejected 6 hours ago         "No such image: nginx:latest@s…"
    r5p344468c2h        my_nginx.4          nginx:latest        raspberrypi         Running             Running about an hour ago
    v7un0150x9o7         \_ my_nginx.4      nginx:latest        docker-desktop      Shutdown            Shutdown about an hour ago
    1h8l0yrokdcz         \_ my_nginx.4      nginx:latest        docker-desktop      Shutdown            Shutdown 3 hours ago
    mkx7uh745rfl        my_nginx.5          nginx:latest        raspberrypi         Running             Running about an hour ago
    murmvfdqn3kk         \_ my_nginx.5      nginx:latest        docker-desktop      Shutdown            Shutdown about an hour ago
    

    4.在Swarm中动态扩展服务(scale) 

    docker service scale my_nginx=4
    运行结果:
    my_nginx scaled to 4
    overall progress: 4 out of 4 tasks
    1/4: running   [==================================================>]
    2/4: running   [==================================================>]
    3/4: running   [==================================================>]
    4/4:
    verify: Service converged
    

    5.其他操作

    1)将要离开的节点停止工作(管理节点上执行)

    docker node update --availability drain v02i9sn3yet34o4twq7ir7ek6

    2)工作节点离开集群(在工作节点执行)

    docker swarm leave -f
    运行结果:
    Node left the swarm.
    

    3)移除节点(管理节点上执行)

    docker node rm v02i9sn3yet34o4twq7ir7ek6

    docker node rm vqevr5pamsiv155x2ccuxg6eg

    4)删除服务,my_nginx

    docker service rm my_nginx
    

    这样就会把所有节点上的所有容器(task任务实例)全部删除了  

    5)管理节点离开(管理节点上执行)

    docker swarm leave -f
    

      


    内容参考:https://www.cnblogs.com/zhujingzhi/p/9792432.html

    上图转自:https://www.cnblogs.com/csnd/p/12061828.html

  • 相关阅读:
    CCF 小明放学 201812-2(简单模拟)
    CSP 小明上学 201812-1 (水题)
    201903-4 消息传递接口(队列模拟)
    Betsy's Tour 漫游小镇(dfs)
    Checker Challenge跳棋的挑战(n皇后问题)
    Money Systems 货币系统(母函数)
    中国剩余定理(模板+详解)
    Biorhythms(中国剩余定理(模板题))
    输入输出外挂(纯数字型)
    欧几里德(转)
  • 原文地址:https://www.cnblogs.com/LittleJin/p/14396068.html
Copyright © 2011-2022 走看看