

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

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

# AWS Fargate OS パッチ適用イベントのアクションを設定する
<a name="fargate-pod-patching"></a>

Amazon EKS は定期的に AWS Fargate ノードの OS にパッチを適用し、ノードを安全に保ちます。パッチ適用プロセスの一環として、ノードをリサイクルして OS パッチをインストールします。更新は、サービスへの影響を最小限に抑える方法で試行されます。ただし、Pod のエビクションが正常に行われない場合は、Pod を削除する必要がある場合があります。以下に示しているのは、中断の可能性を最小限に抑えるために実行できるアクションです。
+ 適切な Pod の中断予算 (PDB) を設定して、同時にダウンする Pod の数を制御します。
+ Pod が削除される前に、失敗したエビクションに対応する Amazon EventBridge ルールを作成します。
+ 受信した通知に記載されているエビクション日よりも前に、影響を受けるポッドを手動で再起動します。
+ AWS User Notifications で通知設定を作成します。

Amazon EKS は、Kubernetes コミュニティと緊密に協力して、できるだけ早く、バグ修正とセキュリティパッチが入手可能になるようにしています。すべての Fargate Pod は最新の Kubernetes パッチバージョンで起動されます。このバージョンは、Amazon EKS からクラスターの Kubernetes バージョンとして入手できます。以前のパッチバージョンの Pod をお持ちの場合、Amazon EKS はそれをリサイクルして最新バージョンに更新することがあります。これにより、Pod に最新のセキュリティアップデートが確実に装備されます。そのため、クリティカルな[共通脆弱性識別子](https://cve.mitre.org/) (CVE) 問題があっても、最新の状態に保たれてセキュリティリスクが軽減されています。

AWS Fargate OS が更新されると、Amazon EKS は影響を受けるリソースと今後のポッドのエビクション日を含む通知を送信します。指定されたエビクション日が不都合な場合は、通知に記載されたエビクション日よりも前に、影響を受けるポッドを手動で再起動するオプションを利用できます。通知を受け取る前に作成されたポッドは、エビクションの対象となります。ポッドを手動で再起動する方法の詳細については、[Kubernetes ドキュメント](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_rollout/kubectl_rollout_restart)を参照してください。

Pod がリサイクルされるときに一度にダウンする Pod の数を制限するために、Pod の中断予算 (PDB) を設定できます。PDB を使用して、更新の実行を許可しながら、各アプリケーションの要件に基づいて最小限使用可能なポッドを定義できます。PDB の最小可用性は 100% 未満である必要があります。詳細については、Kubernetes ドキュメントの「[アプリケーションに Disruption Budget 指定する](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)」を参照してください。

Amazon EKS は [Eviction API](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/#eviction-api) を使用して、アプリケーションに設定した PDB を尊重しながら Pod を安全に排出します。ポッドのエビクションは、影響を最小限に抑えるために、アベイラビリティーゾーンごとに行われます。エビクションが成功すると、新しい Pod には最新のパッチが適用され、それ以上のアクションは必要ありません。

Pod のエビクションが失敗すると、Amazon EKS はエビクションに失敗した Pod の詳細を含むイベントをアカウントに送信します。スケジュールされた終了時刻より前にメッセージに対応できます。具体的な時刻は、パッチの緊急性によって異なります。その時刻になると、Amazon EKS は Pod のエビクションを再び試行します。ただし、今回は、エビクションが失敗しても新しいイベントは送信されません。エビクションが再び失敗すると、新しい Pod に最新のパッチが適用できるように、既存の Pod が定期的に削除されます。

Pod のエビクションが失敗したときに受信されるイベントのサンプルを次に示します。これには、クラスター、Pod 名、Pod 名前空間、Fargate プロファイル、およびスケジュールされた終了時刻に関する詳細が含まれます。

```
{
    "version": "0",
    "id": "12345678-90ab-cdef-0123-4567890abcde",
    "detail-type": "EKS Fargate Pod Scheduled Termination",
    "source": "aws.eks",
    "account": "111122223333",
    "time": "2021-06-27T12:52:44Z",
    "region": "region-code",
    "resources": [
        "default/my-database-deployment"
    ],
    "detail": {
        "clusterName": "my-cluster",
        "fargateProfileName": "my-fargate-profile",
        "podName": "my-pod-name",
        "podNamespace": "default",
        "evictErrorMessage": "Cannot evict pod as it would violate the pod's disruption budget",
        "scheduledTerminationTime": "2021-06-30T12:52:44.832Z[UTC]"
    }
}
```

さらに、Pod に複数の PDB が関連付けられていると、エビクション失敗イベントが発生する可能性があります。このイベントは次のエラーメッセージを返します。

```
"evictErrorMessage": "This pod has multiple PodDisruptionBudget, which the eviction subresource does not support",
```

このイベントに基づいて、目的のアクションを作成できます。例えば、Pod の中断予算 (PDB) を調整して、Pod のエビクションの方法を制御できます。具体的には、利用可能な Pod の目標パーセンテージを指定する PDB から始めたとします。アップグレード中に Pod が強制終了される前に、PDB を異なる割合の Pod に調整できます。このイベントを受信するには、クラスターが属する AWS アカウントおよび AWS リージョンで Amazon EventBridge ルールを作成する必要があります。ルールでは、次の**カスタムパターン**を使用する必要があります。EventBridge ルールの作成の詳細については、*Amazon EventBridge ユーザーガイド*の「[イベントに反応する Amazon EventBridge ルールの作成](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html)」を参照してください 。

```
{
  "source": ["aws.eks"],
  "detail-type": ["EKS Fargate Pod Scheduled Termination"]
}
```

キャプチャするためのイベントに適切なターゲットを設定できます。詳細については、「Amazon EventBridge ユーザーガイド」の「[Amazon EventBridge ターゲット](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)」を参照してください。AWS User Notifications で通知設定を作成することもできます。AWS マネジメントコンソール を使用して通知を作成する場合は、**[イベントルール]** で、 **[AWS 名]**  に **[Elastic Kubernetes Service (EKS)]** を選択し、**[イベントタイプ]** に **[EKS Fargate Pod のスケジュールされた終了時刻]** を選択します。詳細については、「AWS User Notifications ユーザーガイド」の「[AWS User Notifications の開始方法](https://docs.aws.amazon.com/notifications/latest/userguide/getting-started.html)」を参照してください。

EKS Pod エビクションに関するよくある質問については、*AWS re:Post* の「[よくある質問: Fargate Pod のエビクション通知](https://repost.aws/knowledge-center/fargate-pod-eviction-notice)」を参照してください。