阿里云容器服务支持Swarm Mode

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Swarm Mode是Docker 1.12版开始推出的新功能,它将Docker Dngine、swarm的集群管理和容器编排功能集成在一起,并新增了service概念及基于LVS的4层负载均衡功能(Routing Mesh)。
+关注继续查看

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

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

Swarm Mode简介

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

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

  • 无任何外部依赖。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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
存储 Kubernetes Cloud Native
直播预告 | 容器服务 Knative 网关增强:支持 ALB
Knative 是基于 Kubernetes 之上提供的一款开源 Serverless 应用框架,能够帮助您部署和管理现代化的 Serverless 工作负载,打造企业级 Serverless 平台。ALB 面向应用层负载场景,具备自动弹性及大规模应用层流量处理能力。当前容器服务 Knative 提供 ALB 网关能力,充分发挥了流量、资源按需使用的 Serverless 能力。
直播预告 | 容器服务 Knative 网关增强:支持 ALB
|
弹性计算 Kubernetes 监控
阿里云容器服务共享GPU调度支持算力分配
ACK Pro集群支持为应用申请GPU显存和算力,能够帮助您更精细化的使用GPU的显存和算力资源。本文介绍如何使用算力分配功能。前提条件已创建ACK Pro版集群,且集群版本为1.20.11。关于Kubernetes的升级操作,请参见升级ACK集群K8s版本。已安装共享GPU组件,且Chart版本>1.2.0。关于安装共享GPU组件的具体操作,请参见安装并使用共享GPU组件和资源工具。cGP
737 0
阿里云容器服务共享GPU调度支持算力分配
|
弹性计算 Kubernetes 监控
阿里云容器服务弹性伸缩发布EIP支持助力在线视频与游戏场景
## 背景 疫情期间,在线会议等音视频应用面临大量流量冲击,为了获得更好的网路吞吐性能,常常会选择使用Host网络模型。采用Host网络模型的容器可以直接使用宿主机的IP地址与外界进行通信,若宿主机具有[弹性公网IP](https://help.aliyun.com/document_detail/32321.html),容器也能使用这个弹性公网IP进行通信。同时容器内服务的端口也可以使用宿
|
Web App开发 应用服务中间件 nginx
Serverless Kubernetes容器服务支持pod挂载弹性公网EIP
近日,阿里云Serverless Kubernetes服务推出pod挂载弹性公网IP功能,此功能使某些serverless容器应用的部署和服务访问变得更加简单和便利。
3409 0
|
弹性计算 应用服务中间件 nginx
阿里云容器服务kubernetes发布竞价实例支持
竞价实例优化运营成本 竞价实例(Spot Instance)也叫抢占式实例是一种按需实例,旨在降低部分场景下使用ECS的成本,创建竞价实例时,必须为指定的实例规格设置一个价格上限,当指定的实例规格的当前市场价格低于出价时,就能成功创建竞价实例,并按当前市场价格计费。
3472 0
|
Kubernetes 数据安全/隐私保护 容器
阿里云Kubernetes容器服务支持免密拉取私有镜像仓库
阿里云容器服务已经正式支持免密拉取ACR私有镜像,用户无需在kubernetes集群中为自己的ACR私有镜像配置ImagePullSecrets,拉取ACR私有镜像从未如此简单和轻松。
7566 0
|
弹性计算 调度 容器
阿里云容器服务发布cluster-autoscaler支持
前言 cluster-autoscaler是Kubernetes中非常受大家关注的功能特性,可以通过cluster-autoscaler实现节点级别的动态添加与删除,动态调整容器资源池,应对峰值流量。
5140 0
|
JSON Shell 数据中心
Terraform 部署容器服务Swarm集群及Wordpress应用
本文档介绍了如何通过 Terraform 在 VPC 环境下部署一个阿里云容器服务集群,并在该集群之上,部署一个 WordPress 样例应用。本文档提供一种构建阿里云基础设施的解决方案,让您通过代码来自动创建、编排和管理容器服务以及完成在容器集群上应用的自动化部署。
2335 0
|
监控 JavaScript 区块链
阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性、性能与扩展性等方面的显著提升。阿里云容器服务区块链解决方案第一时间同步升级,在v1.1新功能的基础上,提供了弹性裸金属服务器(神龙)、内置容器化Explorer、集成阿里云日志服务等方面的增强。
6843 0
|
canal 应用服务中间件 nginx
给容器服务的Kubernetes集群部署network policy支持
随着使用容器部署微服务的流行,容器平台上的服务间有复杂的调用关系。kubernetes为了满足服务间调用的访问控制,在1.3的版本中便引入了Network Policy,通过它可以实现通过标签方便的去定义访问的策略 。
12434 0
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多