zoukankan      html  css  js  c++  java
  • Docker容器集群管理之Swarm

      Docker容器集群管理主流方案

    Swarm
    Docker公司自研发的集群管理系统。
    Kubernetes
    Google开源的一个容器集群管理系统,用于自动化部署、扩展和管理容器应用。也称为K8S
    Mesos
    Mesos是一个集群资源调度系统,对集群中的资源进行分配和管理。Marathon是运行在Mesos之上的一个服务管理框架,可管理容器生命周期。
    Docker容器集群管理主流方案
    讲
    

       Swarm、Kubernetes和Mesos简单比较:

    复杂性
    Swarm使用标准Docker接口,集成于Docker Engine,内置Overlay网络、服务发现、负载均衡,很容易上手,学习成本低。
    K8S成熟且复杂,自己的管理体系,服务发现,负载均衡等功能,学习成本高。
    Mesos是一个成熟分布式资源管理框架,一个通用的集群管理系统。
    功能
    Swarm支持Docker Compose v3来实现服务编排。
    K8S强大的功能,有着一套整体容器解决方案,使用起来更轻松。
    社区活跃度
    K8S社区相比Swarm和Mesos活跃度都高。
    

       Swarm介绍

    集群部署及节点管理
    服务管理
    使用原生Overlay网络
    数据持久化
    服务发现与负载均衡
    高可用性
    配置文件存储
    应用实战
    -手动创建和服务编排部署LNMP网站平台
    

       Swarm是什么

    Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理和编排功能。可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。
    Docker Engine CLI和API包括了管理Swarm节点命令,比如添加、删除节点,以及在Swarm中部署和编排服务。
    也增加了服务栈(Stack)、服务(Service)、任务(Task)概念。
    

       Swarm两种角色

    Manager:接收客户端服务定义,将任务发送到worker节点;维护集群期望状态和集群管理功能及Leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。
    Worker:接收并执行从管理节点分配的任务,并报告任务当前状态,以便管理节点维护每个服务期望状态。
    

     

      Swarm的特点

    1. Docker Engine集成集群管理
    使用Docker Engine CLI 创建一个Docker Engine的Swarm模式,在集群中部署应用程序服务。
    2. 去中心化设计
    Swarm角色分为Manager和Worker节点,Manager节点故障不影响应用使用。
    3. 扩容缩容
    可以声明每个服务运行的容器数量,通过添加或删除容器数自动调整期望的状态。
    4. 期望状态协调
    Swarm Manager节点不断监视集群状态,并调整当前状态与期望状态之间的差异。例如,设置一个服务运行10个副本容器,如果两个副本的服务器节点崩溃,Manager将创建两个新的副本替代崩溃的副本。并将新的副本分配到可用的worker节点。
    5. 多主机网络
    可以为服务指定overlay网络。当初始化或更新应用程序时,Swarm manager会自动为overlay网络上的容器分配IP地址。
    6. 服务发现
    Swarm manager节点为集群中的每个服务分配唯一的DNS记录和负载均衡VIP。可以通过Swarm内置的DNS服务器查询集群中每个运行的容器。
    7. 负载均衡
    实现服务副本负载均衡,提供入口访问。也可以将服务入口暴露给外部负载均衡器再次负载均衡。
    8. 安全传输
    Swarm中的每个节点使用TLS相互验证和加密,确保安全的其他节点通信。
    9. 滚动更新
    升级时,逐步将应用服务更新到节点,如果出现问题,可以将任务回滚到先前版本。
    

       集群部署及节点管理

      使用swarm前提

    Docker版本1.12+
    集群节点之间保证TCP 2377、TCP/UDP 7946和UDP 4789端口通信
    

       节点规划

    操作系统ubuntu18.04
    管理节点:192.168.56.128
    工作节点:192.168.56.129
    工作节点:192.168.56.130
    

       查看当前docker版本

      管理节点初始化swarm

    docker swarm init --advertise-addr 192.168.56.128
    

     

      工作节点加入swarm

     docker swarm join --token SWMTKN-1-2jxm5hdcno1m06v1eqzsrsrcqg1hjsvkotdojo87n67lasngkf-2ick8vihgd6jmkgpoe09wra2s 192.168.56.128:2377
    

     

      管理节点查看

     

      查看节点信息

     docker node inspect docker2
    

     

      查看运行任务数

    docker node ps
    

       

      服务管理

      创建服务 创建一个服务副本数为1 名字为hello

    docker service create --replicas 1 --name hello busybox
    

       查看

      MODE是replicated会根据默认调度算法分配节点

      REPLICAS副本数 右边是设定多少 左边是启动多少

       查看启动状态多次失败,因为busybox是一个基础镜像没有持续运行

      加一个持续运行的任务

    docker service update  --args "ping www.baidu.com" hello
    

     

      过滤出只在运行的

    docker service ps -f "desired-state=running" hello
    

     

      以上信息可以查看到是工作在docker1这个节点上面的

      对该服务进行扩容

    docker service scale hello=3
    

     

      指定docker1只作为管理节点

    docker node update --availability drain docker1
    

       作为manage的节点没有容器了 会把副本复制到其他节点管理节点的docker删除

      

      滚动更新服务

     docker service create 
    > --replicas 3 
    > --name redis 
    > --update-delay 10s 
    > redis:3.0.6
    

     

      更新

    docker service update --image redis:3.0.7 redis
    

       显示更新状态以及老版本信息

      查看刚刚设置的更新策略

    docker service inspect redis
    

     

      

      创建服务时设定更新策略

     docker service create --name my_web --replicas 10 --update-delay 10s --update-parallelism 2 --update-failure-action continue nginx:1.12
    

       --update-parallelism最大并行数量

       --update-failure-action continue更新失败后继续

      服务更新

    docker service update --image nginx:1.13 my_web
    

     

      创建服务时设定回滚策略 创建前删除docker service rm my_web

    docker service create 
    --name my_web 
    --replicas 10 
    --rollback-parallelism 2 
    --rollback-monitor 20s 
    --rollback-max-failure-ratio .2 
    nginx:1.12
    

       先更新

    docker service update --image nginx:1.13 my_web
    

       手动回滚

    docker service update --rollback my_web
    

       又回滚到1.12版本了

      

  • 相关阅读:
    从TList 复制数据,到另一个TList
    如何跨单元、跨类地访问Delphi类的私有域(网上收集)
    关于类的方法(不是类方法),类方法指针
    Delphi中枚举类型的应用[转]
    SQL Server日志过大会影响查询结果 .
    mssql 2005/2008/2012如何添加、查询、修改分区表中的数据 .
    SQL Server 分区表 删除(合并)一个分区 .
    sql全文索引的非聚合词库
    SQL Server 分区表添加一个分区 .
    SQL Server 2005 将普通表转换成分区表 .
  • 原文地址:https://www.cnblogs.com/minseo/p/10171229.html
Copyright © 2011-2022 走看看