阿里云容器服务支持Swarm Mode

简介: 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

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
788 2
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
428 10
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
450 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
805 2
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
372 0
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
346 0
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多
    下一篇
    开通oss服务