AWS Fargate オペレーティングシステム (OS) のパッチ適用により、Amazon Elastic Kubernetes サービス (Amazon EKS) のポッドまたはノードが削除されたかどうかを確認したいです。
簡単な説明
ノードを安全に保つため、Amazon EKS は Fargate ノードの OS に定期的にパッチを適用します。パッチ適用プロセス中、Amazon EKS はノードをリサイクルして OS パッチをインストールします。Fargate OS のパッチ適用では、Amazon EKS はEviction API を使用してポッドを安全にドレインし、その API を Amazon EKS 監査ログに記録します。Fargate OS へのパッチ適用が行われた場合は、Eviction API のログが監査ログに表示されていることを確認します。詳細については、Kubernetes ウェブサイトの Eviction API を参照してください。
解決策
エビクション API が監査ログに表示されていることを確認するには、次のクエリ例を使用します。
filter @logStream like /^kube-apiserver-audit/ | fields @timestamp, user.username, user.extra.canonicalArn.0, @message
| sort @timestamp desc
| filter verb == "create" and objectRef.subresource == 'eviction'
| filter requestURI like "/api/v1/namespaces/NAMESPACE/pods/pod-name/"
**注:**NAMESPACE と pod-name を実際の値に置き換えます。検索ウィンドウを絞り込むには、Amazon CloudWatch のタイムウィンドウを変更します。
監査ログ出力の例:
{
"@logStream": "kube-apiserver-audit",
"@timestamp": "xxx",
"@message": {
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "RequestResponse",
・・・
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/<Namespace>/pods/<Pod_Name>/eviction.."
"verb": "create",
"user": {
"username": "<username>",
・・・
},
"userAgent": "<agent>",
"objectRef": {
"resource": "pods",
"namespace": "xxx",
"name": "xxx",
"apiVersion": "v1",
"subresource": "eviction"
},
"responseStatus": {
"metadata": {},
"status": "Success",
"code": 201
},
"requestObject": {
"kind": "Eviction",
"apiVersion": "policy/v1beta1",
"metadata": {
"name": "xxx",
"namespace": "xxx",
"creationTimestamp": null
}
},
**注:**ポッドがリサイクルされる際に同時にダウンするポッドの数を制限するには、ポッドの中断予算を設定します。詳細については、Kubernetes ウェブサイトの「Specifying a disruption budget for your application」を参照してください。
関連情報
Kubernetes ウェブサイトの API によるエビクションの説明