

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

# 在 Amazon EKS 资源上创建单节点作业定义
<a name="create-job-definition-eks"></a>

完成以下步骤，在 Amazon Elastic Kubernetes Service（Amazon EKS）上创建单节点作业定义。

**要在 Amazon EKS 资源上创建新的作业定义，请执行以下操作：**

1. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从顶部导航栏中选择 AWS 区域 要使用的。

1. 在左侧导航窗格中，选择**作业定义**。

1. 选择**创建**。

1. 对于**编排类型**，选择 **Elastic Kubernetes Service (EKS)**。

1. 对于**名称**，为您的作业定义输入唯一名称。名称长度不超过 128 个字符。可以包含大小写字母、数字、连字符（-）和下划线（\$1）。

1. （可选）对于**执行超时**，输入超时值（以秒为单位）。执行超时是指未完成的作业终止之前的时间长度。如果某次尝试超过了超时时间，该尝试将停止，状态将转为 `FAILED`。有关更多信息，请参阅 [作业超时](job_timeouts.md)。最小值为 60 秒。

1. （可选）开启**计划优先级**。输入介于 0 到 100 之间的计划优先级值。值越高，相较于较低值的优先级越高。

1. （可选）展开 **标签**，然后选择**添加标签**以向资源添加标签。

1. 选择**下一页**。

1. 在 **EKS pod 属性**部分中：

   1. 在**服务账户名称**中，输入为在 pod 中运行的进程提供身份的账户。

   1. 打开**主机网络**以使用 Kubernetes pod 网络模型，并为传入的连接打开侦听端口。仅对传出通信关闭此设置。

   1. 对于** DNS 策略**，选择以下选项之一：
      + **无值（空）** - pod 忽略 Kubernetes 环境中的 DNS 设置。
      + **默认** — pod 从其运行的节点继承名称解析配置。
**注意**  
如果未指定 DNS 策略，则**默认**不是默认 DNS 策略。而是使用**ClusterFirst**了。
      + **ClusterFirst**— 任何与配置的集群域后缀不匹配的 DNS 查询都将转发到继承自该节点的上游域名服务器。
      + **ClusterFirstWithHostNet**— 如果**主机网络**已开启，则使用。

   1. （可选）对于**卷**，选择**添加卷**，然后执行以下操作：

      1. 为您的卷添加一个**名称**。

      1. （可选）添加主机该目录的**主机路径**。

      1. （可选）添加**中等**和**大小限制**来配置 [Kubernetes emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)。

      1. （可选）提供容器组的**密钥名称**并选择该密钥是否为**可选**。

      1. （可选）定义一个**声明名称**以将 Kubernetes [持久卷声明](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)附加到该容器组，并选择该容器组是否为**只读**。

   1. （可选）对于**容器组（pod）标签**，选择**添加容器组（pod）标签**，然后输入名称/值对。
**重要**  
容器组（pod）标签的前缀不能包含 `kubernetes.io/`、`k8s.io/` 或 `batch.amazonaws.com/`。

   1. （可选）对于**容器组注释**，选择**添加注释**，然后输入名称-值对。
**重要**  
容器组标注的前缀不能包含 `kubernetes.io/`、`k8s.io/` 或 `batch.amazonaws.com/`。

   1. 选择**下一页**。

   1. 在**容器配置**部分：

      1. 对于**名称**，输入容器的名称。该名称必须以字母或数字开头，并且最多可以包含 25 个字符。可以包含大小写字母、数字和连字符。

      1. 对于**映像**，选择要用于您的作业的 Docker 映像。默认情况下，Docker Hub 注册表中的映像可用。也可以使用`repository-url/image:tag`指定其他存储库。名称最多可以有 255 个字符。可以包含大小写字母、数字、连字符（-）、下划线（\$1）、冒号（:）、句点（.）、正斜杠（/）和数字符号（\$1）。此参数可映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的 `Image` 和 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `IMAGE` 参数。
**注意**  
Docker 映像架构必须与为它们安排的计算资源的处理器架构相匹配。例如，基于 ARM 的 Docker 镜像只能在基于 ARM 的计算资源上运行。
         + Amazon ECR 公有存储库中的映像使用完整的`registry/repository[:tag]`或`registry/repository[@digest]`命名惯例（例如，`public.ecr.aws/registry_alias/my-web-app:latest`）。
         + Amazon ECR 存储库中的映像使用完整的`registry/repository[:tag]`命名惯例（例如，`aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`）。
         + Docker Hub 上的官方存储库中的映像使用单一名称 (例如，`ubuntu` 或 `mongo`)。
         + Docker Hub 上其他存储库中的映像通过组织名称（例如，`amazon/amazon-ecs-agent`）进行限定。
         + 其他在线存储库中的映像由域名（例如，`quay.io/assemblyline/ubuntu`）进行进一步限定。

      1. （可选）对于**映像提取策略**，请选择何时提取映像。

      1. （可选）对于**命令**，输入要传递到容器的 JSON 命令。

      1. （可选）在**参数**中输入要传递给容器的参数。如果未提供参数，则使用容器映像命令。

   1. （可选）您可以将参数作为名称值映射添加到作业定义中，以覆盖作业定义的默认值。若要添加参数：

      1. 在**参数**中，输入名称/值对，然后选择**添加参数**。
**重要**  
如果选择**添加参数**，则必须至少配置一个参数或选择**移除参数**。

   1. 在**环境配置**部分：

      1. 对于 **v CPUs**，输入CPUs 要为容器保留的 v 数。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`CpuShares`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--cpu-shares`选项。每个 vCPU 相当于 1024 个 CPU 份额。您必须指定至少一个 vCPU。

      1. 对于**内存**，输入容器可用的内存限制。如果您的容器尝试使用超出此处指定的内存，该容器将被终止。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Memory`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--memory`选项。您必须为作业指定至少 4 MiB 内存。
**注意**  
要最大限度地提高资源利用率，请为特定实例类型的作业确定内存优先级。有关更多信息，请参阅 [计算资源内存管理](memory-management.md)。

   1. （可选）对于**环境变量**，选择**添加环境变量**以名称-值对的形式添加环境变量。这些变量传递给容器。

   1. （可选）对于**卷装载**：

      1. 选择**添加卷装载**。

      1. 输入**名称**，然后在装入卷的容器中输入**装载路径**。输入 a **SubPath**以指定被引用卷内的子路径，而不是其根路径。

      1. 选择**只读**可删除该卷的写入权限。

      1. 选择**添加卷装载**。

   1. （可选）在**以用户身份运行**中，输入用户 ID 以运行容器进程。
**注意**  
映像中必须存在用户 ID，容器才能运行。

   1. （可选）在**分组运行**中，输入组 ID 以运行容器进程。
**注意**  
映像中必须存在群组 ID，容器才能运行。

   1. （可选）要为您的作业容器授予对主机实例的提升权限（类似于 `root` 用户），请选择 **特权**。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Privileged`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--privileged`选项。

   1. （可选）打开**只读根文件系统**以删除对根文件系统的写入权限。

   1. （可选）开启**以非根用户身份运行**，从而以非根用户身份运行 pod 中的容器。
**注意**  
如果启用**以非根用户身份运行**，则 kubelet 会在运行时验证映像以查证该映像不是以 UID 0 运行的。

   1. 选择**下一页**。

1. 对于**作业定义查看**，请查看配置步骤。如果需要进行更改，请选择 **Edit**（编辑）。完成后，选择**创建作业定义**。