

 **協助改進此頁面** 

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

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

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

# 使用最佳化的 Bottlerocket AMI 建立節點
<a name="eks-optimized-ami-bottlerocket"></a>

 [Bottlerocket](https://aws.amazon.com/bottlerocket/) 是由 贊助和支援的開放原始碼 Linux 發行版本 AWS。Bottlerocket 專為託管容器工作負載而打造。利用 Bottlerocket，您可以自動化容器基礎結構的更新，進而改善容器化部署的可用性並降低營運成本。Bottlerocket 僅包含執行容器的基本軟體，可改善資源用量、減少安全威脅，並降低管理開銷。Bottlerocket AMI 包含 `containerd`、 `kubelet`和 AWS IAM Authenticator。除了受管節點群組和自我管理節點外，[Karpenter](https://karpenter.sh/) 亦支援 Bottlerocket。

## 優點
<a name="bottlerocket-advantages"></a>

將 Bottlerocket 與 Amazon EKS 叢集搭配使用具有以下優勢：
+  **更長的正常運行時間、更低的營運成本和更低的管理複雜性** – 與其他 Linux 發行版相比，Bottlerocket 具有更低的資源佔用、更短的啟動時間，並且不易受到安全威脅。Bottlerocket 更小的佔用空間使用更少的儲存、運算和網路資源，有助於降低成本。
+  **透過自動作業系統更新提高安全性** – 對 Bottlerocket 的更新作為一個單元套用，必要時可以復原。這消除了損毀或失敗更新可能使系統處於無法使用狀態的風險。使用 Bottlerocket，只要安全更新可用，就會以干擾性最小的方式自動套用，並在發生故障時復原。
+  **進階支援** – 在 Amazon EC2 上 AWS 提供的 Bottlerocket 組建涵蓋在相同的 AWS 支援計畫中，該計畫也涵蓋 Amazon EC2、Amazon EKS 和 Amazon ECR 等 AWS 服務。

## 考量事項
<a name="bottlerocket-considerations"></a>

將 Bottlerocket 用於 AMI 類型時，請考慮下列事項：
+ Bottlerocket 支援具有 `x86_64` 與 `arm64` 處理器的 Amazon EC2 執行個體。
+ Bottlerocket 支援具有 GPUs 的 Amazon EC2 執行個體。如需詳細資訊，請參閱[針對 GPU 執行個體使用 EKS 最佳化AMIs](ml-eks-optimized-ami.md)。
+ Bottlerocket 映像不會包含 SSH 伺服器或 Shell。您可以採用頻外存取方法來允許 SSH。這些方法啟用管理員容器，並傳遞一些引導組態步驟與使用者資料。如需詳細資訊，請參閱 GitHub 上 [Bottlerocket OS](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md) 中的下列章節：
  +  [探勘](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#exploration) 
  +  [管理員容器](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#admin-container) 
  +  [Kubernetes 設定](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#kubernetes-settings) 
+ Bottlerocket 使用不同的容器類型：
  + 在預設情況下，已啟用[控制容器](https://github.com/bottlerocket-os/bottlerocket-control-container)。此容器會執行 [AWS Systems Manager 代理程式](https://github.com/aws/amazon-ssm-agent)，可以讓您在 Amazon EC2 Bottlerocket 執行個體上執行命令或啟動 Shell 工作階段。如需詳細資訊，請參閱 Systems [Manager 使用者指南中的設定 Session](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) Manager。 * AWS *
  + 如果在建立節點群組時提供 SSH 金鑰，則啟用管理容器。建議只在開發和測試案例中使用管理容器，不要在生產環境中使用此種容器。如需詳細資訊，請參閱 GitHub 上的[管理容器](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#admin-container)。

## 其他資訊
<a name="bottlerocket-more-information"></a>

如需使用 Amazon EKS 最佳化 Bottlerocket AMI 的詳細資訊，請參閱下列區段：
+ 如需 Bottlerocket 的更多資訊，請參閱 [Bottlerocket 文件](https://bottlerocket.dev/en/)。
+ 有關版本資訊資源，請參閱 [擷取 Bottlerocket AMI 版本資訊](eks-ami-versions-bottlerocket.md)。
+ 若要將 Bottlerocket 與受管節點群組搭配使用，請參閱 [透過受管節點群組來簡化節點生命週期](managed-node-groups.md)。
+ 若要啟動自我管理的 Bottlerocket 節點，請參閱 [建立自我管理的 Bottlerocket 節點](launch-node-bottlerocket.md)。
+ 若要擷取 Amazon EKS 最佳化 Bottlerocket AMI 的最新 ID，請參閱 [擷取建議的 Bottlerocket AMI ID](retrieve-ami-id-bottlerocket.md)。
+ 如需合規性支援的詳細資訊，請參閱 [透過 Bottlerocket 滿足合規要求](bottlerocket-compliance-support.md)。

# 擷取 Bottlerocket AMI 版本資訊
<a name="eks-ami-versions-bottlerocket"></a>

每個 Bottlerocket AMI 發行版本均包含 [kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)、Bottlerocket 核心和 [containerd](https://containerd.io/) 的各種版本。加速的 AMI 變體亦包括 NVIDIA 驅動程序的各種版本。您可在 *Bottlerocket 文件*的[作業系統](https://bottlerocket.dev/en/os/)主題中找到此版本資訊。從該頁面，導覽至適用的*版本資訊*子主題。

*Bottlerocket 文件*的更新速度有時可能會落後於 GitHub 上提供的版本。您可在 GitHub 的[版本](https://github.com/bottlerocket-os/bottlerocket/releases)中找到最新版本的變更清單。

# 擷取建議的 Bottlerocket AMI ID
<a name="retrieve-ami-id-bottlerocket"></a>

您在部署節點時，可針對預先建置的 Amazon EKS 最佳化 Amazon Machine Image (AMI) 指定 ID。如需要擷取與您的所需組態相符的 AMI ID，請查詢 AWS Systems Manager 參數存放區 API。使用此 API 無需手動查詢 Amazon EKS 最佳化的 AMI ID。如需詳細資訊，請參閱 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html)。您使用的 [IAM 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)必須擁有 `ssm:GetParameter` IAM 許可，才能擷取 Amazon EKS 最佳化 AMI 中繼資料。

您可以使用下列 AWS CLI 命令，擷取最新推薦的 Amazon EKS 最佳化 Bottlerocket AMI 的映像 ID，這會使用子參數 `image_id`。視需要對命令進行下列修改，然後執行修改後的命令：
+ 使用支援的[平台版本](https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html)來取代 *kubernetes-version*。
+ 使用以下其中一個選項來取代 *-flavor*。
  + 若是未啟用 GPU 的變體，則移除 *-flavor*。
  + 若是啟用 GPU 的變體，則使用 *-nvidia*。
  + 若是啟用 FIPS 的變體，則使用 *-fips*。
+ 使用以下其中一個選項來取代*架構*。
  + 若是 `x86` 型執行個體，則使用 *x86\$164*。
  + 若是 ARM 執行個體，則使用 *arm64*。
+ 使用您需要取得 AMI ID 的 [Amazon EKS 支援的 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/eks.html)來取代 *region-code*。

```
aws ssm get-parameter --name /aws/service/bottlerocket/aws-k8s-kubernetes-version-flavor/architecture/latest/image_id \
    --region region-code --query "Parameter.Value" --output text
```

下面介紹了取代預留位置之後的命令範例。

```
aws ssm get-parameter --name /aws/service/bottlerocket/aws-k8s-1.31/x86_64/latest/image_id \
    --region us-west-2 --query "Parameter.Value" --output text
```

範例輸出如下。

```
ami-1234567890abcdef0
```

# 透過 Bottlerocket 滿足合規要求
<a name="bottlerocket-compliance-support"></a>

Bottlerocket 符合各種組織定義的建議：
+ 為 Bottlerocket 定義了 [CIS 基準](https://www.cisecurity.org/benchmark/bottlerocket)。在預設組態中，Bottlerocket 映像具有 CIS 第 1 級組態設定檔所需的大部分控制項。您可以實作 CIS 第 2 級組態設定檔所需的控制項。如需詳細資訊，請參閱 AWS 部落格上的[針對 CIS 基準驗證 Amazon EKS 最佳化 Bottlerocket AMI](https://aws.amazon.com/blogs/containers/validating-amazon-eks-optimized-bottlerocket-ami-against-the-cis-benchmark)。
+ 功能集最佳化和受攻擊面減少表示 Bottlerocket 執行個體只需較少的組態即可滿足 PCI DSS 需求。[Bottlerocket 的 CIS 基準](https://www.cisecurity.org/benchmark/bottlerocket)是強化指引的極佳資源，可支援您在 PCI DSS 需求 2.2 下對安全組態標準的需求。您也可以利用 [Fluent Bit](https://opensearch.org/blog/technical-post/2022/07/bottlerocket-k8s-fluent-bit/) 來支援 PCI DSS 需求 10.2 下作業系統層級稽核日誌記錄的需求。AWS 定期發布新的 (已修補的) Bottlerocket 執行個體，以協助您符合 PCI DSS 需求 6.2 (適用於 3.2.1 版) 和需求 6.3.3 (適用於 4.0 版)。
+ Bottlerocket 是符合 HIPAA 資格的功能，經授權可與 Amazon EC2 和 Amazon EKS 的受管制工作負載搭配使用。如需詳細資訊，請參閱 [HIPAA 資格服務參照](https://aws.amazon.com/compliance/hipaa-eligible-services-reference/)。
+ 可使用預先設定為利用 FIPS 140-3 驗證加密模組的 Bottlerocket AMI。其中包含 Amazon Linux 2023 核心加密 API 加密模組與 AWS-LC 加密模組。如需詳細資訊，請參閱 [使用 Bottlerocket FIPS AMI 讓您的工作節點符合 FIPS 就緒狀態](bottlerocket-fips-amis.md)。

# 使用 Bottlerocket FIPS AMI 讓您的工作節點符合 FIPS 就緒狀態
<a name="bottlerocket-fips-amis"></a>

美國聯邦資訊處理標準 (FIPS) 第 140-3 號公報中，美國和加拿大政府的安全標準具體說明密碼模組的安全要求，以保護敏感資訊。Bottlerocket 透過提供具有 FIPS 核心的 AMI，讓您更容易遵循 FIPS 規範。

這些 AMI 已預先設定為使用 FIPS 140-3 驗證的密碼編譯模組。這包括 Amazon Linux 2023 核心加密 API 密碼編譯模組和 AWS-LC 密碼編譯模組。

使用 Bottlerocket FIPS AMI 可讓您的工作節點成為「FIPS 就緒」，但不會自動成為「FIPS 相容」。如需詳細資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

## 考量事項
<a name="_considerations"></a>
+ 如果您的叢集使用隔離子網路，則 Amazon ECR FIPS 端點可能無法存取。這可能導致節點引導失敗。請確保您的網路組態允許存取必要的 FIPS 端點。如需詳細資訊，請參閱 * AWS PrivateLink 指南*中的[透過資源 VPC 端點存取資源](https://docs.aws.amazon.com/vpc/latest/privatelink/use-resource-endpoint.html)。
+ 如果您的叢集使用具有 [PrivateLink](vpc-interface-endpoints.md)的子網路，則映像提取將會失敗，因為 Amazon ECR FIPS 端點無法透過 PrivateLink 使用。

## 使用 Bottlerocket FIPS AMI 建立受管節點群組
<a name="_create_a_managed_node_group_with_a_bottlerocket_fips_ami"></a>

Bottlerocket FIPS AMI 提供四種支援工作負載的變體：
+  `BOTTLEROCKET_x86_64_FIPS` 
+  `BOTTLEROCKET_ARM_64_FIPS` 
+  `BOTTLEROCKET_x86_64_NVIDIA_FIPS` 
+  `BOTTLEROCKET_ARM_64_NVIDIA_FIPS` 

要使用 Bottlerocket FIPS AMI 建立受管節點群組，請在建立程序中選擇適用的 AMI 類型。如需詳細資訊，請參閱[建立叢集的受管節點群組](create-managed-node-group.md)。

有關選擇啟用 FIPS 的變體的更多資訊，請參閱 [擷取建議的 Bottlerocket AMI ID](retrieve-ami-id-bottlerocket.md)。

## 停用不支援 AWS 區域的 FIPS 端點
<a name="disable_the_fips_endpoint_for_non_supported_shared_aws_regions"></a>

Bottlerocket FIPS AMIs 直接在美國支援，包括 AWS GovCloud (US) 區域。對於可使用 AMIs 但無法直接支援的 AWS 區域，您仍然可以透過使用啟動範本建立受管節點群組來使用 AMIs。

Bottlerocket FIPS AMI 在啟動程序期間依賴 Amazon ECR FIPS 端點，而這些端點在美國以外地區通常不可用。若要在沒有 Amazon ECR FIPS 端點可用的 AWS 區域中，將 AMI 用於其 FIPS 核心，請執行下列步驟來停用 FIPS 端點：

1. 建立一個包含以下內容的新組態檔案，或將該內容整合到您現有的組態檔中。

```
[default]
use_fips_endpoint=false
```

1. 將檔案內容編碼為 Base64 格式。

1. 在您的啟動範本的 `UserData` 中，使用 TOML 格式加入以下編碼字串：

```
[settings.aws]
config = "<your-base64-encoded-string>"
```

對於其他設定，[請參閱 GitHub 上 Bottlerocket 的設定描述](https://github.com/bottlerocket-os/bottlerocket?tab=readme-ov-file#description-of-settings)。

以下是啟動範本中 `UserData` 的範例：

```
[settings]
motd = "Hello from eksctl!"
[settings.aws]
config = "W2RlZmF1bHRdCnVzZV9maXBzX2VuZHBvaW50PWZhbHNlCg==" # Base64-encoded string.
[settings.kubernetes]
api-server = "<api-server-endpoint>"
cluster-certificate = "<cluster-certificate-authority>"
cluster-name = "<cluster-name>"
...<other-settings>
```

有關使用使用者資料建立啟動範本的更多資訊，請參閱 [使用啟動範本自訂受管節點](launch-templates.md)。