阿里云容器服务支持Swarm Mode

Swarm Mode是Docker 1.12版开始推出的新功能,它将Docker Engine、swarm的集群管理和容器编排功能集成在一起,并新增了service概念及基于LVS的4层负载均衡功能(Routing Mesh)。

阿里云容器服务第一时间支持了Swarm Mode,并在上面做了很多功能扩充。这篇文章将介绍这些新功能以及它与旧Swarm集群的区别。

Swarm Mode简介

Swarm Mode集群的架构图如下图所示:

这个架构有以下一些特点:

  • 无任何外部依赖。Manager之间通过Raft协议,组成一个分布式KVStore,替代了原Swarm中的etcd。
  • Daemon身兼Engine、Manager、Agent三职
  • Manager不直接发送命令给Worker的Daemon,只是同步Task信息
  • 高可用架构,只需将Manager设置成>=3的奇数个

由于没有外部依赖,Swarm Mode集群的部署非常简单,只需要安装好DockerEngine,再设置好节点角色即可。

阿里云容器服务上的Swarm Mode集群

集群部署

部署Swarm Mode集群跟部署之前的Swarm集群没有什么差别,用户只需要在创建时选择集群类型即可,容器服务会自动完成docker安装、集群角色设置的工作。需要注意的是,为了实现高可用,集群至少需要有3个节点。
我们会默认设置3个Manager。当节点加入集群时,如果当前Manager数量不足3个,节点会被设置为Manager,否则会被设置为Worker。

这两种集群的差异主要有:

Swarm集群 SwarmMode集群
管控 全部在容器服务内部,用户机器都是工作机。用户机器挂掉不影响集群。 Manager在用户机器上,当健康的Manager机器少于两台时,集群无法工作。另外,重置Manager机器会丢失集群管控数据,相当于manager下线。
编排模板 支持compose V1、V2 支持compose V1、V2、V3,V1、V2是swarm应用,V3是swarm mode应用
容器启动参数 支持几乎docker run的所有参数 不支持privileged、host network、host pid等参数
修改应用配置 只有有变化的服务会被重启。 目前所有服务都会被重启,后续会改进成只重启有变化的服务。
健康检查 容器不健康时,只会从路由中摘掉容器 容器不健康时,会从路由中摘掉容器,同时重启容器
容器迁移 容器挂掉时,原地重启;或者配置reschedule环境变量,当机器掉线时迁移 自动保证服务的容器数量,数量不足时会重启或者迁移容器
有状态应用 更新容器时,继承原容器的数据卷,保证数据不丢失 更新容器时不继承数据卷,除非使用命名数据卷,否则数据会丢失
基于SLB的负载均衡 需要用户手工配置SLB的监听及后端机器;一个SLB只能绑定一个服务 自动配置SLB;一个SLB可以绑定多个服务
蓝绿发布 支持基于routing和SLB的蓝绿发布 只支持基于routing的蓝绿发布

应用部署

我们支持通过编排模板和交互界面两种方式来部署应用。

编排模板(compose)

Swarm Mode集群只支持compose v3和compose v3.1,其语法格式参见https://docs.docker.com/compose/compose-file/
下面是一个简单的示例

version: "3.1"
services:
    nginx:
        image: nginx:latest
        deploy:
            mode: global
        ports:
          - 80:80

扩展功能

下面的表格列举了原Swarm集群上的扩展功能在Swarm Mode集群上的支持情况。

功能 Swarm集群 Swarm Mode集群
服务的健康检查 aliyun.probe标签 compose中的healthcheck一节。该功能由DockerEngine原生提供
滚动更新(rolling update) aliyun.rolling_updates标签 compose中的update_config一节。该功能由Swarm Mode原生提供,可设置更新的批量、间隔时间、失败后的动作等。
服务依赖 aliyun.depends标签 compose中的depends_on一节。服务会按照依赖关系顺序启动,默认等待3分钟,如果服务3分钟后依然没有达到运行状态,会忽略并继续部署其他服务,但最终部署结果是失败。
服务的容器数量 aliyun.scale标签 compose中的replicas一节。该功能对应于Swarm Mode的Replicated Service,当容器故障时,会自动创建新容器,始终保证replicas等于指定的数量。
全局服务 aliyun.global标签 compose中的mode一节。该功能对应于Swarm Mode的Global Service,当新节点加入集群里,会自动创建相应容器。
负载均衡 aliyun.routing、aliyun.lb标签 参考下面的负载均衡一节。
日志 aliyun.log_标签 没有变化。
数据卷 compose的volumes一节 使用方法没有变化,但使用本地数据卷时,如果主机文件夹不存在,不会自动创建,需要用户手工创建。
监控与自动扩缩容 aliyun.auto_scaling、aliyun.reschedule标签 没有变化。
外部服务 compose的external一节 不支持。
容器重新调度 环境变量中的reschedule:on-node-failure 默认提供,不需要设置。
高可用性调度 环境变量中的availability:az 将在Docker CE 17.06 中的compose模板中支持Topology aware调度。

路由与负载均衡

原Swarm集群支持7层(aliyun.routing)和4层(aliyun.lb)路由,Swarm Mode集群也支持这两种模式,且语法不变,如下面的编排模板所示:

version: "3"
services:
    nginx:
        image: nginx:latest
        ports:
            - 80
        deploy:
            mode: replicated
            replicas: 1
        labels:
            aliyun.routing.port_80: web
            aliyun.lb.port_80: tcp://slbtest:8080

aliyun.routing.port_80: web:将web子域转发到nginx服务的80端口。这种模式下,不需要暴露容器端口到主机,即如果只用这种方式,上面模板中的ports一节可以省略。
aliyun.lb.port_80: tcp://slbtest:8080:将slbtest这个SLB实例的8080端口绑定到nginx服务的80端口。老的Swarm集群,要求用户手工将slbtest的后端绑定一个端口,但Swarm Mode中不需要,我们会自动根据用户暴露的端口,自动修改slb的后端。另外,Swarm Mode中,同一集群的不同服务可以共享同一个SLB

时间: 2024-10-22 06:51:25

阿里云容器服务支持Swarm Mode的相关文章

Docker常见故障排查指南 - 阿里云容器服务

对于Docker的初学者而言,当容器或应用出现了问题不知从何入手进行排查.为此,我们准备了一个简单指南来帮助阿里云容器服务的用户进行故障排查. 由于阿里云容器服务完全兼容Docker Swarm,并支持使用原生Docker Client/API,所以很多内容对于 Docker/Docker Swarm的用户也是适用的. Docker问题分类 我们可以把Docker在使用中的问题分为如下几类, 安装故障:Docker Engine 无法正常配置使用 应用故障:应用执行状态与预期不一致 容器故障:无

利用Docker和阿里云容器服务部署高可用Ghost博客集群

简介 Ghost是一个流行的开源博客平台(Open source blogging platform),基于 Node.js 构建,博客内容默认采用 Markdown 语法书写,给用户提供一种更加纯粹的内容写作与发布平台. Ghost的部署和运维需要一定的Web开发基础,利用Docker技术可以大大简化Ghost的部署和更新.Docker Hub上面也提供了Ghost官方镜像 使用Docker镜像,不懂得Node.Js的同学也可以分分钟在本地或阿里云容器服务上搭建起一个单节点的Ghost博客,但

阿里云容器服务新增支持Kubernetes编排系统,性能重大提升

阿里云容器服务提供了面向企业客户的技术能力,为企业应用容器化提供了迁移工具和咨询服务.深度学习.区块链等应用解决方案,以帮助企业优化现有IT投资和加速业务创新. 10月12日云栖大会上,阿里云专有云新版本(飞天专有云敏捷版2.0)宣告了对Kubernetes的支持:日前,公共云容器服务也宣布了开放支持Kubernetes 1.8.1 版本的托管服务,并且成为全球首批通过Kubernetes一致性认证的厂商之一.作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻.融合了

阿里云容器服务简介

容器服务是阿里云在2015年12月推出的一项新产品,目前正处于公测阶段.   容器服务是一项高性能可扩展的容器管理服务,支持在一组阿里云云服务器上通过 Docker容器来部署或编排应用.用户不再需要安装.运维.扩展自己的集群管理基础设施,而是可以直接通过阿里云控制台图形化界面或API进行容器操作和生命周期管理.容器服务整合了阿里云负载均衡SLB.专有网络 VPC等云产品,为云应用部署与运维场景提供丰富的一站式功能支持.   和业内同类容器服务产品AWS EC2 Container Service

阿里云容器服务 - 提速云端应用部署与运维

阿里云容器服务 - 提速云端应用部署与运维 阿里云容器服务简介 什么是容器服务 什么是容器 容器服务解决了什么问题 容器服务架构 容器服务使用流程及场景 容器服务 阿里云容器服务(Container Service)是一种高性能可伸缩的容器管理服务.支持一键部署Docker集群,提供便利的基于容器的服务与应用的编排.部署及完整的生命周期管理.提供阿里云Docker镜像加速管理服务,支持基于Git等代码仓库集成.http://www.aliyun.com/product/containerserv

阿里云容器服务TCP的负载均衡配置

阿里云容器服务在使用的过程中,针对TCP负载均衡的场景,会遇到这样的问题:如果一个应用的客户端镜像和服务端镜像均部署在同一个节点(ECS)上面,由于受SLB的限制,该应用的客户端不能通过SLB访问本机的服务端.本文试图以常用的基于TCP协议的redis为例,逐步深入的方式来解决这个问题,同时带大家了解一下容器服务的概念. 解法一:通过调度容器,避免客户端和服务端容器部署在同一个节点 示例应用模板(使用了lb标签,和swarm fileter功能) redis-master: ports: - 6

阿里云容器服务飞天敏捷版详解

概述 飞天敏捷版深度整合了Docker商业版套件和阿里的容器服务,成为国内唯一具有全商业版支持能力的容器云平台,可以部署在客户自有数据中心,包含从容器的创建到运行以及镜像的全生命周期管理.飞天敏捷版另外提供开放的接口,全面兼容Docker原生API和命令行以及第三方工具,为客户提供敏捷.弹性.开放的容器云平台.借助阿里云在公共云和专有云方面的积累,飞天敏捷版更提供了独特的混合云管理模式,让客户轻松管理云上云下运行环境. 飞天敏捷版的架构可以用下图表示: 从图中我们可以看到,飞天敏捷版底层基于Do

利用Docker和阿里云容器服务轻松搭建分布式TensorFlow训练集群(上)

本系列将利用Docker技术在阿里云HPC和容器服务上,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打通TensorFlow持续训练链路 第四篇:利用Neural Style的TensorFlow实现,像梵高一样作画 第五篇:轻松搭建分布式TensorFlow训练集群(上) 本文是该系列中的第五篇文章, 将为您介绍如何在本机以及HPC和阿里云容器服务上快速部署和使用分布式TensorF

Docker监控:基于阿里云容器服务构建自己的Docker监控框架

微服务架构通过将一个复杂系统分解成一系列独立开发.部署和运维的服务,提升了整个系统的敏捷性,可以灵活的响应业务和规模的变化.而Docker技术则将服务的部署和环境完全解耦,利用Docker的可移植性和敏捷性,快速交付分布式应用,从而大大提升了部署运维效率.然而大规模分布式微服务应用,也会给系统监控带来新的挑战. 除去分布式应用自身的复杂性,微服务倡导的快速迭代和动态部署都会加剧管控的复杂性.从技术角度来看,传统的监控系统大多是针对物理机或虚拟机设计的,通常使用静态的配置项来建立应用.环境与监控指