天天看点

docker笔记6--Docker Swarm常见操作

docker笔记6--Docker Swarm常见操作

  • ​​简介​​
  • ​​swarm介绍​​
  • ​​节点介绍​​
  • ​​服务和任务​​
  • ​​负载均衡​​
  • ​​swarm集群搭建​​
  • ​​常用命令​​
  • ​​说明​​

简介

swarm介绍

swarm 包含多个运行在swarm mode下的docker host,这些hoshs包括manager和worker角色。没给你host既可以做为manager,也可以作为worker,或者2者都可以。

当创建一个服务的时候,即定义了一个最佳的状态,包括服务replicas、网络、存储、以及暴露给外面的端口等资源。docker用于维护需要的状态,如果一个节点不可用,docker将调度该节点的任务到其他节点。

节点介绍

节点即为加入swarm集群中的docker实例(docker 节点)。

当实施一个应用到swarm时候,就需要提交一个服务的定义到管理节点(manager node),管理节点就会分配工作单元(task)到对应的工作节点(work node).

工作节点接受并执行来自于管理节点的任务,默认情况下管理节点也作为一个work节点跑对应的服务,但实际中可以配置service不运行在manager上,使manager仅仅充当管理角色。worker节点会定期向manger通知分配的任务状态,以便于manager能维护每个worker需要的状态。

服务和任务

service是需要执行在各个节点上任务的定义。它是swarm系统的核心结构,也是用户和swarm交互的主要方式。当创建1个服务的时候,通常会指定容器镜像和容器内部执行的命令。

一个任务包含了一个docker 容器和y一些跑在容器内部的命令, 它是swarm调度的原子单元。 管理节点根据服务中replicas的规模,将任务分配到各个工作节点。一旦一个任务分配到某个节点,它就不能移动到另外及诶单,除非该任务失败。

负载均衡

管理节点使用ingress load balancing 来暴露服务,从而使外部到swarm为可用状态。在用户没有指定端口的情况下,swarm manager节点默认为服务分配一个PublishedPort,通常在30000-32767 范围内。

Swarm mode 拥有一个内部DNS不见,用于自动地分配每个服务一个DNS实体。基于服务的DNS名称,swarm 管理节点在集群内部服务之间用 internal load balancing 来分发请求。

swarm集群搭建

通过以下3个步骤即可搭建一个swarm集群了,后续可以根据需要增删节点,改变节点角色。

  1. swarm初始化
$ docker swarm init
Swarm initialized: current node (p2phyrhwcp3k155gu24cci89x) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-5ig1j6az5r0wah7bq3qs3q5zv8iaz4kmubvj79rvns807f3vcm-dza07w1gla63weerzmfaq34xb 10.120.75.102:2377
To add a manager to this swarm, run 'docker swarm join-token manager'      
  1. 添加节点到集群
\# docker swarm join      
  1. 提升work节点为manager
查看当前节点状态:
$ docker node ls
ID                            HOSTNAME                          STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
p2phyrhwcp3k155gu24cci89x *   test01   Ready               Active              Leader              19.03.8
hwkcculi3kop48g75k88mc110     test02   Ready               Active                                       19.03.11
rr7nl5cd5yecv5nklfsr9bpzg     test03   Ready               Active                                       19.03.8

执行docker node demote <node id>将 manager 节点 demote 为 worker 节点
执行docker node promote <node id>将 worker 节点 promote 为 manager 节点
$ docker node promote hwkcculi3kop48g75k88mc110
Node hwkcculi3kop48g75k88mc110 promoted to a manager in      

常用命令

  1. swarm init

    swarm 集群初始化,具体命令见swarm初始化

  2. swarm join

    节点加入集群,在任意一个manager上执行皆可,具体见添加节点到集群

  3. service create

    新建服务

新建一个服务,名称为reids
docker service create --name redis redis:3.0.6 
新建一个服务,3个replica,名称为redis3
 docker service create --name redis3 --replicas=3 redis:3.0.6      
  1. ​​service_create​​
  2. service inspect

    #docker service inspect redis

    #docker service inspect redis --pretty

    添加–pretty后,以比较友好的方式输出容器信息

  3. service ls

    ls 查看所有服务

#docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ckipvhtby52z        redis               replicated          1/1                 redis:3.0.6         
gmi00f0g7enf        redis3              replicated          3/3                 redis:3.0.6   
#docker service ls -q n只列出IDs      
  1. service rm

    删除redis3 服务

    #docker service rm redis3

  2. service scale

    将redis服务扩容为2个

    #docker service scale redis=2 -d

  3. service ps

    列出redis的所有服务, -q参数使之只列出IDs

    #docker service ps redis

    #docker service ps redis -q

  4. service update

    1)限制cpu为2

    # docker service update --limit-cpu 2 redis

    2)添加8079映射到容器内6379端口

    # docker service update --publish-add published=8079,target=6379 redis

    ​​​service_update​​

说明

继续阅读