docker&kubernets篇(十九)

集群抽象工具Swarm

在Docker应用越来越深入的今天,把调度粒度停留在单个容器上是非常没有效率的。同样地,在提高对Docker宿主机管理效率和利用率的方向上,集群化管理方式是一个正确的选择。是时候从更高的抽象层次上使用Docker了,Swarm就是将多宿台主机抽象为“一台”的工具。

Swarm简介

目前传统的(没有集群管理工具)
在这里插入图片描述有了Swarm后,使用多台Docker宿主机的方式就变成了图

在这里插入图片描述Swarm最大程度兼容Docker的远程API,目前为止,Swarm已经能够支持95%以上的Docker远程API,这使得所有直接调用Docker远程API的程序能方便地将后端替换为Swarm,这类程序包括Docker官方客户端,以及Fig、Flynn和Deis这类集群化管理使用Docker的工具。
Swarm除了在多台Docker宿主机(或者说多个Docker服务端)上建立一层抽象外,还提供对宿主机资源的分配和管理。Swarm通过在Docker宿主机上添加的标签信息来将宿主机资源进行细粒度分区,通过分区来帮助用户将容器部署到目标宿主机上,同样通过分区方式还能提供更多的资源调度策略扩展。

现阶段Swarm依然处于初期开发过程中,对Docker镜像的操作,以及更复杂的调度策略等方向上,还没有形成Production Ready的实现,因此本书对Swarm使用只体现在几个核心功能上。对于一个Swarm集群,集群内节点分成Swarm Agent和Swarm Manager两类。Agent节点运行Docker服务端,Docker Release的版本需要保证一致,且为1.4.0或更新的版本。Manager节点负责与所有Agent上的Docker宿主机通信以及对外提供Docker远程API服务,因此Manager需要能获取到所有Agent地址。实现方式可以是让所有Agent到网络上的某个位置注册,Manager到相同的地址获取最新的信息,这样Agent节点的活动就可以被实时侦测;也可以是事先将所有Agent的信息写在Manager节点的一个本地文件中,但这种实现无法再动态地为集群增加Agent节点。

Swarm 实战

  1. 获取swarm镜像

    sudo docker pull swarm

  2. 初始化swarm,搭建单机版swarm环境

    sudo docker swarm init
    如果要集成集群环境

    [root@iZuf6bm702o3rrjlhq9xt5Z ~]# docker swarm init --advertise-addr  172.29.227.255
    Swarm initialized: current node (k7uveh6ie7dkl19nef8770d6k) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
     docker swarm join --token SWMTKN-1-5whmzfu54ttj6n24llboq0vppp0v1j2u9weqoob5yjt9hx4jie-   bmab0o7f7ur2i99dhbvux6923 172.29.227.255:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    

    当swarm创建成功之后会生成一个token SWMTKN-1-5whmzfu54ttj6n24llboq0vppp0v1j2u9weqoob5yjt9hx4jie- bmab0o7f7ur2i99dhbvux6923 172.29.227.255:2377

  3. 查看当前集群信息

    sudo docker info

    [root@iZuf6bm702o3rrjlhq9xt5Z ~]# docker info
    Client:
       Context:    default
       Debug Mode: false
       Plugins:
          app: Docker App (Docker Inc., v0.9.1-beta3)
          buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
          scan: Docker Scan (Docker Inc., v0.17.0)
    
    Server:
       Containers: 10
         Running: 0
         Paused: 0
         Stopped: 10
       Images: 4
       Server Version: 20.10.17
       Storage Driver: overlay2
          Backing Filesystem: extfs
          Supports d_type: true
          Native Overlay Diff: false
          userxattr: false
       Logging Driver: json-file
       Cgroup Driver: cgroupfs
       Cgroup Version: 1
       Plugins:
          Volume: local
          Network: bridge host ipvlan macvlan null overlay
          Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
    Swarm: active
      NodeID: k7uveh6ie7dkl19nef8770d6k
      Is Manager: true
     ClusterID: 5iwn6asj14aqwv6qrgb8ip4c3
      Managers: 1
      Nodes: 1
      Default Address Pool: 10.0.0.0/8  
      SubnetSize: 24
      Data Path Port: 4789
      Orchestration:
        Task History Retention Limit: 5
      Raft:
        Snapshot Interval: 10000
    

    此处可以看到有clinet,server,swarm等节点key, swarm的状态是active

    1. 查看当前swarm成员结点

         sudo docker node ls
          ID                            								HOSTNAME                 			 STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
          k7uveh6ie7dkl19nef8770d6k *   iZuf6bm702o3rrjlhq9xt5Z   Ready     Active         		Leader          				 20.10.17
      
    2. 新建一个service,命名为:redis_test

      sudo docker service create --replicas=3  --name redis_test redis
      

      此处备注一下,service对应的镜像不需要在子node能够访问,否则无法通过swarm创建子service在子节点上

      Swarm: active
      	NodeID: p8sdseus4dpawefr6gl0ntbet
      	Is Manager: false
      	Node Address: 172.18.137.47
      	Manager Addresses:
      		114.55.103.145:2377
      	Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
      

      查看的docker通过swarm生成的节点service可以看到此节点非manager,

      [root@iZuf6bm702o3rrjlhq9xt5Z ~]# docker ps
      CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS      NAMES
      f47da9f4c95f   redis:latest   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   			6379/tcp   redis_test.1.jxzreea5b03rm430cihc9qrq0
      e62e383ebed0   redis:latest   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   		6379/tcp   redis_test.2.x62bus9qk2c94ss6muh8kmsno
      

      然后去manager上面看下

      [root@iZbp102fxl8duhse0avs3mZ ~]# docker ps
       CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                       NAMES
       79918571215d   redis:latest             "docker-entrypoint.s…"   5 minutes ago    Up 5 minutes    6379/tcp                                    redis_test.3.r2py3vct0wpc2cwj5tytt2xbp
       8cd8fade4be9   composetest_web:latest   "flask run"              13 minutes ago   Up 13 minutes                                               composetest_webtest.3.aap09uztkitpg6547yixsf6fs
       90f44bcbbcb7   composetest_web:latest   "flask run"              13 minutes ago   Up 13 minutes                                               composetest_webtest.2.gjm3n4cgvgg4frpvp9654sj55
       cdba2e03d2cd   composetest_web:latest   "flask run"              13 minutes ago   Up 13 minutes                                               composetest_webtest.1.re4pwp1t3fnevst3z4rqsjcdr
       6b852f2b68b3   composetest_web          "flask run"              5 days ago       Up 5 days       0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   composetest-web-1
       73ae66443764   redis                    "docker-entrypoint.s…"   5 days ago       Up 5 days       6379/tcp                                    composetest-redis-1
       9b651b43076f   haproxy                  "docker-entrypoint.s…"   5 weeks ago      Up 5 weeks      0.0.0.0:6301->6301/tcp, :::6301->6301/tcp   Haproxy
       0e206ce34569   django                   "/bin/bash"              6 weeks ago      Up 5 weeks                                                  App2
       ce9aa6740771   django                   "/bin/bash"              6 weeks ago      Up 5 weeks                                                  App1
       ee95a0ae7e5f   redis                    "docker-entrypoint.s…"   6 weeks ago      Up 6 weeks      	6379/tcp                                    redis-slave2
       0df99da2ff2e   redis                    "docker-entrypoint.s…"   6 weeks ago      Up 6 weeks      6379/tcp                                    redis-slave1
       790681bc9bcf   redis                    "docker-entrypoint.s…"   6 weeks ago      Up 5 weeks      6379/tcp                                    redis-master
      
      

      可以看到manager上有一个redis_test服务,我们也可以通过的dorcker service ls 查看service 总揽

      [root@iZbp102fxl8duhse0avs3mZ ~]# docker service ls
       ID             NAME                  MODE         REPLICAS   IMAGE                    PORTS
       uerxnt8m9wyj   composetest_webtest   replicated   3/3        composetest_web:latest   
       kto59vvjj0sr   redis_test            replicated   3/3        redis:latest     
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitian_hm

您的支持是我最大鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值