• 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.
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      当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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41

      此处可以看到有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
        
        • 1
        • 2
        • 3
      2. 新建一个service,命名为:test

        sudo docker service create --replicas 1 --name test alpline ping docker.com

  • 相关阅读:
    JavaIO系列——BufferedReader,BufferedWriter,PrintWriter,转换流
    Spring MVC 请求映射路径的配置,实现前后端交互
    去耦电路设计应用指南(二)电容的噪声抑制
    初识node.js与内置模块
    【HTML小游戏】推箱子网页版(附完整源码)
    Nand Flash基本认识
    华为2023鲲鹏应用创新大赛,实在智能“信创RPA”再获殊荣
    【Java基础】注释、关键字、常量及数据类型
    图论09-桥和割点
    【JUC】SpringBoot使用线程池的两种方式 注解和注入
  • 原文地址:https://blog.csdn.net/yitian881112/article/details/126339616