Swarm mode 集群服务编排的容器重新调度



模板版本支持

Compose V1/V2Compose V3
环境变量中的 reschedule:on-node-failure 或标签。不需要设置,replicated 服务 能够保证容器自动迁移。


Compose V1/V2


容器服务支持对 Docker 容器的重新调度:当一个节点失效时,容器可以被自动调度到其他可用节点自动运行。
缺省情况下,容器的重新调度策略是关闭的。根据需要,您可以用如下配置来让重调度策略生效。
容器服务提供兼容 Docker Swarm 的容器重新调度策略,可以通过环境变量方式或者 label 方式启动。
[backcolor=transparent]环境变量:
  1. [backcolor=transparent]redis[backcolor=transparent]:
  2. [backcolor=transparent]  image[backcolor=transparent]:[backcolor=transparent] redis
  3. [backcolor=transparent]  environment[backcolor=transparent]:
  4. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] reschedule[backcolor=transparent]:[backcolor=transparent]on[backcolor=transparent]-[backcolor=transparent]node[backcolor=transparent]-[backcolor=transparent]failure

[backcolor=transparent]Label:
  1. [backcolor=transparent]web[backcolor=transparent]:
  2. [backcolor=transparent]  image[backcolor=transparent]:[backcolor=transparent] nginx
  3. [backcolor=transparent]  restart[backcolor=transparent]:[backcolor=transparent] always
  4. [backcolor=transparent]  environment[backcolor=transparent]:
  5. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] aaaaa[backcolor=transparent]=[backcolor=transparent]aaaaa
  6. [backcolor=transparent]  labels[backcolor=transparent]:
  7. [backcolor=transparent]    aliyun[backcolor=transparent].[backcolor=transparent]scale[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"3"
  8. [backcolor=transparent]    com[backcolor=transparent].[backcolor=transparent]docker[backcolor=transparent].[backcolor=transparent]swarm[backcolor=transparent].[backcolor=transparent]reschedule[backcolor=transparent]-[backcolor=transparent]policies[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"[\"on-node-failure\"]"

[backcolor=transparent]注意:如果重新调度容器之后,需要恢复 Docker 容器所需的持久化状态,需要配合支持数据迁移或共享的 Docker 文件卷。

展开
收起
反向一觉 2017-10-30 15:15:51 2349 分享 版权
阿里云 AI 助理回答

看起来您在询问关于Docker Compose不同版本中如何支持容器的重新调度,特别是在节点失败时自动迁移容器的能力。这里有一些关键点来帮助理解:

Docker Compose V1/V2

在Docker Compose较早的版本(V1和V2)中,要实现容器在节点故障时自动重新调度到其他可用节点的功能,可以通过以下两种方式配置:

环境变量方法:

在服务定义中,为特定服务添加环境变量来启用重调度策略。例如,在YAML文件中,您可以这样设置:

services:
  redis:
    image: redis
    environment:
      - reschedule:on-node-failure

这行environment配置告诉Docker在节点失败时重新调度名为redis的服务。

标签(Label)方法:

另一种方法是使用标签(labels)。通过给服务指定特定的Swarm标签来控制重新调度行为,如:

services:
  web:
    image: nginx
    restart: always
    labels:
      aliyun.scale: "3"
      com.docker.swarm.reschedule-policies: ["on-node-failure"]

在这个例子中,web服务不仅设置了重启策略为always,还通过标签指定了当节点失败时的重新调度策略。

Docker Compose V3及以后

对于Compose文件格式V3及其后续版本,虽然上述直接通过环境变量或特定标签配置重新调度策略的方式可能不再直接适用(因为Compose V3更侧重于单主机部署模型,而这些特性更多与Swarm集群相关),但Docker和Kubernetes等编排工具的集成已经更加成熟。在现代实践里,通常推荐使用Kubernetes作为容器编排平台,它原生支持Pod的自动重启、容错和调度策略,无需手动设置类似reschedule:on-node-failure这样的选项。

阿里云容器服务

如果您是在阿里云上使用容器服务,比如ACK(Alibaba Cloud Container Service for Kubernetes),则可以利用Kubernetes的原生功能,如Deployment、StatefulSet等资源对象,它们内建了对容器故障自动恢复的支持。例如,使用Deployment创建的Pods默认就会在遇到节点故障时由系统自动重新调度到健康节点上。

数据持久化注意事项

无论采用哪种调度策略,确保数据的持久性和可访问性至关重要。这意味着需要正确配置卷(Volume)以支持数据迁移或共享,比如使用网络存储(如NFS、阿里云的NAS)、持久卷(Persistent Volume, PV)和持久卷声明(Persistent Volume Claim, PVC)等,确保即使容器迁移,其数据也能随之安全地移动或保持可访问状态。

综上所述,随着技术的发展,虽然具体的配置细节和最佳实践可能会随时间变化,但核心目标始终是确保服务的高可用性和数据的可靠性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

国内唯一 Forrester 公共云容器平台领导者象限。

还有其他疑问?
咨询AI助理