

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

# 自訂 Amazon EKS 啟動範本
<a name="eks-launch-templates"></a>

AWS Batch Amazon EKS 上的 支援啟動範本。啟動範本可以執行的操作有其限制。

**重要**  
對於 EKS AL2 AMIs， AWS Batch 執行 `/etc/eks/bootstrap.sh`。請勿在啟動範本或cloud-inituser-data指令碼`/etc/eks/bootstrap.sh`中執行 。除了 參數之外，您還可以將其他`--kubelet-extra-args`參數新增至 https：//[bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/al2/runtime/bootstrap.sh)。若要這樣做，請在 `/etc/aws-batch/batch.config` 檔案中設定 `AWS_BATCH_KUBELET_EXTRA_ARGS`變數。如需詳細資訊，請參閱下列範例。
對於 EKS AL2023， AWS Batch 利用來自 EKS 的 [NodeConfigSpec](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec) 讓執行個體加入 EKS 叢集。 AWS Batch 會在 [NodeConfigSpec](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec) 中為 EKS 叢集填入 [ClusterDetails](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#clusterdetails)，您不需要指定它們。

**注意**  
我們建議您不要在啟動範本中設定任何下列[https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec)設定，因為 AWS Batch 會覆寫您的值。如需詳細資訊，請參閱[Kubernetes 節點的共同責任](eks-ce-shared-responsibility.md)。  
`Taints`
`Cluster Name`
`apiServerEndpoint`
`certificatAuthority`
`CIDR`
請勿建立字首為 的標籤 `batch.amazonaws.com/`

**注意**  
如果在呼叫 [CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html) 之後變更啟動範本，[https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html)則必須呼叫 來評估啟動範本的版本以進行取代。

**Topics**
+ [新增`kubelet`額外的引數](#kubelet-extra-args)
+ [設定容器執行時間](#change-container-runtime)
+ [掛載 Amazon EFS 磁碟區](#mounting-efs-volume)
+ [IPv6 支援](#eks-ipv6-support)

## 新增`kubelet`額外的引數
<a name="kubelet-extra-args"></a>

AWS Batch 支援將額外的引數新增至`kubelet`命令。如需支援的參數清單，請參閱 *Kubernetes 文件*[https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)中的 。在下列 EKS AL2 AMIs範例中， `{{--node-labels mylabel=helloworld}}` 會新增至`kubelet`命令列。

```
MIME-Version: 1.0
      Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

      --==MYBOUNDARY==
      Content-Type: text/x-shellscript; charset="us-ascii"

      #!/bin/bash
      mkdir -p /etc/aws-batch

      echo AWS_BATCH_KUBELET_EXTRA_ARGS=\"{{--node-labels mylabel=helloworld}}\" >> /etc/aws-batch/batch.config

      --==MYBOUNDARY==--
```

對於 EKS AL2023 AMIs檔案格式為 YAML。如需支援的參數清單，請參閱 *Kubernetes 文件*[https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfigspec)中的 。在下列 EKS AL2023 AMIs範例中， `{{--node-labels mylabel=helloworld}}` 會新增至`kubelet`命令列。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: application/node.eks.aws

apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  kubelet:
    flags:
    - --{{node-labels=mylabel=helloworld}}

--==MYBOUNDARY==--
```

## 設定容器執行時間
<a name="change-container-runtime"></a>

您可以使用 AWS Batch `CONTAINER_RUNTIME`環境變數，在受管節點上設定容器執行期。下列範例會在`bootstrap.sh`執行`containerd`時將容器執行時間設定為 。如需詳細資訊，請參閱 *Kubernetes 文件*[https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd)中的 。

如果您使用的是 最佳化`EKS_AL2023`或 `EKS_AL2023_NVIDIA` AMI，則不需要指定容器執行時間，因為僅支援**容器化**。

**注意**  
`CONTAINER_RUNTIME` 環境變數等同於 `--container-runtime`的選項`bootstrap.sh`。如需詳細資訊，請參閱 *Kubernetes 文件*[https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/#options)中的 。

```
MIME-Version: 1.0
      Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

      --==MYBOUNDARY==
      Content-Type: text/x-shellscript; charset="us-ascii"

      #!/bin/bash
      mkdir -p /etc/aws-batch

      echo CONTAINER_RUNTIME=containerd >> /etc/aws-batch/batch.config

      --==MYBOUNDARY==--
```

## 掛載 Amazon EFS 磁碟區
<a name="mounting-efs-volume"></a>

您可以使用啟動範本將磁碟區掛載到節點。在下列範例中，使用 `cloud-config``packages`和 `runcmd`設定。如需詳細資訊，請參閱 *cloud-init 文件*中的[雲端組態範例](https://cloudinit.readthedocs.io/en/latest/topics/examples.html)。

```
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"

packages:
- amazon-efs-utils

runcmd:
- file_system_id_01=fs-abcdef123
- efs_directory=/mnt/efs

- mkdir -p ${efs_directory}
- echo "${file_system_id_01}:/ ${efs_directory} efs _netdev,noresvport,tls,iam 0 0" >> /etc/fstab
- mount -t efs -o tls ${file_system_id_01}:/ ${efs_directory}

--==MYBOUNDARY==--
```

若要在任務中使用此磁碟區，必須在 [eksProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksProperties.html) 參數中新增至 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)。下列範例是任務定義的很大一部分。

```
{
    "jobDefinitionName": "MyJobOnEks_EFS",
    "type": "container",
    "eksProperties": {
        "podProperties": {
            "containers": [
                {
                    "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                    "command": ["ls", "-la", "/efs"],
                    "resources": {
                        "limits": {
                            "cpu": "1",
                            "memory": "1024Mi"
                        }
                    },
                    "volumeMounts": [
                        {
                            "name": "{{efs-volume}}",
                            "mountPath": "{{/efs}}"
                        }
                    ]
                }
            ],
            "volumes": [
                {
                    "name": "{{efs-volume}}",
                    "hostPath": {
                        "path": "{{/mnt/efs}}"
                    }
                }
            ]
        }
    }
}
```

在節點中，Amazon EFS 磁碟區會掛載在 `/mnt/efs`目錄中。在 Amazon EKS 任務的容器中，磁碟區會掛載在 `/efs`目錄中。

## IPv6 支援
<a name="eks-ipv6-support"></a>

AWS Batch 支援具有 IPv6 地址的 Amazon EKS 叢集。 AWS Batch 支援不需要自訂。不過，在開始之前，建議您檢閱《*Amazon EKS 使用者指南*》中[將 IPv6 地址指派給 Pod 和服務中概述的考量事項和](https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html)條件。