

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

# Amazon EKS 最佳化 Windows AMI 管理
<a name="windows-ami"></a>

Amazon EKS 最佳化 AMI 是根據 Windows Server 2019 和 Windows Server 2022 所建置。這些 AMI 已設定為 Amazon EKS 節點的基礎映像。預設情況下，AMI 會包括以下組件：
+  [kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) 
+  [kube-proxy](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/) 
+  [適用於 Kubernetes 的 AWS IAM Authenticator ](https://github.com/kubernetes-sigs/aws-iam-authenticator) 
+  [csi-proxy](https://github.com/kubernetes-csi/csi-proxy) 
+  [containerd](https://containerd.io/) 

您可以查詢 AWS Systems Manager 參數存放區 API，以程式設計方式擷取 Amazon EKS 最佳化 AMIs 的 Amazon Machine Image (AMI) ID。此參數讓您無需手動查詢 Amazon EKS 最佳化 AMI ID。如需 Systems Manager 參數存放區 API 的詳細資訊，請參閱 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html)。您的使用者帳戶必須具有 ssm：GetParameter IAM 許可，才能擷取 Amazon EKS 最佳化 AMI 中繼資料。

下列範例會擷取適用於 Windows Server 2019 LTSC Core 的最新 Amazon EKS 最佳化 AMI 的 AMI ID。AMI 名稱中列出的版本編號與其準備的對應 Kubernetes 組建相關。

```
aws ssm get-parameter --name /aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-1.21/image_id --region us-east-1 --query "Parameter.Value" --output text
```

輸出範例：

```
ami-09770b3eec4552d4e
```

## 管理您自己的 Amazon EKS 最佳化 Windows AMI
<a name="_managing_your_own_amazon_eks_optimized_windows_ami"></a>

生產環境的重要步驟是在整個 Amazon EKS 叢集中維護相同的 Amazon EKS 最佳化 Windows AMI 和 kubelet 版本。

在 Amazon EKS 叢集中使用相同版本可減少故障診斷期間的時間，並提高叢集一致性。[Amazon EC2 Image Builder](https://aws.amazon.com/image-builder/) 可協助建立和維護要在 Amazon EKS 叢集中使用的自訂 Amazon EKS 最佳化 Windows AMIs。

使用 Amazon EC2 Image Builder 在 Windows Server 版本、AWS Windows Server AMI 發行日期和/或作業系統建置版本之間進行選取。建置元件步驟可讓您在現有的 EKS Optimized Windows Artifacts 和 kubelet 版本之間進行選取。如需詳細資訊：https：//https://docs.aws.amazon.com/eks/latest/userguide/eks-custom-ami-windows.html

![建置元件](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/windows/build-components.png)


 **注意：**選取基礎映像之前，請參閱 [Windows Server 版本和授權](windows-licensing.md)一節，以取得有關發行頻道更新的重要詳細資訊。

## 為自訂 EKS 最佳化 AMIs 設定更快速的啟動
<a name="_configuring_faster_launching_for_custom_eks_optimized_amis"></a>

使用自訂 Windows Amazon EKS 最佳化 AMI 時，透過啟用快速啟動功能，Windows 工作者節點的啟動速度最多可加快 65%。此功能會維護一組預先佈建的快照，這些快照具有 *Sysprep 專業*、*Windows Out of Box Experience (OOBE)* 步驟，以及已完成的必要重新啟動。然後，這些快照會用於後續的啟動，減少擴展或取代節點的時間。只有您透過 EC2 主控台或 AWS CLI *擁有*的 AMIs 才能啟用快速啟動，且可設定維護的快照數量。

 **注意：**快速啟動與預設 Amazon 提供的 EKS 最佳化 AMI 不相容，請先如上述建立自訂 AMI，然後再嘗試啟用它。

如需詳細資訊：[AWS Windows AMIs- 設定您的 AMI 以加快啟動](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-ami-version-history.html#win-ami-config-fast-launch)速度 

## 在自訂 AMIs上快取 Windows 基本層
<a name="_caching_windows_base_layers_on_custom_amis"></a>

Windows 容器映像大於其 Linux 對等映像。如果您執行任何容器化 .NET Framework 型應用程式，平均映像大小約為 8.24GB。在 Pod 排程期間，容器映像必須完全提取並擷取在磁碟中，Pod 才會達到執行中狀態。

在此過程中，容器執行時間 （容器） 會在磁碟中提取和擷取整個容器映像。提取操作是平行程序，這表示容器執行時間會平行提取容器映像層。相反地，擷取操作會在循序程序中進行，而且是 I/O 密集型操作。因此，容器映像可能需要超過 8 分鐘才能完全解壓縮，並準備好供容器執行時間 （容器） 使用，因此，Pod 啟動時間可能需要幾分鐘。

如**修補 Windows Server 和容器**主題所述，您可以選擇使用 EKS 建置自訂 AMI。在 AMI 準備期間，您可以新增額外的 EC2 映像建置器元件，以在本機提取所有必要的 Windows 容器映像，然後產生 AMI。此策略將大幅減少 Pod 達到**執行**中狀態的時間。

在 Amazon EC2 Image Builder 上，建立[元件](https://docs.aws.amazon.com/imagebuilder/latest/userguide/manage-components.html)以下載必要的映像，並將其連接至映像配方。下列範例會從 ECR 儲存庫提取特定映像。

```
name: ContainerdPull
description: This component pulls the necessary containers images for a cache strategy.
schemaVersion: 1.0

phases:
  - name: build
    steps:
      - name: containerdpull
        action: ExecutePowerShell
        inputs:
          commands:
            - Set-ExecutionPolicy Unrestricted -Force
            - (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin 111000111000.dkr.ecr.us-east-1.amazonaws.com
            - ctr image pull mcr.microsoft.com/dotnet/framework/aspnet:latest
            - ctr image pull 111000111000.dkr.ecr.us-east-1.amazonaws.com/myappcontainerimage:latest
```

為了確保下列元件如預期運作，請檢查 EC2 Image Builder (EC2InstanceProfileForImageBuilder) 所使用的 IAM 角色是否具有連接的政策：

![許可政策](http://docs.aws.amazon.com/zh_tw/eks/latest/best-practices/images/windows/permissions-policies.png)


## 部落格文章
<a name="_blog_post"></a>

在下列部落格文章中，您將逐步了解如何實作自訂 Amazon EKS Windows AMIs 的快取策略：

 [使用 EC2 映像建置器和映像快取策略加速 Windows 容器啟動時間](https://aws.amazon.com/blogs/containers/speeding-up-windows-container-launch-times-with-ec2-image-builder-and-image-cache-strategy/) 