问题描述
在使用ECS时,想知道如何将一个EC2实例从一个集群移动到另一个集群。用户有两个集群,分别是devcluster
和qacluster
,他希望将一个EC2实例从qacluster
移动到devcluster
。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
要将EC2实例从一个ECS集群移动到另一个集群,需要按照以下步骤进行操作:
1. 在EC2实例上编辑/etc/ecs/ecs.config
文件,将ECS_CLUSTER
设置为目标集群的名称(例如devcluster
)。
2. 停止所有任务/容器。
3. 删除检查点文件/var/lib/ecs/data/ecs_agent_data.json
。
4. 根据这里的说明,重新启动ECS agent。
为了确保EC2实例使用了正确的集群,请检查日志docker logs ecs-agent
。日志中应该有类似以下的消息:
[INFO] Registration completed successfully. I am running as 'arn:aws:ecs:eu-west-1:ACCOUNT_ID:container-instance/CLUSTER_ID' in cluster 'devcluster'
请注意,depends_on
属性并不能保证容器A的完全可用性。如果容器A需要一些额外的时间来准备并变为可连接状态(如数据库启动时间),则还需要在容器B连接之前等待适当的时间。
方案2
另一种方法是修改ECS agent使用的配置文件/etc/ecs/ecs.config
,将其指定为另一个集群的名称。然后重新启动ECS agent,这将有效地将EC2实例移动到另一个集群。
有关ecs.config
的更多信息,请参阅文档。
修改后,可以通过向ECS Agent元数据服务发送HTTP请求来验证并查看新集群的显示。具体操作请参考文档。
此外,还需要通知ECS集群本身。可以使用Register/Deregister API调用来实现,例如使用AWS CLI:
– register-container-instance
– deregister-container-instance
在ECS agent本身可能还需要进行其他清理工作,例如删除缓存的检查点文件等。具体操作请参考这里。
方案3
请注意以下操作注意版本差异及修改前做好备份。
根据2021年5月的ECS优化AMI镜像更新,sudo start
命令已被删除,检查点文件/var/lib/ecs/data/ecs_agent_data.json
已更改为agent.db
。
按照以下步骤进行操作:
1. 如前所述,编辑/etc/ecs/ecs.config
文件(添加ECS_CLUSTER=devcluster
)。
2. 使用mv /var/lib/ecs/data/agent.db /var/lib/ecs/data/agent.db.old
命令重命名代理状态文件。
3. 使用sudo systemctl restart ecs
命令重新启动ECS agent。
使用systemctl status ecs
命令检查代理的状态,应该显示Active: active (running)
。
请注意,由于我找到的Amazon在线文档仍显示旧信息,因此这个过程有点令人沮丧。感谢devops的帮助,我才能完成这个操作。