

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon EKS 資源上建立單一節點任務定義
<a name="create-job-definition-eks"></a>

請完成下列步驟，以在 Amazon Elastic Kubernetes Service (Amazon EKS) 上建立單一節點任務定義。

**若要在 Amazon EKS 資源上建立新的任務定義：**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS 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. 開啟**主機網路**以使用Kubernetespod網路模型，並為傳入連線開啟接聽連接埠。僅針對傳出通訊關閉此設定。

   1. 針對 **DNS 政策**，選擇下列其中一項：
      + **無值 (null)** – 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. （選用） 提供 Pod 的**秘密名稱**，以及秘密是否為**選用**。

      1. （選用） 定義**宣告名稱**，將 Kubernetes [持久性磁碟區宣告](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)連接至 Pod，以及是否為**唯讀**。

   1. （選用） 對於 **Pod 標籤**，選擇**新增 Pod 標籤**，然後輸入名稱/值對。
**重要**  
Pod 標籤的字首不能包含 `kubernetes.io/`、 `k8s.io/`或 `batch.amazonaws.com/`。

   1. （選用） 對於 **Pod 註釋**，選擇**新增註釋**，然後輸入名稱/值對。
**重要**  
Pod 註釋的字首不能包含 `kubernetes.io/`、 `k8s.io/`或 `batch.amazonaws.com/`。

   1. 選擇**下一頁**。

   1. 在**容器組態**區段中：

      1. 在**名稱**中，輸入容器的唯一名稱。名稱必須以字母或數字開頭，長度最多可達 63 個字元。它可以包含大小寫字母、數字和連字號 (-)。

      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`中的 ，以及 的 `IMAGE` 參數 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)
**注意**  
Docker 映像架構必須符合執行個體排程所在之運算資源的處理器架構。例如，ARM 型 Docker 映像只能在 ARM 型運算資源上執行。
         + Amazon ECR Public 儲存庫中的映像會使用完整`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. 針對 **vCPUs**，輸入要保留給容器的 vCPUs 數量。此參數會映射到 [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 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 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. 輸入**名稱**，然後在掛載磁碟區的容器中輸入**掛載路徑**。輸入 **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** (編輯)。完成後，請選擇**建立任務定義**。