[reinvent 2024] Amazon EKS를 이용하여 프로덕션 수준의 복원력이 있는 아키텍처 구축하기

Summary

이 세션에서는 보안, 복원력, 성능 및 비용의 저하 없이 대규모로 클러스터를 관리하고 업그레이드하는 방법을 알아보세요. ACK, Argo CD, Backstage와 같은 오픈 소스 도구를 사용하여 Amazon EKS 클러스터를 대규모로 구축 및 유지 관리하고, 전체 AWS 조직에 걸쳐 단일 창으로 Amazon EKS 클러스터의 인벤토리를 제공하는 방법을 알아보세요. 향상된 통합 가시성으로 워크로드 복원력을 보장하는 아키텍처 기술을 살펴보고 Amazon EKS 클러스터 전반에서 문제를 신속하게 식별할 수 있습니다.


리인벤트 2024 테크 블로그의 더 많은 글이 보고 싶다면?

Tech Blog

AWS re:Invent 2024 Tech Blog written by MegazoneCloud

Overview

  • Title: Building production-grade resilient architectures with Amazon EKS
  • Date: 2024년 12월 2(월)
  • Venue: Mandalay Bay | Lower Level North | Islander F
  • Speaker:
  • Carlos Santanam(Sr. Specialist Solutions Architect, AWS)
  • Niall Thomson(Container Specialist Solutions Architect, Amazon Web Services)
  • Industry: Cross-Industry Solutions

들어가며

EKS를 비롯한 쿠버네티스를 사용하는 모든 조직은 항상 클러스터 관리에 대해 고민이 있습니다. 이번 세션에서는 EKS 관리, 옵저버빌리티, 거버넌스를 주제로 클러스터 수명 주기 관리, 모니터링 체계 구축, 그리고 일관된 정책 설정 방법을 배우고자 합니다. 특히 GitOps를 활용한 자동화와 백스테이지와 같은 도구를 통해 플랫폼 운영 효율성을 높이는 방법과 예시를 배우고자합니다. 이를 통해 플랫폼 팀이 직면한 관리 및 확장 문제를 해결하고, 강력하고 탄력적인 스케일링 아키텍처를 구축할 수 있는 방안을 공유드리겠습니다.

EKS 관리, 관찰, 그리고 거버넌스:
플랫폼 팀이 해결해야 할 과제와 전략

최근 EKS 사용량이 전년 대비 33% 증가하며 빠른 확장을 보이고 있습니다. 이러한 증가세 속에서 플랫폼 팀은 EKS 클러스터의 구성, 배포, 그리고 관리를 책임져야 하는 중요한 과제를 안고 있습니다.

플랫폼 팀은 클러스터를 관리하면서 아래와 같은 문제점에 직면하게 됩니다. 클러스터 수명 주기 관리, 모니터링 및 얼럿 설정, 다른 팀들과의 협업을 위한 가드레일 설정 등을 수행해야 합니다. 적절한 클러스터 수명 주기 전략을 이용하여 클러스터의 생성부터 폐기에 이르기까지 체계적이고 반복 가능한 프로세스를 구축해야 합니다. 클러스터 및 워크로드가 문제없이 동작하는지 꾸준히 모니터링하고 얼럿을 설정하여 문제를 빠르게 인식할 수 있어야 합니다. 마지막으로 다른 팀(예: 개발팀)이 클러스터를 자유롭게 사용하면서도 운영 효율성과 안정성을 확보할 수 있도록 하는 정책과 제약 조건을 제공해야 합니다.

EKS 관리의 도전 과제와 클러스터 확장

관리해야 하는 클러스터가 많지 않은 초기에는 IaC(Infrastructure as Code) 도구를 활용해 클러스터를 구축하고 복사-붙여넣기 방식으로 확장하는 방법이 유효했습니다. 그러나 클러스터 수가 기하급수적으로 증가하면서 관리와 업그레이드의 복잡성이 급격히 높아졌습니다.

클러스터의 수가 급격히 많아지고, 클러스터마다 상이한 특성을 가지게 됨으로써 클러스터 업그레이드 같은 클러스터 관리 작업들을 모든 클러스터에 일관적이게 수행할 수 없게 됩니다. 각 클러스터에 다양한 애드온이 배포되기 떄문에 효율적으로 유지 관리하는데 한계가 있습니다. 또한 워크로드에 적합하게 클러스터를 구성하고, 스케일링 설정을 하는데에도 어려움이 있습니다. 마지막으로 비용을 최적화하는데도 어려움을 겪게 됩니다.

플랫폼 서비스의 발전

이에 대응하기 위해 플랫폼 팀은 클러스터 관리 방식을 서비스로서의 플랫폼(Platform as a Service)로 전환하고 있습니다.

플랫폼 팀은 클러스터를 서비스로 제공함으로써 클러스터와 애드온의 구성 및 운영을 직접 관리합니다. 클러스터를 사용하는 각 팀별로 네임스페이스를 할당하고 네임스페이스에 리소스 쿼터나 API rate limit 같은 제한을 설정합니다. 마지막으로 플랫폼을 서비스로 제공함으로써 개발팀이 소스 코드만 제공하면 플랫폼팀이 배포와 운영을 담당합니다.

GitOps를 활용한 관리와 효율화

GitOps는 클러스터 관리를 자동화하는 강력한 도구로 자리 잡았습니다. 모든 구성 요소를 YAML 파일로 정의하고 ArgoCD를 통해 배포 및 상태를 조정하는 방식이 대표적입니다.

각각의 클러스터는 컨트롤 플레인(버전 업그레이드, 권한 관리 등), 워커 노드(Karpenter 및 Helm 차트), 애드온(EKS와 오픈소스)과 같은 EKS 구성 요소 모두를 GitOps로 통합 관리합니다. 또한 ACK를 이용하여 필요한 AWS 자원(IAM, S3등)을 ArgoCD가 프로비저닝 하도록 합니다.
서로 다른 클러스터를 관리할 때에는 셀(Cell) 기반 관리라는 방법을 사용합니다. 클러스터를 개별적으로 관리하지 않고, 특정 환경의 클러스터 몇 개 이런식으로 그룹화하여 그룹화된 클러스터들을 일관적으로 관리합니다. 예를 들면 샌드박스 환경의 클러스터 1개, 스테이지 환경의 클러스터 2개, 프로덕션 환경의 클러스터 3개, 프로덕션 환경의 클러스터 3개 이런식으로 1, 2, 3, 3 개로 그룹화 할 수 있습니다. 이렇게 그룹화하여 클러스터를 관리하면 작업의 효율성을 높일 수 있습니다.

옵저버빌리티(Observability)의 중요성

플랫폼 팀의 역할은 단순히 클러스터를 제공하는 것으로 끝나지 않습니다. 개발팀을 고객으로 여기며, 클러스터의 성능과 문제를 사전에 인지하고 해결할 수 있는 관찰성과 모니터링 체계를 구축해야 합니다.

클러스터에서 발생하는 주요 신호를 실시간으로 감지할 수 있는 모니터링 시스템을 구축하고, 대시보드와 알림 시스템을 통해 문제를 신속히 파악할 수 있어야 합니다.

대시보드와 알림을 설정했으면 그 다음으로는 알림 발생 시 실행할 수 있는 표준화된 런북(runbook)을 준비하고 이를 자동화하여 대응 속도를 높입니다.
백스테이지와 같은 개발자 도구를 이용하여 쿠버네티스 자원뿐만 아니라 AWS 자원 등의 다양한 자원들을 수집하고, 자원들의 관계성을 그래프로 확인함으로써 예상치 못한 임팩트를 방지하는데 도움을 받을 수도 있습니다.
어떠한 작업을 클러스터 집합에 점진적으로 적용할 때, 다음 단계를 진행하기 전에 어플리케이션 지연 시간 등 주요 지표를 분석하여 피드백 루프를 구성할 수 있습니다.

거버넌스(Governance)와 가드레일

EKS와 같은 복잡한 플랫폼에서 거버넌스는 확장성과 신뢰성을 보장하는 핵심 요소입니다. 클러스터가 많아질수록 일관성이 중요하며, 이를 위한 정책과 가드레일이 필요합니다.

OPA Gatekeeper나 Kyverno와 같은 정책 엔진을 통해 보안 정책을 코드로 관리하거나 어드미션 컨트롤러로 특정 동작을 제어할 수 있습니다. 이렇게 정책을 제한함으로써 플랫폼의 가용성을 높일 수 있고, 문제 발생 가능성이 줄어듦에 따라 생긴 플랫폼에 대한 신뢰를 바탕으로 플랫폼 팀과 개발팀 간의 협업을 강화할 수 있습니다.

결론

이 세션은 플랫폼 팀이 수많은 클러스터들을 어떻게 효율적으로 관리할 수 있는지 그 방안을 제시합니다. 단순히 클러스터를 업그레이드 하는 것에 초점을 둔 것이 아니고, 지속적으로 관리하면서 문제가 발생하지 않도록 모니터링하고 대처하는 방법론에 대해서도 얘기합니다. 또한 개발자들고 협업할 때, 거버넌스를 이용하여 어떻게 개발자들의 자율성과 안전한 클러스터 운영을 이뤄낼 수 있는지에 대한 방법론도 같이 제시합니다. 내용을 요약하여 적어야 하기 때문에 너무 많은 내용이 생략되어 아쉬우니, 꼭 온라인으로 세션이 올라오면 들어보시는 것을 권장합니다.
글 │ 메가존클라우드, Cloud Technology Center (CTC), Cloud SA 8 팀, 이동재 매니저
게시물 주소가 복사되었습니다.