容器服务中的节点失效时Docker容器重新调度介绍

    生产环境部署的服务都会考虑单点失效情况下的高可用性。在容器服务中,当节点失效的时候,能否重新调度容器到健康节点上继续提供服务对于生产环境中的服务高可用性尤为重要。下面我们就演示一下容器服务的重新调度功能。

    首先创建一个含有3个节点的集群。

 

    我们使用如下编排模板创建一个含有三个实例的nginx service,注意到添加了一个属性reschedule:on-node-failure意思是在节点失效的时候 会重新调度这个容器。

web:
    image: nginx
    restart: always
    environment:
        - reschedule:on-node-failure
    labels:
        aliyun.scale: "3"

    

     创建成功后容器分布如下:

    

    下面我们在 ECS 控制台上将其中一台机器关掉来模拟节点宕机。

 

    我们来看看目前容器情况如何

    可以看到,在失效节点上的容器已经被自动迁移到另外一个机器上,而且这样配合前面的 SLB 负载均衡,可以做到节点宕机不影响线上服务的效果。

    下面我们将宕机的那台机器重新启动起来。因为我们的容器都设置了restart: always, 这样我们原来在这台机器的容器就会重新启动,会导致原service多出一个容器。这里我们会将多余出来的这个容器删除,保证service的容器个数。

     

     Docker Swarm 在overlay 网络下不会重新调度失效节点的容器,而且对于"复活"的节点,它也不会去删除掉多余的容器。 从上面的例子我们可以看到,我们解决了这些问题。

    未来我们会提供更多的调度机制来保证线上服务的稳定可靠。更多内容请看参考 容器服务

时间: 2024-12-09 17:00:09

容器服务中的节点失效时Docker容器重新调度介绍的相关文章

当Docker遇到数据库:在阿里云容器服务中使用RDS

Docker与持久化服务 最近一段时间以来,微服务架构和Docker成为了技术社区的"网红".其背后的原因是将微服务与Docker的结合在一起对现有的软件生命周期从架构设计.开发测试到运维迭代构成了一种"颠覆性"的力量:微服务鼓励开发者将整个软件解构为较小的功能组件:每个组件能够独立开发.运维.伸缩和容错:组件之间通过标准的服务接口进行通信,而组件可以选择最适合的技术栈来实现.而容器技术进一步拓展了这种解耦性,它能够将软件与其部署环境分离,利用容器敏捷和可移植的使得

使用阿里云容器服务Jenkins实现持续集成和Docker镜像构建(updated on 2017.3.3)

持续集成作为敏捷开发重要的一步,其目的在于让产品快速迭代的同时,尽可能保持高质量.每一次代码更新,都要通过自动化测试来检测代码和功能的正确性,只有通过自动测试的代码才能进行后续的交付和部署.本文主要介绍如何将时下最流行的持续集成工具之一的Jenkins结合阿里云容器服务,实现自动测试和镜像构建推送. 接下来的演示是如何通过阿里云容器服务Jenkins实现自动测试和Docker镜像构建,实现高质量的持续集成.具体场景:每次代码提交到GitHub上的nodejs的项目中,阿里云容器服务Jenkins

在阿里云容器服务中使用NAS(NFS)数据卷

在阿里云容器服务中使用NAS(NFS)数据卷 Docker的特性,决定了容器本身是非持久化的,容器被删除后其中的数据也一并被删除了.Docker提供数据卷(Volume),通过挂载宿主机上的目录来实现持久存储. 但宿主机上的数据卷有很大的局限性 容器在机器间迁移时,数据无法迁移 不同机器之间不能共享数据卷 为了解决这些问题,阿里云容器服务提供第三方数据卷,将各种云存储包装成数据卷,可以直接挂载在容器上,不同容器间可以共享,并在容器重启.迁移时自动重新挂载. 在上一篇文章中,我们介绍了如何使用OS

在容器服务中如何暴露服务到公网并配置负载均衡

在容器服务中,暴露应用提供的服务到公网有两种选择,一种是通过系统默认的路由应用acsrouting暴露服务到公网,适用的场景是:普通且简单的7层协议负载均衡,web页面访问路由服务,容器集群内服务之间7层协议互相访问的通信代理和负载均衡.另外一种是通过自定义SLB方式暴露服务,这种方式是属于较高级的功能,适用的场景是:4层协议负载均衡,自定义各服务的路由,在将传统架构迁移到容器架构过程中非容器集群的服务访问容器集群中容器的服务.下面分别以举例的方式介绍这些暴露服务到公网并配置负载均衡的能力. 如

在阿里云容器服务中使用定时任务

定时任务是常见需求.普遍的做法是,选择一台或几台机器,通过crontab实现定时任务.但是对于大规模或大量的定时任务,这种做法的缺点非常多,比如: 可靠性低,一台机器宕机,该机器上的定时任务就无法执行了 没有调度功能,机器之间的负载可能不均衡 没有重试机制,任务可能运行失败 无法运行大规模分布式任务 阿里云容器服务在离线任务的基础上,增加了定时任务的功能,通过简单的描述,解决了上述问题.关于离线任务的细节,请参考在阿里云容器服务中运行离线作业. 只有10月25号之后升级了agent版本或新创建的

容器服务中使用ELK

容器服务中使用ELK 日志是IT系统的重要组成部分,记录了系统在什么时候发生了什么事情.我们可以根据日志排查系统故障,也可以做统计分析.通常日志存放在本机的日志文件里,需要查看日志的时候,登录到机器上,用grep等工具过滤关键字.但是当应用要部署在多台机器上的时候,这种方式查看日志就很不方便了,为了找到一个特定的错误对应的日志,不得不登录到所有的机器上,一个文件一个文件的过滤.于是出现了集中式的日志存储方式:所有日志收集到日志服务里,在日志服务里可以查看和搜索日志. 在Docker环境里,集中式

在阿里云容器服务中运行离线作业

目前在在线应用,尤其是无状态的在线应用领域,Docker容器已经成为执行层的事实标准,有大量云服务商提供容器云服务.但在离线计算领域,还很少有服务商提供这样的能力. 但离线计算在实际生产中使用很广,小到一个脚本任务,大到大数据分析:而且离线计算对资源隔离.环境隔离的需求更高,这正是docker容器的优势.因此,阿里云容器服务抽象出离线计算的基本模型,推出了基于Docker容器的离线计算功能.其核心功能是: 作业编排 作业调度与生命周期管理 存储与日志等功能的集成 基本概念 首先介绍一下离线计算的

容器服务中如何收集日志到阿里云日志服务

容器服务中目前提供了日志集成的功能,使用该功能,可以把容器中的日志(文件方式或标准输出方式)自动收集到阿里云的日志服务中.具体使用方式如下: 开启日志服务 确认已开通访问控制服务和阿里云日志服务(该步是为了确保容器服务有权限去完成在阿里云日志服务中创建project等操作) 点击确定,日志服务就开通成功了,可以登录到日志服务的控制台(https://sls.console.aliyun.com/#/) 查看有一个project自动帮你创建完成了,名称是acslog-project-集群id 接下

利用阿里云容器服务实现自定义节点伸缩

简介 阿里云容器服务很早就提供了基于集群CPU/内存的平均使用量触发节点自动伸缩功能,帮助许多客户自如应对业务压力的弹性变化.其原理是利用阿里云的云监控能力,在资源使用(cpu和memory)达到阈值时,触发节点伸缩. 同时还有一些企业级用户希望根据自身的监控数据和逻辑判断是否进行扩容和缩容操作,甚至可以按照固定时间进行节点扩容和缩容,针对这种场景,就需要调用的是扩容或者缩容触发器. 容器服务目前提供创建节点触发器的功能,调用节点触发器,并可以利用openAPI查看扩容出来的ECS节点方便管理和