跳至内容

如何对卡滞在预置循环的 Amazon ECS 任务进行故障排除?

2 分钟阅读
0

我的 Amazon Elastic Container Service (Amazon ECS) 任务卡滞在 PROVISIONING(预置)状态。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要解决此问题,请查看受影响服务的 Amazon ECS 服务事件,以检查最近的部署活动和故障。使用事件模式和错误消息来确定问题是否与容量、网络或配置问题有关。有关任务启动失败的更多详细信息,请查看已停止的任务错误消息中是否有 TaskFailedToStart 错误

检查您的容量提供商配置

要检查容量提供商的 Amazon EC2 Auto Scaling 组在任务预置期间是否达到其最大容量,请运行以下 describe-auto-scaling-groups AWS CLI 命令:

aws autoscaling describe-auto-scaling-groups \
    --auto-scaling-group-names your-asg-name \
    --query 'AutoScalingGroups[].{DesiredCapacity:DesiredCapacity,MaxSize:MaxSize,RunningInstances:Instances[?LifecycleState==InService].InstanceId|length}'

**注意:**将 your-asg-name 替换为您的 EC2 Auto Scaling 组名称。

要查看所有容器实例及其状态,请运行以下 list-container-instances 命令:

aws ecs list-container-instances \
    --cluster your-cluster-name \
    --status ACTIVE \
    --query 'containerInstanceArns[]'

要增加 Auto Scaling 组的容量,请运行以下 update-auto-scaling-group 命令:

aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name your-asg-name \
--max-size new-max-size

**注意:**将 your-asg-name 替换为您的 EC2 Auto Scaling 组名称,并将 new-max-size 替换为更新后的 EC2 Auto Scaling 组大小。

此外,请确保 Amazon ECS 代理在容器实例上运行且运行正常。

要进一步解决容量提供商错误,请参阅如何解决在尝试为 Amazon ECS 集群设置新的容量提供商或更新现有容量提供商时出现的问题?

检查您的服务配置和任务扩缩

确保该服务的所需数量与容器实例上的 CPU 和内存中的可用基础设施容量相匹配。要查看服务的所需数量和运行次数,请运行以下 describe-services 命令:

aws ecs describe-services \
--cluster your-cluster-name \
--services your-service-name \
--query 'services[].{desiredCount:desiredCount,runningCount:runningCount,pendingCount:pendingCount}'

**注意:**将 your-cluster-name 替换为您的集群名称,将 your-service-name 替换为您的服务名称。

要更新服务的所需数量,请运行以下 update-service 命令:

aws ecs update-service \
--cluster your-cluster-name \
--service your-service-name \
--desired-count new-count
--force-new-deployment

注意:your-cluster-name 替换为您的集群名称,将 your-service-name 替换为您的服务名称,将 new-count 替换为所需的任务数。--force-new-deployment 选项强制更新服务。

查看您的服务配额

如果您超过了 Amazon ECS 服务配额,则可能会遇到任务问题。要解决服务配额问题,请参阅如何解决 Amazon ECS 服务配额问题?

检查您的网络配置

检查您的任务安全组规则,并确保子网有可用的 IP 地址。对于没有 NAT 网关的私有子网,请为您的配置设置所需的 VPC 端点。VPC 端点安全组必须允许来自您的任务子网 CIDR 的入站流量。

您的安全组还必须允许以下流量:

  • 用于拉取容器映像的互联网或 NAT 网关的出站 HTTPS(端口 443)流量。
  • 您使用的 VPC 端点的出站流量。
  • 来自应用程序负载均衡器安全组的入站流量,用于使用应用程序负载均衡器的配置。
  • 需要通信的容器之间的入站流量。

要检查 Amazon ECS 服务子网是否具有所需的 IP 地址,请运行以下 describe-subnets 命令:

aws ec2 describe-subnets \
    --subnet-ids subnet-abcde \
    --query 'Subnets[].{SubnetId:SubnetId,AvailableIPs:AvailableIpAddressCount,TotalIPs:CidrBlock}'

**注意:**将 subnet-abcde 替换为您的子网 ID。

确保遵守任务的网络模式要求:

  • 对于 awsvpc 模式,请确保每项任务都有专用的弹性网络接口。
    **注意:**每种实例类型的网络接口都有最大配额。确保您的容器实例具有可用于新任务的网络接口连接点。
  • 对于桥接模式,请确保 docker0 网桥的池中有足够的 IP 地址。
  • 对于主机模式,没有特定的网络资源约束。但是,当多个任务使用同一个主机端口时,可能会发生端口冲突。

相关信息

Amazon ECS 故障排除

Amazon ECS 服务配额

自动扩缩 Amazon ECS 服务

为 Amazon ECS 设计您的解决方案

AWS 官方已更新 1 年前