AWS Fargate OS 패칭 이벤트에 대한 작업 설정

AWS Fargate OS 패칭 이벤트에 대한 작업 설정

Amazon EKS가 AWS Fargate 노드의 OS를 주기적으로 패칭하며, 이때 발생하는 이벤트에 대해 취할 수 있는 작업을 설명합니다.

출처: 문서

본문

Amazon EKS는 AWS Fargate 노드의 OS를 안전하게 유지하기 위해 주기적으로 패칭합니다. 패칭 과정의 일부로 OS 패치를 설치하기 위해 노드를 재활용(recycling)합니다. 업데이트는 서비스에 가장 적은 영향을 주는 방식으로 시도됩니다. 그러나 Pod가 성공적으로 축출(evict)되지 않으면 삭제해야 하는 경우도 있습니다. 잠재적 중단을 최소화하기 위해 취할 수 있는 작업은 다음과 같습니다.

  • 동시에 중단되는 Pod 수를 제어하려면 적절한 Pod 중단 예산(Pod disruption budgets, PDB)을 설정합니다.
  • Pod가 삭제되기 전에 실패한 축출을 처리하려면 Amazon EventBridge 규칙을 생성합니다.
  • 받은 알림에 게시된 축출 날짜 전에 영향을 받는 Pod를 수동으로 다시 시작합니다.
  • AWS User Notifications에 알림 구성을 생성합니다.

Amazon EKS는 Kubernetes 커뮤니티와 긴밀히 협력하여 버그 수정과 보안 패치를 가능한 한 빨리 제공합니다. 모든 Fargate Pod는 클러스터의 Kubernetes 버전에 대해 Amazon EKS에서 제공하는 가장 최신 Kubernetes 패치 버전으로 시작됩니다. 패치 버전이 더 오래된 Pod가 있다면 Amazon EKS가 이를 재활용하여 최신 버전으로 업데이트할 수 있습니다. 이렇게 하면 Pod가 최신 보안 업데이트를 갖추게 됩니다. 따라서 중요한 CVE(Common Vulnerabilities and Exposures) 문제가 있을 때 최신 상태를 유지하여 보안 위험을 줄일 수 있습니다.

AWS Fargate OS가 업데이트되면 Amazon EKS가 영향을 받는 자원과 다가오는 Pod 축출 날짜가 포함된 알림을 보냅니다. 제공된 축출 날짜가 불편하다면 알림에 게시된 축출 날짜 전에 영향을 받는 Pod를 수동으로 다시 시작하는 옵션이 있습니다. 알림을 받기 전에 생성된 Pod는 모두 축출 대상입니다. Pod를 수동으로 다시 시작하는 방법에 대한 자세한 지침은 Kubernetes 문서를 참조하세요.

Pod가 재활용될 때 한 번에 중단되는 Pod 수를 제한하려면 PDB(Pod disruption budgets)를 설정할 수 있습니다. PDB를 사용하면 각 애플리케이션의 요구 사항에 따라 최소 가용성을 정의하면서도 업데이트를 허용할 수 있습니다. PDB의 최소 가용성은 100% 미만이어야 합니다. 자세한 내용은 Kubernetes 문서의 애플리케이션에 대한 중단 예산 지정(Specifying a Disruption Budget for your Application)을 참조하세요.

Amazon EKS는 Eviction API를 사용하여 애플리케이션에 설정한 PDB를 존중하면서 Pod를 안전하게 드레인(drain)합니다. Pod는 영향을 최소화하기 위해 가용 영역(Availability Zone)별로 축출됩니다. 축출이 성공하면 새 Pod는 최신 패치를 받으며 추가 조치가 필요하지 않습니다.

Pod 축출이 실패하면 Amazon EKS는 실패한 축출에 대한 세부 정보와 함께 이벤트를 계정으로 보냅니다. 예정된 종료 시간 전에 이 메시지에 대해 조치를 취할 수 있습니다. 구체적인 시간은 패치의 긴급성에 따라 다릅니다. 시간이 되면 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 disruption budget)를 조정할 수 있습니다. 더 구체적으로, 사용 가능한 Pod의 대상 백분율을 지정하는 PDB로 시작했다고 가정합니다. 업그레이드 중에 Pod가 강제 종료되기 전에 PDB를 다른 Pod 백분율로 조정할 수 있습니다. 이 이벤트를 받으려면 클러스터가 속한 AWS 계정과 AWS 리전에 Amazon EventBridge 규칙을 생성해야 합니다. 규칙은 다음 사용자 지정 패턴을 사용해야 합니다. 자세한 내용은 Amazon EventBridge 사용자 가이드의 이벤트에 반응하는 Amazon EventBridge 규칙 만들기를 참조하세요.

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

이벤트를 캡처하기 위해 적절한 대상을 설정할 수 있습니다. 사용 가능한 대상의 전체 목록은 Amazon EventBridge 사용자 가이드의 Amazon EventBridge targets를 참조하세요. AWS User Notifications에서 알림 구성을 만들 수도 있습니다. AWS Management Console로 알림을 만들 때 Event Rules에서 AWS 서비스 이름으로 **Elastic Kubernetes Service (EKS)**를, 이벤트 유형으로 EKS Fargate Pod Scheduled Termination을 선택합니다. 자세한 내용은 AWS User Notifications 사용자 가이드의 Getting started with AWS User Notifications를 참조하세요.

EKS Pod 축출에 대한 자주 묻는 질문은 AWS re:Post의 Fargate Pod eviction notice FAQ를 참조하세요.

더 알아보기 (Learn more)