

 **協助改進此頁面** 

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

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

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

# 部署 FSx for Lustre 驅動程式
<a name="fsx-csi-create"></a>

本主題說明如何將 [FSx for Lustre CSI 驅動程式](fsx-csi.md)部署到您的 Amazon EKS 叢集，並確認是否正常運作。我們建議您使用最新版的驅動程式。如需可用版本，請參閱 GitHub 上的 [CSI 規格相容性對照表](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/README.md#csi-specification-compatibility-matrix)。

**注意**  
Fargate 不支援驅動程式。

如需可用參數的詳細說明，以及示範驅動程式功能的完整範例，請參閱 GitHub 上的 [FSx for Lustre 容器儲存介面 (CSI) 驅動程式](https://github.com/kubernetes-sigs/aws-fsx-csi-driver)專案。

## 先決條件
<a name="fsx-csi-prereqs"></a>
+ 現有的叢集。
+ Amazon FSx CSI 驅動程式 EKS 附加元件支援透過 EKS Pod Identity 或 IAM Roles for Service Accounts (IRSA) 進行身分驗證。若要使用 EKS Pod Identity，請在部署 FSx CSI 驅動程式附加元件之前或之後安裝 Pod Identity 代理程式。如需詳細資訊，請參閱[設定 Amazon EKS Pod 身分識別代理程式](pod-id-agent-setup.md)。若要改為使用 IRSA，請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。
+ 在您的裝置或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 `1.27.160` `2.12.3`或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *
+ 裝置或 AWS CloudShell 上安裝的`eksctl`命令列工具版本 `0.215.0`或更新版本。如需有關安裝或更新 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)一節。
+ `kubectl` 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同，或是為最多比該版本更舊一版或更新一版的次要版本。例如，如果您的叢集版本為 `1.29`，則可以搭配使用 `kubectl` `1.28`、`1.29` 或 `1.30` 版。若要安裝或升級 `kubectl`，請參閱 [設定 `kubectl` 和 `eksctl`](install-kubectl.md)。

## 步驟 1：建立 IAM 角色
<a name="fsx-create-iam-role"></a>

Amazon FSx CSI 外掛程式需要 IAM 許可，才能代表您呼叫 AWS APIs。

**注意**  
Pod 可以存取指派給 IAM 角色的許可，除非您封鎖對 IMDS 的存取。如需詳細資訊，請參閱[藉助最佳實務來保護 Amazon EKS 叢集](security-best-practices.md)。

下列程序說明如何建立 IAM 角色，並將 AWS 受管政策連接至該角色。

1. 建立 IAM 角色，並使用下列命令連接 AWS 受管政策。使用您要使用的叢集名稱取代 `my-cluster`。命令會部署建立 IAM 角色並將 IAM 政策連接至其中的 AWS CloudFormation 堆疊。

   ```
   eksctl create iamserviceaccount \
       --name fsx-csi-controller-sa \
       --namespace kube-system \
       --cluster my-cluster \
       --role-name AmazonEKS_FSx_CSI_DriverRole \
       --role-only \
       --attach-policy-arn arn:aws: iam::aws:policy/AmazonFSxFullAccess \
       --approve
   ```

   建立服務帳戶時，您會看到數行輸出。輸出的最後一行類似於下列內容。

   ```
   [ℹ]  1 task: {
       2 sequential sub-tasks: {
           create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa",
           create serviceaccount "kube-system/fsx-csi-controller-sa",
       } }
   [ℹ]  building iamserviceaccount stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  created serviceaccount "kube-system/fsx-csi-controller-sa"
   ```

   請注意已部署的 AWS CloudFormation 堆疊名稱。在先前的範例輸出中，堆疊被命名為 `eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa`。

現在，您已建立 Amazon FSx CSI 驅動程式 IAM 角色，即可繼續進行下一節。當您使用此 IAM 角色部署附加元件時，即會建立並設定為使用名為 `fsx-csi-controller-sa` 的服務帳戶。該服務帳戶會繫結至獲指派所需 Kubernetes 許可的 Kubernetes `clusterrole`。

## 步驟 2：安裝 Amazon FSx CSI 驅動程式
<a name="fsx-csi-deploy-driver"></a>

建議您透過 Amazon EKS 附加元件安裝 Amazon FSx CSI 驅動程式，以提升安全性並減少工作量。若要將 Amazon EKS 附加元件新增至叢集，請參閱 [建立 Amazon EKS 附加元件](creating-an-add-on.md)。如需附加元件的詳細資訊，請參閱 [Amazon EKS 附加元件](eks-add-ons.md)。

**重要**  
叢集中預先存在的 Amazon FSx CSI 驅動程式安裝可能會導致附加元件安裝失敗。當您嘗試安裝 Amazon EKS 附加元件版本而又存在非 EKS FSx CSI 驅動程式時，安裝會因資源衝突而失敗。在安裝期間使用 `OVERWRITE` 旗標以解決此問題。  

```
aws eks create-addon --addon-name aws-fsx-csi-driver --cluster-name my-cluster --resolve-conflicts OVERWRITE
```

或者，如果您想要 Amazon FSx CSI 驅動程式的自我管理安裝，請參閱 GitHub 上的[安裝](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/install.md)。

## 步驟 3：部署儲存類別、持久性磁碟區宣告和範例應用程式
<a name="fsx-csi-deploy-storage-class"></a>

此程序使用 [FSx for Lustre 容器儲存介面 (CSI) 驅動程式](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) GitHub 儲存庫，來耗用動態佈建的 FSx for Lustre 磁碟區。

1. 記下叢集的安全群組。您可以在**聯網**區段 AWS 管理主控台 下的 中或使用下列 CLI AWS 命令來查看。使用您要使用的叢集名稱取代 `my-cluster`。

   ```
   aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
   ```

1. 根據《Amazon FSx for Lustre 使用者指南》中的[ Amazon VPC 安全群組](https://docs.aws.amazon.com/fsx/latest/LustreGuide/limit-access-security-groups.html#fsx-vpc-security-groups)中顯示的標準，為您的 Amazon FSx 檔案系統建立安全群組。對於 **VPC**，選擇叢集的 VPC，如**聯網**區段所示。對於「與 Lustre 用戶端關聯的安全群組」，請使用您的叢集安全群組。您可以單獨保留傳出規則，以允許 **All traffic** (所有流量)。

1. 執行以下命令，下載儲存類別清單檔案。

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
   ```

1. 編輯 `storageclass.yaml` 檔案的參數區段。使用您自己的值取代每一個範例值。

   ```
   parameters:
     subnetId: subnet-0eabfaa81fb22bcaf
     securityGroupIds: sg-068000ccf82dfba88
     deploymentType: PERSISTENT_1
     automaticBackupRetentionDays: "1"
     dailyAutomaticBackupStartTime: "00:00"
     copyTagsToBackups: "true"
     perUnitStorageThroughput: "200"
     dataCompressionType: "NONE"
     weeklyMaintenanceStartTime: "7:09:00"
     fileSystemTypeVersion: "2.12"
   ```
   +  ** `subnetId` **：應該在其中建立 Amazon FSx for Lustre 檔案系統的子網路 ID。並非所有可用區域都支援 Amazon FSx for Lustre。開啟位於 https://console.aws.amazon.com/fsx/ 的 Amazon FSx for Lustre 主控台，確認您要使用的子網路位於支援的可用區域中。子網路可以包含您的節點，也可以是不同的子網路或 VPC：
     + 您可以在**運算**區段下選取節點群組， AWS 管理主控台 以檢查 中的節點子網路。
     + 若您指定的子網路與您擁有節點的子網路不同，則您的 VPC 必須[已連線](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html)，且您必須確認安全群組中必要的連接埠已開啟。
   +  ** `securityGroupIds` **：您為檔案系統所建立的安全群組 ID。
   +  **`deploymentType` (選用)**：檔案系統部署類型。有效值為 `SCRATCH_1`、`SCRATCH_2`、`PERSISTENT_1`、`PERSISTENT_2`。如需部署類型的詳細資訊，請參閱[建立您的 Amazon FSx for Lustre 檔案系統](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step1.html)。
   +  **其他參數 (選用)**：如需有關其他參數的詳細資訊，請參閱 GitHub 上的[編輯 StorageClass](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/tree/master/examples/kubernetes/dynamic_provisioning#edit-storageclass)。

1. 建立儲存類別清單檔案。

   ```
   kubectl apply -f storageclass.yaml
   ```

   範例輸出如下。

   ```
   storageclass.storage.k8s.io/fsx-sc created
   ```

1. 下載持續性磁碟區宣告清單檔案。

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
   ```

1. (選用) 編輯 `claim.yaml` 檔案。根據您的儲存要求和您在上一個步驟中選取的 `deploymentType`，將 `1200Gi` 變更為下列某一個增量值。

   ```
   storage: 1200Gi
   ```
   +  `SCRATCH_2` 和 `PERSISTENT`：`1.2 TiB` 或 `2.4 TiB`，超過 2.4 TiB 則以 2.4 TiB 為單位遞增。
   +  `SCRATCH_1`：`1.2 TiB`、`2.4 TiB` 或 `3.6 TiB`，超過 3.6 TiB 則以 3.6 TiB 為單位遞增。

1. 建立持續性磁碟區宣告。

   ```
   kubectl apply -f claim.yaml
   ```

   範例輸出如下。

   ```
   persistentvolumeclaim/fsx-claim created
   ```

1. 確認已佈建檔案系統。

   ```
   kubectl describe pvc
   ```

   範例輸出如下。

   ```
   Name:          fsx-claim
   Namespace:     default
   StorageClass:  fsx-sc
   Status:        Bound
   [...]
   ```
**注意**  
`Status` 可能會顯示為 `Pending` 約 5-10 分鐘，然後變更為 `Bound`。在 `Status` 成為 `Bound` 之前，請勿繼續下一步。如果 `Status` 顯示 `Pending` 超過 10 分鐘，請使用 `Events` 中的警告訊息作為解決任何問題的參考。

1. 部署範例應用程式。

   ```
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
   ```

1. 確認範例應用程式正在執行。

   ```
   kubectl get pods
   ```

   範例輸出如下。

   ```
   NAME      READY   STATUS              RESTARTS   AGE
   fsx-app   1/1     Running             0          8s
   ```

1. 驗證應用程式是否正確掛載了檔案系統。

   ```
   kubectl exec -ti fsx-app -- df -h
   ```

   範例輸出如下。

   ```
   Filesystem                   Size  Used Avail Use% Mounted on
   overlay                       80G  4.0G   77G   5% /
   tmpfs                         64M     0   64M   0% /dev
   tmpfs                        3.8G     0  3.8G   0% /sys/fs/cgroup
   192.0.2.0@tcp:/abcdef01      1.1T  7.8M  1.1T   1% /data
   /dev/nvme0n1p1                80G  4.0G   77G   5% /etc/hosts
   shm                           64M     0   64M   0% /dev/shm
   tmpfs                        6.9G   12K  6.9G   1% /run/secrets/kubernetes.io/serviceaccount
   tmpfs                        3.8G     0  3.8G   0% /proc/acpi
   tmpfs                        3.8G     0  3.8G   0% /sys/firmware
   ```

1. 確認範例應用程式是否已將資料寫入 FSx for Lustre 檔案系統。

   ```
   kubectl exec -it fsx-app -- ls /data
   ```

   範例輸出如下。

   ```
   out.txt
   ```

   此範例輸出顯示範例應用程式成功地將 `out.txt` 檔案寫入檔案系統。

**注意**  
刪除叢集之前，請確認刪除 FSx for Lustre 檔案系統。如需詳細資訊，請參閱 *《FSx for Lustre 使用者指南》*中的[清除資源](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step4.html)。

## FSx for Lustre 的效能調校
<a name="_performance_tuning_for_fsx_for_lustre"></a>

搭配 Amazon EKS 使用 FSx for Lustre 時，您可以在節點初始化期間套用 Lustre 調校，進而最佳化效能。建議的方法是使用啟動範本使用者資料，以確保所有節點的組態一致。

這些調校包括：
+ 網路和 RPC 最佳化
+ Lustre 模組管理
+ LRU (鎖定資源單位) 調校
+ 用戶端快取控制設定
+ OST 和 MDC 的 RPC 控制

如需實作這些效能調校的詳細說明：
+ 如需最佳化標準節點 (非 EFA) 的效能，請參閱 [最佳化節點 (非 EFA) 上的 Amazon FSx for Lustre 效能](fsx-csi-tuning-non-efa.md)，以取得可新增至啟動範本使用者資料的完整指令碼。
+ 如需最佳化已啟用 EFA 節點的效能，請參閱 [最佳化節點 (EFA) 上的 Amazon FSx for Lustre 效能](fsx-csi-tuning-efa.md)。