故障排除 AWS Batch - AWS Batch

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

故障排除 AWS Batch

可能需要排除与计算环境、作业队列、作业定义或作业相关的问题。本章介绍如何对您的 AWS Batch 环境中的此类问题进行故障排除和解决。

AWS Batch 使用IAM策略、角色和权限,在亚马逊、亚马逊和亚马EC2逊 Elastic Kubernetes Service 基础设施上运行。ECS AWS Fargate要解决与这些服务相关的问题,请参阅以下内容:

AWS Batch

INVALID 计算环境

您可能错误地配置了托管计算环境。如果是这样,计算环境就会进入INVALID状态,无法接受作业放置。以下各节描述了可能的原因以及如何根据原因进行故障排除。

角色名称不正确或 ARN

计算环境进入INVALID状态的最常见原因是 AWS Batch 服务角色或 Amazon EC2 Spot 队列角色的名称或亚马逊资源名称 (ARN) 不正确。这在使用 AWS CLI 或创建的计算环境中更为常见 AWS SDKs。当您在中创建计算环境时 AWS Management Console, AWS Batch 可以帮助您选择正确的服务或 Spot 队列角色。但是,假设您手动输入了名称或ARN,但输入不正确。然后,生成的计算环境也是INVALID

但是,假设您在 AWS CLI 命令或ARNSDK代码中手动输入IAM资源的名称或。在这种情况下, AWS Batch 无法验证字符串。相反, AWS Batch 必须接受坏值并尝试创造环境。如果 AWS Batch 无法创建环境,则环境将变为INVALID状态,您会看到以下错误。

对于无效的服务角色:

CLIENT_ERROR - Not authorized to perform sts:AssumeRole (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: dc0e2d28-2e99-11e7-b372-7fcc6fb65fe7)

对于无效的竞价型实例集角色:

CLIENT_ERROR - Parameter: SpotFleetRequestConfig.IamFleetRole is invalid. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidSpotFleetRequestConfig; Request ID: 331205f0-5ae3-4cea-bac4-897769639f8d) Parameter: SpotFleetRequestConfig.IamFleetRole is invalid

导致此问题的常见原因之一是以下情况。只有在使用 AWS CLI 或时才指定IAM角色的名称 AWS SDKs,而不是完整的 Amazon 资源名称 (ARN)。根据您创建角色的方式,ARN可能包含aws-service-role路径前缀。例如,如果您使用中的过程手动创建 AWS Batch 服务角色将服务相关角色用于 AWS Batch,则您的服务角色ARN可能如下所示。

arn:aws:iam::123456789012:role/AWSBatchServiceRole

但是,如果您今天在控制台首次运行向导中创建了服务角色,则您的服务角色ARN可能如下所示。

arn:aws:iam::123456789012:role/aws-service-role/AWSBatchServiceRole

如果您将 AWS Batch 服务级别策略 (AWSBatchServiceRole) 附加到非服务角色,也会出现此问题。例如,在这种情况下,可能会收到类似于以下内容的错误消息:

CLIENT_ERROR - User: arn:aws:sts::account_number:assumed-role/batch-replacement-role/aws-batch is not authorized to perform: action on resource ...

要解决该问题,可以执行下列操作之一:

  • 创建 AWS Batch 计算环境时,请为服务角色使用空字符串。

  • 采用以下格式指定服务角色:arn:aws:iam::account_number:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch

如果您在使用 AWS CLI 或时仅指定IAM角色的名称 AWS SDKs,则 AWS Batch 假定您ARN不使用aws-service-role路径前缀。因此,我们建议您在创建计算环境时ARN为IAM角色指定完整内容。

要修复以这种方式错误配置的计算环境,请参阅修复INVALID计算环境

修复INVALID计算环境

当拥有处于INVALID状态的计算环境时,请更新它以修复无效参数。对于角色名称不正确或 ARN,可以使用正确的服务角色更新计算环境。

修复配置错误的计算环境
  1. 打开 AWS Batch 控制台,网址为https://console.aws.amazon.com/batch/

  2. 在导航栏中,选择 AWS 区域 要使用的。

  3. 在导航窗格中,选择计算环境

  4. 计算环境页面上,选择要编辑的计算环境旁边的单选按钮,然后选择编辑

  5. 更新计算环境页面上,为服务角色选择要用于您的计算环境的IAM角色。 AWS Batch 控制台仅显示与计算环境具有正确信任关系的角色。

  6. 选择保存以更新计算环境。

作业在RUNNABLE状态卡住

假设计算环境包含计算资源,但作业不会超出RUNNABLE状态。然后,很可能是某些因素阻止了将作业放在计算资源上,并导致您的任务队列被阻止。以下是如何知道你的工作是在等待轮到它还是卡住并阻塞队列。

如果 AWS Batch 检测到您的头部有RUNNABLE任务并阻止了队列,您将收到来自 Amazon Events 的已阻止任务队列 CloudWatch 事件,并附有原因。同样的原因也作为ListJobsDescribeJobsAPI调用的一部分更新到该statusReason字段。

或者,您可以通过CreateJobQueueUpdateJobQueueAPI操作配置jobStateTimeLimitActions参数。

注意

目前,您可以使用的唯一操作jobStateLimitActions.action是取消任务。

jobStateTimeLimitActions参数用于指定对处于特定状态的作业 AWS Batch 执行的一组操作。您可以通过该maxTimeSeconds字段设置以秒为单位的时间阈值。

当作业处于已定义的RUNNABLE状态时statusReason,将在经过后 AWS Batch maxTimeSeconds执行指定的操作。

例如,对于处于等待足够容量可用RUNNABLE状态的任何作业,您可以将jobStateTimeLimitActions参数设置为最多等待 4 小时。为此,您可以先将该任务设置statusReasonmaxTimeSecondsCAPACITY:INSUFFICIENT_INSTANCE_CAPACITY和设置为 144000,然后再取消任务并允许下一个作业进入任务队列的开头。

以下是它检测到作业队列被阻塞时 AWS Batch 提供的原因。此列表提供了从ListJobsDescribeJobsAPI操作返回的消息。这些值也与您可以为jobStateLimitActions.statusReason参数定义的值相同。

  1. 原因:所有连接的计算环境都存在容量不足错误。根据请求, AWS Batch 检测出现容量不足错误的 Amazon EC2 实例。手动或通过将jobStateTimeLimitActions参数设置为开启来取消作业statusReason,可以将后续作业移到队列的开头。

    • statusReason任务卡住时发消息:CAPACITY:INSUFFICIENT_INSTANCE_CAPACITY - Service cannot fulfill the capacity requested for instance type [instanceTypeName]

    • reason用于jobStateTimeLimitActionsCAPACITY:INSUFFICIENT_INSTANCE_CAPACITY

    • statusReason任务取消后的消息:Canceled by JobStateTimeLimit action due to reason: CAPACITY:INSUFFICIENT_INSTANCE_CAPACITY

    注意:

    1. AWS Batch 服务角色需要autoscaling:DescribeScalingActivities权限才能使此检测生效。如果您使用AWSServiceRoleForBatch服务相关角色 (SLR) 或AWSBatchServiceRolePolicy托管策略,则无需采取任何操作,因为他们的权限策略已更新。

    2. 如果您使用SLR或托管策略,则必须添加autoscaling:DescribeScalingActivitiesec2:DescribeSpotFleetRequestHistory权限,以便在进入时可以接收已阻止的作业队列事件和更新的作业状态RUNNABLE。此外, AWS Batch 需要这些权限才能通过jobStateTimeLimitActions参数执行cancellation操作,即使它们是在作业队列中配置的。

    3. 对于多节点 parallel (MNP) 作业,如果附加的高优先级 Amazon EC2 计算环境遇到insufficient capacity错误,即使优先级较低的计算环境确实遇到此错误,它也会阻塞队列。

  2. 原因:所有计算环境的maxvCpus参数都小于任务要求。手动或通过将jobStateTimeLimitActions参数设置为开启来取消作业statusReason,可以将后续作业移到队列的开头。或者,您可以增加主计算环境的maxvCpus参数以满足受阻作业的需求。

    • statusReason任务卡住时发消息:MISCONFIGURATION:COMPUTE_ENVIRONMENT_MAX_RESOURCE - CE(s) associated with the job queue cannot meet the CPU requirement of the job.

    • reason用于jobStateTimeLimitActionsMISCONFIGURATION:COMPUTE_ENVIRONMENT_MAX_RESOURCE

    • statusReason任务取消后的消息:Canceled by JobStateTimeLimit action due to reason: MISCONFIGURATION:COMPUTE_ENVIRONMENT_MAX_RESOURCE

  3. 原因:所有计算环境都没有满足任务要求的实例。当任务请求资源时, AWS Batch 会检测到没有连接的计算环境能够容纳传入的作业。手动或通过将jobStateTimeLimitActions参数设置为开启来取消作业statusReason,可以将后续作业移到队列的开头。或者,您可以重新定义计算环境允许的实例类型,以添加必要的作业资源。

    • statusReason任务卡住时发消息: MISCONFIGURATION:JOB_RESOURCE_REQUIREMENT - The job resource requirement (vCPU/memory/GPU) is higher than that can be met by the CE(s) attached to the job queue.

    • reason用于jobStateTimeLimitActionsMISCONFIGURATION:JOB_RESOURCE_REQUIREMENT

    • statusReason任务取消后的消息:Canceled by JobStateTimeLimit action due to reason: MISCONFIGURATION:JOB_RESOURCE_REQUIREMENT

  4. 原因:所有计算环境都存在服务角色问题。要解决此问题,请将您的服务角色权限与AWS Batch 托管服务角色权限进行比较并填补任何差距。

    最佳做法是在计算环境中AWS Batch SLR使用以避免类似错误。

    手动或通过将jobStateTimeLimitActions参数设置为开启来取消作业statusReason,可以将后续作业移到队列的开头。如果不解决服务角色问题,下一个工作也可能被阻止。最好手动调查并解决此问题。

    • statusReason任务卡住时发消息:MISCONFIGURATION:SERVICE_ROLE_PERMISSIONS – Batch service role has a permission issue.

    • reason用于jobStateTimeLimitActionsMISCONFIGURATION:SERVICE_ROLE_PERMISSIONS

    • statusReason任务取消后的消息:Canceled by JobStateTimeLimit action due to reason: MISCONFIGURATION:SERVICE_ROLE_PERMISSIONS

  5. 原因:所有计算环境均无效。有关更多信息,请参阅INVALID计算环境。注意:您无法通过jobStateTimeLimitActions参数配置可编程操作来解决此错误。

    • statusReason任务卡住时发消息:ACTION_REQUIRED - CE(s) associated with the job queue are invalid.

  6. 原因: AWS Batch 已检测到队列被阻塞,但无法确定原因。注意:您无法通过jobStateTimeLimitActions参数配置可编程操作来解决此错误。有关故障排除的更多信息,请参阅 re: Post 中的RUNNABLE为什么我的 AWS Batch 工作停滞不前。 AWS

    • statusReason任务卡住时发消息:UNDETERMINED - Batch job is blocked, root cause is undetermined.

如果您没有收到来自事件 CloudWatch 的事件或收到未知原因事件,则以下是导致此问题的一些常见原因。

您的计算资源上未配置awslogs日志驱动程序

AWS Batch 作业将其日志信息发送到 CloudWatch 日志。为了做到这一点,必须将计算资源配置为使用awslogs日志驱动程序。假设你的计算资源AMI基于亚马逊ECS优化的AMI(或亚马逊 Linux)。然后,该驱动程序默认会注册到ecs-init软件包中。现在假设你使用了不同的基础AMI。然后,在awslogs启动 Amazon ECS 容器代理时,您必须验证日志驱动程序是否已指定为带有ECS_AVAILABLE_LOGGING_DRIVERS环境变量的可用日志驱动程序。有关更多信息,请参阅计算资源 &AMI; 规范创建计算资源 &AMI;

资源不足

如果你的任务定义指定的内存资源超过了计算资源可以分配的数量,那么你的任务永远不会被放置。CPU例如,假设作业指定了 4 GiB 的内存,而计算资源少于可用内存。那么,作业就不能放置在这些计算资源上。在这种情况下,必须减少作业定义中指定的内存,或者向环境中添加更大的计算资源。一些内存是为 Amazon ECS 容器代理和其他关键系统进程保留的。有关更多信息,请参阅 计算资源内存管理

计算资源无法访问互联网

计算资源需要访问权限才能与 Amazon ECS 服务终端节点通信。这可以通过接口VPC终端节点,也可以通过具有公有 IP 地址的计算资源来实现。

有关接口VPC终端节点的更多信息,请参阅《亚马逊弹性容器服务开发者指南》中的亚马逊ECS接口VPC终端节点 (AWS PrivateLink)

如果您没有配置接口VPC终端节点,并且您的计算资源没有公有 IP 地址,则它们必须使用网络地址转换 (NAT) 来提供此访问权限。有关更多信息,请参阅 Amazon VPC 用户指南网关。有关更多信息,请参阅 创建 VPC

已达到亚马逊EC2实例限制

您的账户可以在中启动的 Amazon EC2 实例数量由您的EC2实例配额决定。 AWS 区域 某些实例类型也有配 per-instance-type额。有关您账户的亚马逊EC2实例配额的更多信息,包括如何申请提高限额,请参阅亚马逊EC2用户指南中的亚马逊EC2服务限制

未安装亚马逊ECS容器代理

必须在 Amazon 系统映像 (AMI) 上安装亚马逊ECS容器代理,才能 AWS Batch 运行作业。默认情况下,Amazon ECS 容器代理安装在 Amazon ECS 优化版上AMIs。有关亚马逊ECS容器代理的更多信息,请参阅《亚马逊弹性ECS容器服务开发者指南》中的亚马逊容器理。

如需了解更多信息,请参阅为什么我的 AWS Batch 工作RUNNABLE状态停滞不前? 在 re: post 中。

创建时未标记的竞价型实例

自 2017 年 10 月 25 日起,支持 AWS Batch 计算资源的竞价型实例标记。以前,Amazon EC2 Spot 队列角色的推荐IAM托管策略 (AmazonEC2SpotFleetRole) 不包含在启动时标记竞价型实例的权限。新的推荐IAM托管策略被称为AmazonEC2SpotFleetTaggingRole。它支持在启动时标记竞价型实例。

要修复竞价型实例创建时的标签问题,请按照以下步骤将当前推荐的IAM托管策略应用于您的 Amazon EC2 Spot 队列角色。这样,今后使用该角色创建的任何竞价型实例在创建时都有权限应用实例标签。

将当前IAM托管策略应用于您的 Amazon EC2 Spot 队列角色
  1. 打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 选择角色,然后选择您的 Amazon EC2 Spot 队列角色。

  3. 选择附加策略

  4. 选择 A mazon EC2SpotFleetTaggingRole 并选择附加政策

  5. 再次选择您的 Amazon EC2 Spot 队列角色以删除之前的政策。

  6. 选择 Amazon EC2SpotFleetRole 政策右侧的 x,然后选择 “分离”。

竞价型实例无法缩减

AWS Batch 2021 年 3 月 10 日推出了AWSServiceRoleForBatch与服务相关的角色。如果在计算环境的serviceRole参数中未指定任何角色,则此服务相关角色将用作服务角色。但是,假设在EC2竞价计算环境中使用服务相关角色,但使用的竞价角色不包含 Amazon EC2SpotFleetTaggingRole 托管策略。这样,竞价型实例就不会缩减。因此,您将收到一条错误信息,内容如下:“您无权执行此操作”。使用以下步骤更新spotIamFleetRole参数中使用的竞价型实例集角色。有关更多信息,请参阅《IAM用户指南》中的使用服务相关角色创建角色向 AWS 服务委派权限

Amazon EC2SpotFleetTaggingRole 托管策略附加到您的 Spot 队列角色中 AWS Management Console

将当前IAM托管策略应用于您的 Amazon EC2 Spot 队列角色
  1. 打开IAM控制台,网址为https://console.aws.amazon.com/iam/

  2. 选择角色,然后选择您的 Amazon EC2 Spot 队列角色。

  3. 选择附加策略

  4. 选择 A mazon EC2SpotFleetTaggingRole 并选择附加政策

  5. 再次选择您的 Amazon EC2 Spot 队列角色以删除之前的政策。

  6. 选择 Amazon EC2SpotFleetRole 政策右侧的 x,然后选择 “分离”。

Amazon EC2SpotFleetTaggingRole 托管策略附加到您的 Spot 队列角色中 AWS CLI

示例命令假设您的 Amazon EC2 Spot 队列角色名为 AmazonEC2SpotFleetRole。 如果您的角色使用不同的名称,请调整命令以使其匹配。

Amazon EC2SpotFleetTaggingRole 托管策略附加到您的 Spot 队列角色
  1. Amazon EC2SpotFleetTaggingRole 托管IAM政策附加到您的 AmazonEC2SpotFleetRole role,使用运行以下命令 AWS CLI。

    $ aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole \ --role-name AmazonEC2SpotFleetRole
  2. Amazon EC2SpotFleetRole 托管IAM政策与您的 AmazonEC2SpotFleetRole role,使用运行以下命令 AWS CLI。

    $ aws iam detach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole \ --role-name AmazonEC2SpotFleetRole

无法检索 Secrets Manager 密文

如果您AMI与早于 1.16.0-1 版本的 Amazon ECS 代理一起使用,则必须使用亚马逊ECS代理配置变量ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true才能使用此功能。可以在创建新容器实例时将其添加到该实例的./etc/ecs/ecs.config文件中。或者,可以将其添加到现有实例。如果将其添加到现有实例,则必须在添加ECS代理后重新启动代理。有关更多信息,请参阅《亚马逊弹性ECS容器服务开发者指南》中的亚马逊容器代理配置

无法覆盖作业定义资源需求

containerOverrides结构的和vcpus成员中指定的内存memory和 v CPU 替换不能覆盖在作业定义的resourceRequirements结构中指定的内存和 v CPU 要求。SubmitJob

如果尝试覆盖这些资源需求,可能会出现以下错误消息:

“此值是在已弃用的密钥中提交的,可能与作业定义的资源需求提供的值冲突。”

要更正此问题,请在的resourceRequirements成员中指定内存和 v CPU 要求containerOverrides。例如,如果在以下几行中指定了内存和 v CPU 覆盖。

"containerOverrides": { "memory": 8192, "vcpus": 4 }

将其更改为以下内容:

"containerOverrides": { "resourceRequirements": [ { "type": "MEMORY", "value": "8192" }, { "type": "VCPU", "value": "4" } ], }

对作业定义中containerProperties对象中指定的内存和 v CPU 要求进行相同的更改。例如,如果在以下几行中指定了您的内存和 v CPU 要求。

{ "containerProperties": { "memory": 4096, "vcpus": 2, }

将其更改为以下内容:

"containerProperties": { "resourceRequirements": [ { "type": "MEMORY", "value": "4096" }, { "type": "VCPU", "value": "2" } ], }

更新desiredvCpus设置时出现错误消息

使用更新所需的 vCPUs (desiredvCpus) 设置时 AWS Batch API,您会看到以下错误消息。

Manually scaling down compute environment is not supported. Disconnecting job queues from compute environment will cause it to scale-down to minvCpus.

如果更新的desiredvCpus值小于当前desiredvCpus值,则会出现此问题。更新desiredvCpus值时,必须满足以下两个条件:

  • desiredvCpus值必须介于minvCpus值和maxvCpus值之间。

  • 更新的desiredvCpus值必须大于或等于当前的desiredvCpus值。

AWS Batch 在亚马逊上 EKS

INVALID 计算环境

您可能错误地配置了托管计算环境。如果是这样,计算环境就会进入INVALID状态,无法接受作业放置。以下各节描述了可能的原因以及如何根据原因进行故障排除。

不支持的Kubernetes版本

当您使用CreateComputeEnvironmentAPI操作或UpdateComputeEnvironmentAPI操作创建或更新计算环境时,您可能会看到类似于以下内容的错误消息。如果在EC2Configuration中指定不受支持的Kubernetes版本,则会出现此问题。

At least one imageKubernetesVersion in EC2Configuration is not supported.

要解决此问题,请删除计算环境,然后使用支持的Kubernetes版本重新创建。

您可以在 Amazon EKS 集群上执行次要版本升级。例如,即使不支持次要版本,也可以将集群从1.xx升级到1.yy

但是,主要版本更新后,计算环境的状态可能会更改为INVALID。例如,如果将主要版本从1.xx升级到2.yy。如果不支持主要版本 AWS Batch,则会看到类似于以下内容的错误消息。

reason=CLIENT_ERROR - ... EKS Cluster version [2.yy] is unsupported

要解决此问题,请在使用API操作创建或更新计算环境时指定支持的Kubernetes版本。

AWS Batch Amazon 上EKS目前支持以下Kubernetes版本:

  • 1.30

  • 1.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

实例配置文件不存在

如果指定的实例配置文件不存在,则 Amazon AWS Batch 上的EKS计算环境状态将更改为INVALID。在statusReason参数中会出现类似于以下内容的错误集。

CLIENT_ERROR - Instance profile arn:aws:iam::...:instance-profile/<name> does not exist

要解决此问题,请指定或创建有效的实例配置文件。有关更多信息,请参阅《亚马逊EKS用户指南》中的亚马逊EKS节点IAM角色

Kubernetes命名空间无效

如果 Amazon AWS Batch 上EKS无法验证计算环境的命名空间,则计算环境的状态将更改为INVALID。例如,如果命名空间不存在,则可能会出现此问题。

statusReason参数中会出现类似于以下内容的错误消息集。

CLIENT_ERROR - Unable to validate Kubernetes Namespace

在满足以下任一条件时,可能出现此问题:

  • CreateComputeEnvironment调用中的Kubernetes命名空间字符串不存在。有关更多信息,请参阅CreateComputeEnvironment

  • 管理命名空间所需的基于角色的访问控制 (RBAC) 权限配置不正确。

  • AWS Batch 无权访问 Amazon EKS Kubernetes API 服务器终端节点。

要解决此问题,请参阅验证aws-auth ConfigMap是否配置正确。。有关更多信息,请参阅亚马逊 EK AWS Batch S 入门

已删除的计算环境

假设您在删除亚马逊EKS计算环境 AWS Batch 上连接的EKS集群之前删除了该集群。然后,计算环境状态更改为INVALID。在这种情况下,如果您使用相同的名称重新创建 Amazon EKS 集群,则计算环境将无法正常运行。

要解决此问题,请删除 Amazon AWS Batch 上的EKS计算环境,然后重新创建。

节点未加入 Amazon EKS 集群

AWS Batch 在 Amazon 上,如果计算环境确定并非所有节点都加入了 Amazon EKS 集群,则会EKS缩小计算环境的规模。 AWS Batch 在 Amazon 上EKS缩小计算环境时,计算环境的状态将更改为INVALID

注意

AWS Batch 不会立即更改计算环境状态以便您可以调试问题。

statusReason参数中会出现类似于以下内容的错误消息集:

Your compute environment has been INVALIDATED and scaled down because none of the instances joined the underlying ECS Cluster. Common issues preventing instances joining are the following: VPC/Subnet configuration preventing communication to ECS, incorrect Instance Profile policy preventing authorization to ECS, or customized AMI or LaunchTemplate configurations affecting ECS agent.

Your compute environment has been INVALIDATED and scaled down because none of the nodes joined the underlying Amazon EKS Cluster. Common issues preventing nodes joining are the following: networking configuration preventing communication to Amazon EKS Cluster, incorrect Amazon EKS Instance Profile or Kubernetes RBAC policy preventing authorization to Amazon EKS Cluster, customized AMI or LaunchTemplate configurations affecting Amazon EKS/Kubernetes node bootstrap.

使用默认 Amazon 时 EKSAMI,此问题的最常见原因如下:

AWS Batch 在 Amazon 上,EKS工作RUNNABLE状态停滞不前

使用eksctl创建托管节点组时或创建节点组时自动创建aws-authConfigMap并应用于集群。最初创建的aws-authConfigMap目的是允许节点加入集群。但是,您也可以使用aws-authConfigMap为用户和角色添加基于角色的访问控制 (RBAC) 访问权限。

验证aws-auth ConfigMap是否配置正确。

  1. 检索aws-authConfigMap中的映射角色:

    $ kubectl get configmap -n kube-system aws-auth -o yaml
  2. 验证roleARN是否按以下方式配置。

    rolearn: arn:aws:iam::aws_account_number:role/AWSServiceRoleForBatch

    注意

    您还可以查看 Amazon EKS 控制平面日志。有关更多信息,请参阅《亚马逊EKS用户指南》中的 Amazon EKS 控制平面日志

要解决作业停留在RUNNABLE状态的问题,建议使用kubectl重新应用清单。有关更多信息,请参阅 第 1 步:为您的 Amazon EKS 集群做好准备 AWS Batch。或者,可以kubectl使用手动编辑aws-authConfigMap。有关更多信息,请参阅 Amazon IAM EKS 用户指南中的启用用户和角色对集群的访问权限

验证aws-auth ConfigMap是否配置正确。

验证aws-auth ConfigMap是否配置正确。

  1. 检索aws-auth ConfigMap中的映射角色。

    $ kubectl get configmap -n kube-system aws-auth -o yaml
  2. 验证roleARN是否按以下方式配置。

    rolearn: arn:aws:iam::aws_account_number:role/AWSServiceRoleForBatch

    注意

    该路径aws-service-role/batch.amazonaws.com/已从服务相关角色中删除。ARN这是因为 aws-auth 配置映射存在问题。有关更多信息,请参阅中包含路径的角色在路径中时不起作用aws-authconfigmap。ARN

    注意

    您还可以查看 Amazon EKS 控制平面日志。有关更多信息,请参阅《亚马逊EKS用户指南》中的 Amazon EKS 控制平面日志

要解决作业停留在RUNNABLE状态的问题,建议使用kubectl重新应用清单。有关更多信息,请参阅 第 1 步:为您的 Amazon EKS 集群做好准备 AWS Batch。或者,可以kubectl使用手动编辑aws-authConfigMap。有关更多信息,请参阅 Amazon IAM EKS 用户指南中的启用用户和角色对集群的访问权限

RBAC权限或绑定配置不正确

如果您遇到任何RBAC权限或绑定问题,请验证该aws-batchKubernetes角色是否可以访问Kubernetes命名空间:

$ kubectl get namespace namespace --as=aws-batch
$ kubectl auth can-i get ns --as=aws-batch

还可以使用kubectl describe命令查看集群角色或Kubernetes命名空间的授权。

$ kubectl describe clusterrole aws-batch-cluster-role

下面是示例输出。

Name: aws-batch-cluster-role Labels: <none> Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- configmaps [] [] [get list watch] nodes [] [] [get list watch] pods [] [] [get list watch] daemonsets.apps [] [] [get list watch] deployments.apps [] [] [get list watch] replicasets.apps [] [] [get list watch] statefulsets.apps [] [] [get list watch] clusterrolebindings.rbac.authorization.k8s.io [] [] [get list] clusterroles.rbac.authorization.k8s.io [] [] [get list] namespaces [] [] [get]
$ kubectl describe role aws-batch-compute-environment-role -n my-aws-batch-namespace

下面是示例输出。

Name: aws-batch-compute-environment-role Labels: <none> Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [create get list watch delete patch] serviceaccounts [] [] [get list] rolebindings.rbac.authorization.k8s.io [] [] [get list] roles.rbac.authorization.k8s.io [] [] [get list]

要解决此问题,请重新应用RBAC权限和rolebinding命令。有关更多信息,请参阅 第 1 步:为您的 Amazon EKS 集群做好准备 AWS Batch