手动更新 Amazon ECS 容器代理(适用于非经 Amazon ECS 优化的 AMI)
有时,您可能需要更新 Amazon ECS 容器代理以获取错误修正和新功能。更新 Amazon ECS 容器代理不会中断容器实例上正在运行的任务或服务。
注意
代理更新不适用于 Windows 容器实例。我们建议您启动新的容器实例来更新您的 Windows 集群中的代理版本。
-
通过 SSH 登录到容器实例。
-
检查您的代理是否使用
ECS_DATADIR
环境变量保存其状态。ubuntu:~$
docker inspect ecs-agent | grep ECS_DATADIR
输出:
"ECS_DATADIR=/data",
重要
如果上一个命令未返回
ECS_DATADIR
环境变量,则您在更新代理前必须停止在此容器实例上运行的任何任务。具有ECS_DATADIR
环境变量的较新的代理将保存其状态,您可以在任务运行的同时更新它们,而不会出现问题。 -
停止 Amazon ECS 容器代理。
ubuntu:~$
docker stop ecs-agent
-
删除代理容器。
ubuntu:~$
docker rm ecs-agent
-
确保
/etc/ecs/ecs.config
中存在/etc/ecs
目录和 Amazon ECS 容器代理配置文件。ubuntu:~$
sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
-
编辑
/etc/ecs/ecs.config
文件,并确保它至少包含以下变量声明。如果不希望向默认集群注册容器实例,请将ECS_CLUSTER
的值指定为集群名称。ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=
default
有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置。
注意
您可以选择将代理环境变量存储在 Amazon S3 中(可在启动时使用 Amazon EC2 用户数据将其下载到容器实例)。建议对敏感信息(如私有存储库的身份验证凭证)采用此方法。有关更多信息,请参阅 将 Amazon ECS 容器实例配置存储在 Amazon S3 中 和 在 Amazon ECS 中使用非 AWS 容器映像。
-
从 Amazon Elastic Container Registry Public 拉取最新的 Amazon ECS 容器代理映像。
ubuntu:~$
docker pull public.ecr.aws/ecs/amazon-ecs-agent:latest
输出:
Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
-
在容器实例上运行最新的 Amazon ECS 容器代理。
注意
使用 Docker 重新启动策略或进程管理器(如 upstart 或 systemd)将容器代理作为服务或守护程序处理,并确保在容器代理退出后重新启动它。经 Amazon ECS 优化的 AMI 使用
ecs-init
RPM 达到此目的,并且您可以在 GitHub 上查看此 RPM 的源代码。 以下示例代理运行命令分为若干个单独的行以显示每个选项。有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置。
重要
运行启用了 SELinux 的操作系统需要在 docker run 命令中使用
--privileged
选项。此外,对于启用了 SELinux 的容器实例,建议向/log
和/data
卷挂载添加:Z
选项。但是,在运行该命令前,这些卷的主机挂载必须存在,否则会出现no such file or directory
错误。如果您在启用了 SELinux 的容器实例上运行 Amazon ECS 代理时遇到困难,请执行以下操作:-
在容器实例上创建主机卷挂载点。
ubuntu:~$
sudo mkdir -p /var/log/ecs /var/lib/ecs/data
-
将
--privileged
选项添加到下面的 docker run 命令中。 -
将
:Z
选项追加到针对下面的 docker run 命令的/log
和/data
容器卷挂载(例如--volume=/var/log/ecs/:/log:Z
)。
ubuntu:~$
sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --volume=/etc/ecs:/etc/ecs/pki \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest
注意
如果您收到一条
Error response from daemon: Cannot start container
消息,则可以利用 sudo docker rm ecs-agent 命令删除失败的容器并重新尝试运行代理。 -