Project Icon

amazon-ecs-agent

Amazon ECS容器代理简化容器管理与优化

Amazon ECS Container Agent作为Amazon Elastic Container Service的核心组件,负责管理容器化工作负载。它适用于多种操作系统,支持多样化部署,提供丰富配置选项,并可与AWS IAM角色集成。这个代理工具优化容器运行效率,简化了容器应用的管理和扩展。

Amazon ECS 容器代理

Amazon ECS 标志

Amazon ECS 容器代理是 Amazon Elastic Container Service(Amazon ECS)的一个组件,负责代表 Amazon ECS 管理容器。

本仓库包含 ECS-Init,这是一个基于 systemd 的服务,用于支持 Amazon ECS 容器代理并保持其运行。它用于使用 systemd 作为初始化系统的系统,并以 deb 或 rpm 包的形式提供。ECS-Init 的源代码可在本仓库的 ./ecs-init 目录中找到,而打包文件在 ./packaging 目录中。

使用方法

运行此软件的最佳信息来源是 Amazon ECS 文档

在 Amazon Linux AMI 上

Amazon Linux AMI 上,我们提供了一个可安装的 RPM 包,可以通过 sudo yum install ecs-init && sudo start ecs 使用。这是在此环境中运行它的推荐方式。

在其他 Linux AMI 上

Amazon ECS 文档 提供了 deb 和 rpm 包以及在非 Amazon Linux 实例上安装 ECS 容器代理的说明。

Amazon ECS 容器代理也可以在安装了最新 Docker 版本的 EC2 实例上的 Docker 容器中运行。Docker 镜像可在 Docker Hub 仓库ECR 公共库 中获取。

# 设置代理使用的目录
mkdir -p /var/log/ecs /etc/ecs /var/lib/ecs/data
touch /etc/ecs/ecs.config
# 设置必要的规则以启用任务的 IAM 角色
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
# 运行代理
docker run --name ecs-agent \
    --detach=true \
    --restart=on-failure:10 \
    --volume=/var/run/docker.sock:/var/run/docker.sock \
    --volume=/var/log/ecs:/log \
    --volume=/var/lib/ecs/data:/data \
    --net=host \
    --env-file=/etc/ecs/ecs.config \
    --env=ECS_LOGFILE=/log/ecs-agent.log \
    --env=ECS_DATADIR=/data/ \
    --env=ECS_ENABLE_TASK_IAM_ROLE=true \
    --env=ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true \
    amazon/amazon-ecs-agent:latest

在启用 awsvpc 网络模式的其他 Linux AMI 上

对于 AWS VPC 网络模式,ECS 代理需要 CNI 插件和 dhclient 可用。ECS 还需要 ecs-init 作为其启动的一部分运行。 以下是在启用 Task ENI 的情况下运行 ecs-agent 的 docker run 配置示例。请注意,ECS 代理目前仅支持 cgroupfs 作为 cgroup 驱动程序。

# 运行代理
/usr/bin/docker run --name ecs-agent \
--init \
--restart=on-failure:10 \
--volume=/var/run:/var/run \
--volume=/var/log/ecs/:/log:Z \
--volume=/var/lib/ecs/data:/data:Z \
--volume=/etc/ecs:/etc/ecs \
--volume=/sbin:/host/sbin \
--volume=/lib:/lib \
--volume=/lib64:/lib64 \
--volume=/usr/lib:/usr/lib \
--volume=/usr/lib64:/usr/lib64 \
--volume=/proc:/host/proc \
--volume=/sys/fs/cgroup:/sys/fs/cgroup \
--net=host \
--env-file=/etc/ecs/ecs.config \
--cap-add=sys_admin \
--cap-add=net_admin \
--env ECS_ENABLE_TASK_ENI=true \
--env ECS_UPDATES_ENABLED=true \
--env ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=1h \
--env ECS_DATADIR=/data \
--env ECS_ENABLE_TASK_IAM_ROLE=true \
--env ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true \
--env ECS_LOGFILE=/log/ecs-agent.log \
--env ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs","syslog","none"]' \
--env ECS_LOGLEVEL=info \
--detach \
amazon/amazon-ecs-agent:latest

另请参阅下面的高级用法部分。

在 ECS 优化的 Windows AMI 上

ECS 优化的 Windows AMI 附带预安装的 PowerShell 模块 ECSTools,用于安装、配置和运行 ECS 代理作为 Windows 服务。 要安装该服务,您可以在 EC2 实例上运行以下 PowerShell 命令。要启动到 windows 以外的其他集群,请将下面脚本中的 'windows' 替换为您的集群名称。

PS C:\> Import-Module ECSTools
PS C:\> # -EnableTaskIAMRole 选项是启用任务 IAM 角色所必需的。
PS C:\> Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole

下载不同版本的 ECS 代理

要下载不同版本的 ECS 代理,您可以执行以下操作:

PS C:\> # 使用 agentVersion = "latest" 获取最新可用的代理版本
PS C:\> $agentVersion = "v1.20.4"
PS C:\> Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole -Version $agentVersion

从源代码构建 ECS 代理

构建 ECS 代理镜像(Linux)

ECS 代理也可以在 Linux 机器上从源代码本地构建。使用以下步骤构建 ECS 代理

  • 获取 ECS 代理源代码
git clone https://github.com/aws/amazon-ecs-agent.git
  • 使用 release-agent make 目标构建代理镜像
make release-agent

这将安装所需的构建依赖项,构建 ECS 代理镜像并将其保存在路径 ecs-agent-v${AGENT_VERSION}.tar 中。使用以下命令加载它

docker load < ecs-agent-v${AGENT_VERSION}.tar

按照上面的说明继续安装

构建和运行独立版本(Linux)

Amazon ECS 容器代理也可以在 Docker 容器外作为 Go 二进制文件运行。目前,这在 Linux 上不推荐用于生产环境,但它对于开发或更易与本地 Go 工具集成可能很有用。

以下命令在 Docker 外运行代理:

make gobuild
./out/amazon-ecs-agent

独立版本(Windows)

可以通过调用 scripts\build_agent.ps1 来构建 Amazon ECS 容器代理

脚本(Windows)

以下脚本可用于在 Windows 上开发 Amazon ECS 容器代理:

  • scripts\run-integ-tests.ps1 - 运行 enginestats 包中的所有集成测试
  • misc\windows-deploy\Install-ECSAgent.ps1 - 将 ECS 代理安装为 Windows 服务
  • misc\windows-deploy\amazon-ecs-agent.ps1 - 帮助脚本,用于设置主机并将代理作为进程运行
  • misc\windows-deploy\user-data.ps1 - 示例用户数据,可与带容器的 Windows Server 2016 AMI 一起使用,以将代理作为进程运行

构建 ECS-Init 包(Linux)

ECS-Init 包也可以根据您运行的 Linux 系统构建为 deb 或 rpm 包。按照 generic-deb-integratedgeneric-rpm-integrated 中的说明构建并安装带有 Init 的 ECS 代理,使用 deb 或 rpm。

高级用法

Amazon ECS 容器代理支持多种配置选项,其中大多数应通过环境变量设置。

环境变量

下表提供了可用于配置 ECS 代理的可选环境变量概览。有关每个可用环境变量的更多详细信息,请参阅 Amazon ECS 开发者指南

环境变量键示例值描述Linux默认值Windows默认值
ECS_CLUSTERclusterName此代理应检入的集群。defaultdefault
ECS_RESERVED_PORTS[22, 80, 5000, 8080]应标记为在此容器实例上不可用于调度的端口数组。[22, 2375, 2376, 51678, 51679][53, 135, 139, 445, 2375, 2376, 3389, 5985, 5986, 51678, 51679]
ECS_RESERVED_PORTS_UDP[53, 123]应标记为在此容器实例上不可用于调度的UDP端口数组。[][]
ECS_ENGINE_AUTH_TYPE"docker" | "dockercfg"存储在ECS_ENGINE_AUTH_DATA键中的身份验证数据类型。
ECS_ENGINE_AUTH_DATA参见dockerauth文档ECS_ENGINE_AUTH_TYPE定义的格式化Docker身份验证数据
AWS_DEFAULT_REGION<us-west-2>|<us-east-1>|…用于API请求以及推断正确后端主机的区域。从Amazon EC2实例元数据获取。从Amazon EC2实例元数据获取。
DOCKER_HOSTunix:///var/run/docker.sock用于创建与Docker守护程序的连接;行为类似于Docker客户端使用的此环境变量。unix:///var/run/docker.socknpipe:////./pipe/docker_engine
ECS_LOGLEVEL<crit> | <error> | <warn> | <info> | <debug>要记录的详细程度。infoinfo
ECS_LOGLEVEL_ON_INSTANCE<none> | <crit> | <error> | <warn> | <info> | <debug>可用于覆盖ECS_LOGLEVEL并设置应在实例上的日志文件中记录的详细程度,与记录在日志驱动程序中的级别分开。如果显式设置了日志驱动程序,则默认情况下实例上的日志将关闭,但可以通过此变量重新打开。如果ECS_LOG_DRIVER显式设置为非空值,则为none;否则与ECS_LOGLEVEL值相同如果ECS_LOG_DRIVER显式设置为非空值,则为none;否则与ECS_LOGLEVEL值相同
ECS_LOGFILE/ecs-agent.log应写入日志的位置。日志级别由ECS_LOGLEVEL控制。空白空白
ECS_CHECKPOINT<true | false>是否将状态检查点保存到下面指定的DATADIR。如果ECS_DATADIR显式设置为非空值,则为true;否则为false如果ECS_DATADIR显式设置为非空值,则为true;否则为false
ECS_DATADIR/data/用于跨代理重启保存检查点状态的容器路径。注意,在Linux上,当指定此路径时,需要确保Agent容器具有$ECS_HOST_DATA_DIR/data:$ECS_DATADIR的绑定挂载,其中ECS_HOST_DATA_DIRECS_DATADIR为相应的值。/data/C:\ProgramData\Amazon\ECS\data
ECS_UPDATES_ENABLED<true | false>是否在请求时退出以让更新程序应用更新。falsefalse
ECS_DISABLE_METRICS<true | false>是否禁用任务的指标收集。falsefalse
ECS_POLL_METRICS<true | false>收集任务指标时是轮询还是流式传输。将此值设置为true可以帮助减少ECS容器实例上dockerd和containerd的CPU使用率。另请参阅ECS_POLL_METRICS_WAIT_DURATION以设置轮询间隔。falsefalse
ECS_POLLING_METRICS_WAIT_DURATION10s轮询任务指标之间的等待时间。当ECS_POLL_METRICS为false时不使用。最大值为20s,最小值为5s。如果用户设置超过最大值,将设置为最大值;如果低于最小值,将设置为最小值。随着任务/容器数量的增加,较高的ECS_POLLING_METRICS_WAIT_DURATION值可能会导致在指标收集时由于缺少指标样本而导致ECS集群报告的内存预留值不稳定的问题。建议将此值保持在18s以下。这种行为仅在某些操作系统和平台上观察到。10s10s
ECS_PULL_DEPENDENT_CONTAINERS_UPFRONT<true | false>是否在满足dependsOn条件之前拉取具有依赖关系的容器的镜像。falsefalse
ECS_RESERVED_MEMORY32报告给Amazon ECS的实例内存容量的减少量(以MiB为单位)。Amazon ECS在容器实例上放置任务时使用。这不会保留实例上的内存使用。00
ECS_AVAILABLE_LOGGING_DRIVERS["awslogs","fluentd","gelf","json-file","journald","logentries","splunk","syslog"]容器实例上可用的日志驱动程序。["json-file","none"]["json-file","none"]
ECS_DISABLE_PRIVILEGEDtrue是否在容器实例上禁用启动特权容器。falsefalse
ECS_SELINUX_CAPABLEtrue容器实例上是否可用SELinux。(有限支持;仅支持Z模式挂载。)falsefalse
ECS_APPARMOR_CAPABLEtrue容器实例上是否可用AppArmor。falsefalse
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION10m删除已停止任务的容器的默认等待时间(另请参阅ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION_JITTER)。如果设置为小于1秒,该值将被忽略。3h3h
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION_JITTER1h任务引擎清理等待持续时间的抖动值。指定后,每个任务的实际清理等待持续时间将是ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION中指定的持续时间加上0到抖动持续时间之间的随机持续时间。空白空白
ECS_MANIFEST_PULL_TIMEOUT10m放弃获取容器镜像清单的超时时间。1m1m
ECS_CONTAINER_STOP_TIMEOUT10m实例范围的配置,用于等待容器正常退出的时间,超时后将被强制终止。30s30s
ECS_CONTAINER_START_TIMEOUT10m放弃启动容器的超时时间。3m8m
ECS_CONTAINER_CREATE_TIMEOUT10m放弃创建容器的超时时间。最小值为1m。如果用户设置的值低于最小值,将设置为最小值。4m4m
ECS_ENABLE_TASK_IAM_ROLEtrue是否在容器实例上启用任务IAM角色falsefalse
ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOSTtrue是否在容器实例上使用host网络模式启动任务时启用任务IAM角色falsefalse
ECS_DISABLE_IMAGE_CLEANUPtrue是否禁用ECS Agent的自动镜像清理falsefalse
ECS_IMAGE_CLEANUP_INTERVAL30m自动镜像清理周期之间的时间间隔。如果设置小于10分钟,该值将被忽略30m30m
ECS_IMAGE_MINIMUM_CLEANUP_AGE30m镜像被拉取到可以被考虑进行自动清理之间的最小时间间隔1h1h
NON_ECS_IMAGE_MINIMUM_CLEANUP_AGE30m非ECS镜像创建到可以被考虑进行自动清理之间的最小时间间隔1h1h
ECS_NUM_IMAGES_DELETE_PER_CYCLE5单个自动镜像清理周期中可删除的最大镜像数。如果设置小于1,该值将被忽略55
ECS_IMAGE_PULL_BEHAVIOR<default | always | once | prefer-cached >用于自定义拉取镜像过程的行为。如果指定default,镜像将从远程拉取,如果拉取失败则使用实例中的缓存镜像。如果指定always,镜像将从远程拉取,如果拉取失败则任务将失败。如果指定once,如果镜像之前未被拉取或已被镜像清理移除,则从远程拉取,否则使用实例中的缓存镜像。如果指定prefer-cached,如果没有缓存镜像则从远程拉取,否则使用实例中的缓存镜像defaultdefault
ECS_IMAGE_PULL_INACTIVITY_TIMEOUT1m在docker拉取完成后等待容器提取的时间。用于调整大型Windows容器1m3m
ECS_IMAGE_PULL_TIMEOUT1h等待拉取docker镜像的时间2h2h
ECS_INSTANCE_ATTRIBUTES{"stack": "prod"}这些属性仅在初始注册期间生效。代理加入ECS集群后,使用PutAttributes API操作添加其他属性。有关更多信息,请参阅Amazon ECS开发者指南中的Amazon ECS容器代理配置{}{}
ECS_ENABLE_TASK_ENIfalse是否启用任务网络,使任务可以使用自己的网络接口启动false不适用
ECS_ENABLE_HIGH_DENSITY_ENIfalse使用任务网络时是否启用高密度ENI功能true不适用
ECS_CNI_PLUGINS_PATH/ecs/cniCNI二进制文件所在的路径/amazon-ecs-cni-plugins不适用
ECS_AWSVPC_BLOCK_IMDStrue是否阻止使用awsvpc网络模式启动的任务访问实例元数据false不适用
ECS_AWSVPC_ADDITIONAL_LOCAL_ROUTES["10.0.15.0/24"]awsvpc网络模式下,这些前缀的流量将通过主机网桥而非任务ENI路由[]不适用
ECS_ENABLE_CONTAINER_METADATAtrue当为true时,代理将创建一个描述容器元数据的文件,可以通过容器环境变量$ECS_CONTAINER_METADATA_FILE定位和使用该文件falsefalse
ECS_HOST_DATA_DIR/var/lib/ecs主机上ECS_DATADIR挂载的源目录。我们使用此目录来确定容器元数据文件的源挂载路径,以防ECS Agent作为容器运行。我们不在Windows中使用此值,因为ECS Agent在Windows中不作为容器运行。在Linux上,请注意当指定此值时,需要确保Agent容器有一个$ECS_HOST_DATA_DIR/data:$ECS_DATADIR的绑定挂载,其中包含ECS_HOST_DATA_DIRECS_DATADIR的相应值/var/lib/ecs未使用
ECS_ENABLE_TASK_CPU_MEM_LIMITtrue是否启用任务级CPU和内存限制truefalse
ECS_CGROUP_PATH/sys/fs/cgroupECS代理期望的根cgroup路径。这是从代理挂载可访问的路径/sys/fs/cgroup不适用
ECS_CGROUP_CPU_PERIOD10ms任务级限制的CGroups CPU周期。此值应在8ms到100ms之间100ms不适用
ECS_AGENT_HEALTHCHECK_HOSTlocalhost覆盖ecs-agent容器健康检查的localhost IP地址localhostlocalhost
ECS_ENABLE_CPU_UNBOUNDED_WINDOWS_WORKAROUNDtrue当为true时,ECS将允许CPU无限制(CPU=0)的任务与Windows中的CPU有限制任务一起运行不适用false
ECS_ENABLE_MEMORY_UNBOUNDED_WINDOWS_WORKAROUNDtrue当为true时,ECS将忽略内存预留参数(软限制)以与Windows中的内存有限制任务一起运行。要运行内存无限制任务,请省略内存硬限制并设置任意内存预留,它将被忽略不适用false
ECS_TASK_METADATA_RPS_LIMIT100,150用逗号分隔的整数值,表示任务元数据端点和代理API端点的组合总流量的稳定状态和突发限制40,6040,60
ECS_SHARED_VOLUME_MATCH_FULL_CONFIGtrue当为true时,ECS Agent将比较名称、驱动选项和标签以确保卷是相同的。当为false时,如果名称匹配,Agent将短路共享卷比较。这是默认的Docker行为。如果卷在实例间共享,应设置为falsefalsefalse
ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROMec2_instance如果指定ec2_instance,容器实例上定义的现有标签将注册到Amazon ECS,并可使用ListTagsForResource API发现。使用此功能需要与容器实例关联的IAM角色有ec2:DescribeTags操作权限nonenone
ECS_CONTAINER_INSTANCE_TAGS{"tag_key": "tag_val"}应用于容器实例的元数据,以帮助分类和组织。每个标签由一个键和一个可选值组成,两者都由您定义。标签键的最大字符长度为128个字符,标签值的最大长度为256个字符。如果容器实例上还存在使用ECS_CONTAINER_INSTANCE_PROPAGATE_TAGS_FROM参数传播的标签,这些标签将被使用ECS_CONTAINER_INSTANCE_TAGS指定的标签覆盖{}{}
ECS_ENABLE_UNTRACKED_IMAGE_CLEANUPtrue是否允许ECS代理删除不属于ECS任务的容器和镜像falsefalse
ECS_EXCLUDE_UNTRACKED_IMAGEalpine:latest如果启用了ECS_ENABLE_UNTRACKED_IMAGE_CLEANUP,ECS代理不应删除的镜像的imageName:tag列表,以逗号分隔
ECS_DISABLE_DOCKER_HEALTH_CHECKfalse是否禁用ECS Agent的Docker容器健康检查falsefalse
ECS_NVIDIA_RUNTIMEnvidia用于将Nvidia GPU设备传递给容器的Nvidia运行时nvidia不适用
ECS_ALTERNATE_CREDENTIAL_PROFILEdefault备用凭证角色/配置文件名称defaultdefault
ECS_ENABLE_SPOT_INSTANCE_DRAININGtrue是否为容器实例启用竞价实例排空功能。如果设置为true,当容器实例收到竞价中断通知时,代理将把实例状态设置为DRAINING,从而优雅地关闭并替换实例上运行的所有属于服务的任务。建议在使用竞价实例时将此项设置为truefalsefalse
ECS_LOG_ROLLOVER_TYPEsize | hourly确定容器代理日志文件是基于大小还是每小时进行轮换。默认情况下,代理日志文件每小时轮换一次。hourlyhourly
ECS_LOG_OUTPUT_FORMATlogfmt | json确定日志输出格式。当使用json格式时,日志中的每一行都将是一个结构化的JSON映射。logfmtlogfmt
ECS_LOG_MAX_FILE_SIZE_MB10当ECS_LOG_ROLLOVER_TYPE变量设置为size时,此变量决定日志文件在轮换前的最大大小(以MB为单位)。如果轮换类型设置为hourly,则忽略此变量。1010
ECS_LOG_MAX_ROLL_COUNT24确定要保留的轮换日志文件数量。达到此限制后,将删除较旧的日志文件。2424
ECS_LOG_DRIVERawslogs | fluentd | gelf | json-file | journald | logentries | syslog | splunk代理容器使用的日志驱动程序。json-file不适用
ECS_LOG_OPTS{"option":"value"}用于配置ECS_LOG_DRIVER中设置的日志驱动程序的选项。{}不适用
ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDEtrue是否启用awslogs日志驱动程序通过任务执行IAM角色的凭证进行身份验证。如果要在指定了任务执行IAM角色的任务中使用awslogs日志驱动程序,则需要设置为true。当使用版本等于或晚于V1.16.0-1的ecs-init RPM时,此环境变量默认设置为true。falsefalse
ECS_FSX_WINDOWS_FILE_SERVER_SUPPORTEDtrue容器实例是否支持FSx for Windows File Server卷类型。此变量仅在代理版本1.47.0及更高版本中支持。falsetrue
ECS_ENABLE_RUNTIME_STATStrue确定是否为代理启用pprof。如果启用,可以通过代理的自检端口访问不同的配置文件(例如,curl http://localhost:51678/debug/pprof/heap > heap.pprof)。此外,代理的运行时统计信息会记录到/var/log/ecs/runtime-stats.log文件中。falsefalse
ECS_EXCLUDE_IPV6_PORTBINDINGtrue确定代理是否应在使用默认网络模式时排除IPv6端口绑定。如果启用,IPv6端口绑定将被过滤掉,DescribeTasks API调用的响应将不显示任务的IPv6端口绑定,但它仍包含在任务元数据端点中。truetrue
ECS_WARM_POOLS_CHECKtrue是否确保进入EC2 Auto Scaling组预热池的实例被阻止注册到集群。仅在使用EC2自动扩展时设置为true。falsefalse
ECS_SKIP_LOCALHOST_TRAFFIC_FILTERfalse默认情况下,ecs-init服务会添加一个iptable规则,以丢弃非本地到localhost的数据包,如果它们不是现有转发连接或DNAT的一部分,并在停止时移除该规则。如果设置为true,则不会添加或移除该规则。falsefalse
ECS_ALLOW_OFFHOST_INTROSPECTION_ACCESStrue默认情况下,ecs-init服务会添加一个iptable规则,以阻止来自主机外部(或awsvpc网络模式下的容器)对代理自检端口的访问,并在停止时移除该规则。如果设置为true,则不会添加或移除该规则。falsefalse
ECS_OFFHOST_INTROSPECTION_INTERFACE_NAMEeth0用于阻止主机外部代理自检端口访问的主要网络接口名称。eth0eth0
ECS_ENABLE_GPU_SUPPORTtrue是否使用支持GPU的容器实例。此参数是为代理指定的。您还必须为GPU配置任务定义。有关更多信息false不适用
HTTP_PROXY10.0.0.131:3128Amazon ECS代理用于连接互联网的HTTP代理的主机名(或IP地址)和端口号。例如,如果您的容器实例没有通过Amazon VPC互联网网关或NAT网关或实例的外部网络访问,将使用此代理。如果设置了此变量,还必须设置NO_PROXY变量以过滤来自代理的Amazon EC2实例元数据和Docker守护程序流量。nullnull
NO_PROXY<对于Linux:169.254.169.254,169.254.170.2,/var/run/docker.sock | 对于Windows:169.254.169.254,169.254.170.2,\.\pipe\docker_engine>不应转发到指定HTTP_PROXY的HTTP流量。您必须指定169.254.169.254,/var/run/docker.sock以过滤来自代理的Amazon EC2实例元数据和Docker守护程序流量。nullnull
ECS_GMSA_SUPPORTEDtrue是否在任务中使用gMSA身份验证到Active Directory。每个任务必须在容器定义的dockerSecurityOpts参数中指定凭据规范文件的位置。在Linux上,这需要credentials-fetcher守护程序falsefalse
CREDENTIALS_FETCHER_HOSTunix:///var/credentials-fetcher/socket/credentials_fetcher.sock用于创建到credentials-fetcher守护程序的连接;以支持Linux上的gMSA。对于大多数用户来说,默认值就足够了,只有在用户配置自定义credentials-fetcher套接字路径时才需要修改,即CF_UNIX_DOMAIN_SOCKET_DIRunix:///var/credentials-fetcher/socket/credentials_fetcher.sock不适用
CREDENTIALS_FETCHER_SECRET_NAME_FOR_DOMAINLESS_GMSAsecretmanager-secretname用于支持Linux上gMSA的扩展选项credentials-fetcher守护程序。如果用户在非域加入的实例上配置gMSA,他们需要创建一个具有访问权限以检索gMSA账户主体的Active Directory用户,并将其存储在secrets manager中。secretmanager-secretname不适用
ECS_DYNAMIC_HOST_PORT_RANGE100-200这指定了代理用于分配主机端口的动态主机端口范围,用于容器端口映射。如果范围内没有可用端口供容器使用,包括客户容器和Service Connect Agent容器(如果启用了Service Connect),服务部署将失败。/proc/sys/net/ipv4/ip_local_port_range定义49152-65535
ECS_TASK_PIDS_LIMIT100指定在容器实例上启动的每个任务的进程ID限制cgroup设置。此设置映射到ECS任务级别的pids.max cgroup设置。详见https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#pid。如果未设置,进程ID将不受限制。最小值为1,最大值为4194304(4*1024*1024)未设置在Windows上不支持
ECS_EBSTA_SUPPORTEDtrue是否使用支持EBS任务附加的容器实例。此变量由ecs-init正确设置。其值表示是否已设置支持实例EBS卷的正确环境。ECS仅在平台类型支持此功能时才安排EBSTA任务。有关其他EBS支持详情,请查看EBS卷注意事项true在Windows上不支持
此外,以下环境变量可用于配置ecs-init服务的行为。使用ECS-Init时,所有环境变量(包括上述ECS Agent变量)都从"/etc/ecs/ecs.config"路径读取:
环境变量名称示例值描述默认值
ECS_SKIP_LOCALHOST_TRAFFIC_FILTER<true | false>默认情况下,ecs-init服务会添加一条iptable规则,以丢弃非本地到localhost的数据包(如果它们不是现有转发连接或DNAT的一部分),并在停止时删除该规则。如果将ECS_SKIP_LOCALHOST_TRAFFIC_FILTER设置为true,则不会添加/删除此规则。false
ECS_ALLOW_OFFHOST_INTROSPECTION_ACCESS<true | false>默认情况下,ecs-init服务会添加一条iptable规则,以阻止从主机外部(或awsvpc网络模式下的容器)访问ECS Agent的自检端口,并在停止时删除该规则。如果将ECS_ALLOW_OFFHOST_INTROSPECTION_ACCESS设置为true,则不会添加/删除此规则。false
ECS_OFFHOST_INTROSPECTION_INTERFACE_NAMEeth0用于阻止主机外部访问代理自检端口的主网络接口名称。默认值为eth0eth0
ECS_AGENT_LABELS{"test.label.1":"value1","test.label.2":"value2"}添加到ECS Agent容器的标签。
ECS_AGENT_APPARMOR_PROFILEunconfined指定在其下运行ecs-agent容器的AppArmor配置文件名称。这仅适用于启用了AppArmor的系统,如Ubuntu、Debian和SUSE。如果未设置,则默认为ecs-init写入的配置文件(ecs-agent-default)。ecs-agent-default

持久性

在生产环境中运行Amazon ECS容器代理时,其datadir应在Docker容器的多次运行之间保持持久。如果不保持这些数据的持久性,代理每次启动时都会注册一个新的容器实例ARN,并且无法更新之前运行的任务状态。

标志

代理还支持以下标志:

  • -k — 代理将不要求与之通信的服务具有有效的SSL证书。我们不建议使用此标志。
  • -loglevel — 选项:[<crit>|<error>|<warn>|<info>|<debug>]。代理将在给定级别输出到stdout。如果存在ECS_LOGLEVEL环境变量,则会覆盖此设置。

Make目标(在Linux上)

以下目标可用。每个目标可以通过make <target>运行。

Make目标描述
release-agent(默认代理构建) 构建代理,获取所需依赖项,并将镜像.tar保存到磁盘
generic-rpm-integrated构建init rpm包并将.rpm包保存到磁盘
generic-deb-integrated构建init deb包并将.deb包保存到磁盘
release(旧版代理构建) 在Docker容器内构建代理并将其打包到基于scratch的镜像中
gobuild运行代理的普通go build,并将二进制文件存储在./out/amazon-ecs-agent
static运行go build以在./out/amazon-ecs-agent中生成静态二进制文件
test使用go test运行所有单元测试
test-in-docker在Docker容器内运行所有测试
run-integ-tests运行enginestats包中的所有集成测试
clean删除构建产物。注意:这不会删除Docker镜像

贡献

欢迎贡献和反馈!我们将考虑并回应提案和拉取请求。有关更多信息,请参阅CONTRIBUTING.md文件。

如果您发现ECS代理行为存在bug/问题,请在此处提出。

如果您有功能请求,请在AWS Containers路线图上提出。

Amazon Web Services目前不为此软件的修改版本提供支持。

安全披露

如果您认为发现了潜在的安全问题,请不要在Issues中发布。相反,请按照此处的说明操作或直接发送电子邮件至AWS安全团队

许可证

Amazon ECS容器代理根据Apache 2.0许可证授权。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号