

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Fargate Pod 設定の詳細を理解する
<a name="fargate-pod-configuration"></a>

このセクションでは、AWS Fargate で Kubernetes Pod を実行するための固有の Pod 設定の詳細について説明します。

## ポッド CPU とメモリ
<a name="fargate-cpu-and-memory"></a>

Kubernetes では、Pod 内の各コンテナに割り当てられるリクエスト、最小量の vCPU およびメモリリソースを定義できます。Pod は Kubernetes によってスケジュールされ、少なくとも各 Pod に対してリクエストされたリソースがコンピューティングリソース上で利用可能になるようにします。詳細については、Kubernetes のドキュメントの「[Managing Compute Resources for Containers](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)」を参照してください。

**注記**  
Amazon EKS Fargate はノードごとに Pod を 1 つだけ実行するため、リソースが少ない場合に Pod を削除するシナリオは発生しません。すべての Amazon EKS Fargate Pod は保証された優先度で実行されるため、リクエストされた CPU とメモリは、すべてのコンテナの制限に等しくする必要があります。詳細については、Kubernetes ドキュメントの「[Configure Quality of Service for Pods (ポッド用にサービスの品質を設定する)](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/)」を参照してください。

Pod が Fargate にスケジュールされている場合、Pod 仕様内の vCPU とメモリの予約によって、Pod にプロビジョニングする CPU とメモリの量が決まります。
+ Init コンテナからの最大リクエストは、Init リクエスト vCPU およびメモリ要件を決定するために使用されます。
+ 実行時間の長いコンテナのリクエストは、実行時間の長いリクエスト vCPU とメモリ要件を決定するために合計されます。
+ 前記の 2 つの値のうち大きい方が、Pod 用に使用する vCPU とメモリリクエストに対して選択されます。
+ Fargate は、必要な Kubernetes コンポーネント (`kubelet`、`kube-proxy`、および `containerd`) の各 Pod のメモリ予約に 256 MB を追加します。

Fargate では、Pod の実行に必要なリソースを常に確保するために、vCPU とメモリのリクエストの合計に最も近い、次に示すコンピューティング設定に切り上げられます。

vCPU とメモリの組み合わせを指定しない場合は、使用可能な最小の組み合わせ (.25 vCPU と 0.5 GB のメモリ) が使用されます。

次の表は、Fargate で実行されている Pod で使用可能な vCPU とメモリの組み合わせを示しています。


| vCPU 値 | メモリの値 | 
| --- | --- | 
|  .25 vCPU  |  0.5 GB、1 GB、2 GB  | 
|  .5 vCPU  |  1 GB、2 GB、3 GB、4 GB  | 
|  1 vCPU  |  2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB  | 
|  2 vCPU  |  4 GB ～ 16 GB (1 GB のインクリメント)  | 
|  4 vCPU  |  8 GB ～ 30 GB (1 GB のインクリメント)  | 
|  8 vCPU  |  16 GB～60 GB (4 GB のインクリメント)  | 
|  16 vCPU  |  32 GB～120 GB (8 GB のインクリメント)  | 

Kubernetes コンポーネント用に予約されている追加メモリにより、要求よりも多くの vCPU による Fargate タスクがプロビジョニングされる可能性があります。例えば、1 つの vCPU と 8 GB のメモリを要求すると、メモリ要求に 256 MB が追加され、2 つの vCPU と 9 GB のメモリの Fargate タスクがプロビジョニングされます。これは、1 つの vCPU と 9 GB のメモリのタスクがないためです。

Fargate で実行されている Pod のサイズと、Kubernetes が `kubectl get nodes` でレポートするノードサイズに相関はありません。レポートされるノードサイズは、多くの場合 Pod のキャパシティーよりも大きくなります。次のコマンドを使用して、Pod キャパシティーを確認できます。*default* を Pod の名前空間に、*pod-name* を Pod の名前に置き換えます。

```
kubectl describe pod --namespace default pod-name
```

出力例は次のとおりです。

```
[...]
annotations:
    CapacityProvisioned: 0.25vCPU 0.5GB
[...]
```

`CapacityProvisioned` アノテーションは、実際の Pod キャパシティーを表し、これで Fargate で実行されている Pod のコストが決まります。コンピューティング設定の料金情報については、「[AWS Fargate の料金](https://aws.amazon.com/fargate/pricing/)」を参照してください。

## Fargate ストレージ
<a name="fargate-storage"></a>

Fargate 上で実行される Pod は、ドライバーの手動インストールステップなしで、Amazon EFS ファイルシステムを自動的にマウントします。Fargate ノードでは動的永続ボリュームプロビジョニングを使用できませんが、静的プロビジョニングを使用することはできます。詳細については、GitHub の「[Amazon EFS CSI ドライバー](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md)」を参照してください。

プロビジョニングすると、Fargate で実行されている各 Pod に対して、デフォルトで 20 GiB のエフェメラルストレージが割り当てられます。このタイプのストレージは、Pod の停止後に削除されます。Fargate に起動される新しい Pod では、エフェメラルストレージボリュームの暗号化がデフォルトで有効になっています。エフェメラル Pod ストレージは、AWS Fargate で管理されるキーを使用して AES-256 暗号化アルゴリズムで暗号化されます。

**注記**  
Fargate で実行される Amazon EKS Pod のデフォルトで使用可能なストレージは、20 GiB 未満です。これは、一部のスペースが `kubelet` と Pod 内に読み込まれるその他の Kubernetes モジュールによって使用されるためです。

エフェメラルストレージの総量は、最大 175 GiB まで増やすことができます。Kubernetes でサイズを設定するには、Pod 内の各コンテナに対して、`ephemeral-storage` リソースのリクエストを指定します。Kubernetes が Pod をスケジュールすると、各 Pod に対するリソースリクエストの合計が Fargate タスクの容量を下回ることが保証されます。詳細については、Kubernetes ドキュメントの「[Resource Management for Pods and Containers](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)」を参照してください。

Amazon EKS Fargate は、システム使用目的でリクエストされた数よりも大きなエフェメラルストレージをプロビジョニングします。たとえば、100 GiB のリクエストでは、115 GiB のエフェメラルストレージの Fargate タスクがプロビジョニングされます。