我想检查 AWS Fargate 操作系统(OS)修补操作是否删除了我的 Amazon Elastic Kubernetes Service(Amazon EKS)容器组(pod)或节点。
简短描述
为了确保节点安全,Amazon EKS 会定期为 Fargate 节点修补操作系统。在修补过程中,Amazon EKS 会回收节点来安装操作系统补丁。在 Fargate 操作系统修补操作中,Amazon EKS 使用驱逐 API 来安全地排空容器组(pod)并将该 API 记录在 Amazon EKS 审计日志中。如果执行 Fargate 操作系统修补操作,请确认驱逐 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
}
},
**注意:**要在回收容器组(pod)时限制同时停机的容器组(pod)数量,请设置容器组(pod)中断预算。有关更多信息,请参阅 Kubernetes 网站上的 Specifying a disruption budget for your application。
相关信息
Kubernetes 网站上 API-initiated eviction