쿠버네티스(Kubernetes)는 이제 컨테이너 오케스트레이션을 위한 기본 선택지다. 이를 이용해 기업은 컨테이너화된 애플리케이션을 배포, 관리, 확장할 수 있는 기능을 제공받으며 확장성, 가용성, 안정성 및 민첩성을 비롯한 많은 이점을 얻을 수 있다.
쿠버네티스는 최신 애플리케이션을 구축하고 배포하기 위한 기술 스택의 핵심 요소가 되었지만, 그만큼 쿠버네티스 관련 비용을 관리하는 것도 중요해졌다. 쿠버네티스 실행 비용에는 두 가지 주요 구성 요소가 포함된다.
1. 컴퓨팅, 스토리지, 네트워킹 및 기타 인프라 비용을 포함하는 쿠버네티스 클러스터 실행에 대한 실제 지출 비용
2. 클러스터 관리에 대한 운영 비용
이 게시물에서는 쿠버네티스 사용 비용에 영향을 줄 수 있는 다양한 요인과 함께 클라우드 청구서를 제어하기 위한 쿠버네티스 비용 관리에 대한 팁과 모범 준칙을 살펴본다.
쿠버네티스 비용 관리라는 과제
쿠버네티스 인프라는 비용 관리 측면에서 고유한 과제를 제시한다. 이 중 대부분은 쿠버네티스의 복잡성 및 사용과 관련이 있다. 예를 들어 쿠버네티스에 배포된 컨테이너화 된 애플리케이션은 팟(pod), 디플로이먼트(deployment), 인그레스(ingress), 퍼시스턴트 볼륨(persistent volume) 및 네임스페이스(namespace)와 같은 다양한 리소스를 사용한다. 애플리케이션에 대한 비용을 계산하려면 이러한 모든 리소스의 사용량 메트릭을 세부적으로 살펴봐야 한다.
또한 쿠버네티스 애플리케이션은 여러 클러스터, 사업 부서, 데이터센터 및 클라우드 환경, 애플리케이션 팀에 분산되어 있을 수 있다. 또는 클러스터 자체가 여러 사업 부서 또는 애플리케이션 팀 간에 공유될 수 있다. 이러한 수준의 추가 복잡성은 비용을 추적(및 할당)하기 어렵게 만든다.
많은 기업은 이미 비용 관리 솔루션을 가지고 있지만, 쿠버네티스 인프라는 비용 관리에 추가 과제를 만든다. 따라서 쿠버네티스 비용 관리를 기본적으로 지원하는 솔루션을 갖추는 것이 중요하다.
쿠버네티스 인프라를 비용 효율적으로 운영하려면 조직은 다양한 기술과 준칙을 채택해야 한다. 다음과 같다.
• 클라우드 인스턴스와 애플리케이션 리소스의 적절한 크기 조정
• 가능한 경우 쿠버네티스 멀티 테넌시 사용
• 세분화된 쿠버네티스 비용 가시성 및 모니터링 구현
• 비용 최적화 정책
• 쿠버네티스 인프라 관리의 운영 오버헤드 줄이기
• 쿠버네티스 비용 관리 솔루션 채택하기
클라우드 인스턴스의 적절한 크기 조정
쿠버네티스 인프라를 설정할 때 먼저 해야 할 일 중 하나는 각 애플리케이션의 리소스 요구 사항을 이해하는 것이다. 비용이 많이 드는 오버 프로비저닝과 언더 프로비저닝의 부작용을 피하려면 각 애플리케이션의 리소스 요구 사항을 분석하는 것이 중요하다. 그래야 애플리케이션 요구 사항에 적합한 리소스를 선택할 수 있다.
퍼블릭 클라우드 인스턴스는 다양한 워크로드(예: 컴퓨팅, 메모리 또는 GPU)에 최적화되어 있다. 따라서 애플리케이션 특성에 따라 애플리케이션에 적합한 인스턴스 유형을 선택하는 것이 중요하다.
일괄 처리, 지속적인 통합, 테스트 환경 및 기타 불규칙하거나 임시적인 워크로드에 대해서는 스팟 인스턴스를 활용할 수 있다. 스팟 인스턴스를 활용하면 상당한 비용 절감이 가능하지만, 스팟 인스턴스에서 실행하기에 이상적인 워크로드를 철저히 분석해야 한다.
쿠버네티스 인프라에서 실행되는 모든 서비스의 최소 및 최대 CPU 및 메모리 요구 사항을 이해하기 위해 애플리케이션을 분석하는 것도 마찬가지로 중요하다. 분석한 데이터에 따라 올바른 요청(최소) 및 제한(최대)을 구성할 수 있다.
마찬가지로, 최소 리소스부터 시작하여 사용량이 증가함에 따라 애플리케이션 리소스를 확장하기 위해 쿠버네티스 수평 파드 오토스케일러(Horizontal Pod AutoScaling, HPA) 및 수직 파드 오토스케일러(Vertical Pod AutoScaling, VPA)를 채택해야 한다. 또한 쿠버네티스 클러스터의 확장을 위해 고급 클러스터 오토스케일러인 카펜터(Karpenter)를 사용해 볼 수도 있다. 카펜터는 부하가 증가할 때 클러스터를 확장하고 부하가 감소할 때 클러스터를 축소하여 비용을 절감할 수 있다.
쿠버네티스 멀티 테넌시를 활용
클러스터는 쿠버네티스 인프라의 기본 리소스이다. 클러스터는 전용과 공유라는 두 가지 방법으로 배포할 수 있다. 전용 클러스터는 일반적으로 단일 애플리케이션, 환경 또는 팀을 위해 배포된다. 공유 클러스터는 여러 애플리케이션, 팀, 사업부서 등에 분산된다. 전용 클러스터가 공유 클러스터보다 훨씬 더 높은 비용을 발생시키므로 무엇을 배포할지 결정하는 것은 비용 관리에 있어서 매우 중요하다.
전용 클러스터가 배포되는 몇 가지 시나리오는 다음과 같다.
• 애플리케이션의 지연 시간 요구 사항이 낮은 경우(즉, 목표 SLA/SLO가 다른 애플리케이션보다 훨씬 높음) 잠재적인 노이지 네이버 문제를 피해야 한다
• 애플리케이션에 고유한 요구 사항이 있는 경우(예: CNI 플러그인, GPU 워커 노드).
• 환경 유형에 따른 경우(즉, 프로덕션 환경의 전용 클러스터, 스테이지 및 테스트 환경의 공유 클러스터)
전용 클러스터가 필요한 이러한 특정 사용 사례를 제외하고는 공유 클러스터 모델로 표준화하는 것이 좋다. 쿠버네티스는 기본적으로 네임스페이스를 통해 멀티 테넌시를 지원한다. 그러나 다중 테넌시 배포를 위해 클러스터를 보안 및 거버넌스 관점에서 추가적으로 강화해야 한다.
추가 클러스터 강화 단계는 다음과 같다.
• 클러스터를 실행하는 모든 애플리케이션에서 사용하는 클러스터 전체 서비스 배포 및 관리
• 애플리케이션 및 네임스페이스 수준 할당량 관리
• 네임스페이스 격리를 위한 네트워크 정책
• 오픈 폴리시 에이전트(Open Policy Agent)와 같은 도구를 활용하는 보안 및 거버넌스 정책
• 공유 클러스터에 대한 안전한 제어 액세스를 위한 SSO 및 RBAC
이해 관계자에게 비용 가시성 제공
“측정할 수 없는 것은 효과적으로 관리할 수 없다”라는 말은 쿠버네티스 비용 관리에도 적용된다. 서비스 및 애플리케이션의 리소스 사용량을 정기적으로 모니터링하면 많은 리소스를 소비하는 구성 요소를 식별하고 최적화해 비용을 절감하는 데 도움이 될 수 있다. 쿠버네티스 대시보드 및 모니터링 도구를 사용하여 리소스 사용량을 추적하고 개선이 필요한 영역을 확인할 수 있다.
사용량 메트릭을 활용하여 애플리케이션의 리소스 제한 및 사용 할당량을 최적화할 수 있다. 이러한 최적화를 통해 애플리케이션이 필요와 할당에 따라 리소스를 소비하도록 하여 리소스에 대한 과도한 지출을 방지할 수 있다.
마찬가지로 예산 임계값을 구성하여 비용이 특정 한도를 초과할 때 조기 경고를 제공할 수 있다. 이러한 임계값은 쿠버네티스 인프라 팀에 필요한 재무 규율을 제공하는 가드레일 역할을 할 수 있다. 개별 사업부서, 개발 팀, 애플리케이션 소유자 및 기타 팀에 비용 가시성을 제공하는 것도 매우 중요하다. 비용 투명성은 이해 관계자 팀 간에 재무 규율과 책임감을 조성하는 데 도움이 되며, 추가적인 비용 절감 방법을 찾을 수 있는 통찰력과 동기를 제공한다.
비용 최적화 정책 구현
비용 최적화 정책을 구현하여 사용하지 않거나 활용도가 낮은 리소스를 삭제하면 쿠버네티스 인프라 비용을 크게 절감할 수 있다. 예를 들어, 아마존 EKS(Amazon EKS)와 같은 퍼블릭 클라우드 관리형 쿠버네티스 배포는 컨트롤 플레인을 실행하는 동안 모든 워커 노드 그룹을 종료하는 기능을 지원한다. UAT(사용자 승인 테스트) 또는 미리 보기 배포에 사용되는 장기 실행 클러스터의 경우, 모든 구성과 데이터를 그대로 유지하면서 주말 및 기타 업무 외 시간에 워커 노드 그룹을 중단했다가 필요할 때 신속하게 다시 불러오는 자동화를 구축할 수 있다.
마찬가지로 샌드박스 및 개발자 환경은 사용하지 않는 리소스를 정리하기 위해 업무 외 시간에 자동으로 중단시킬 수 있다. 정리 정책에서 소유자, 환경 및 만료 시간을 리소스에 부여하기 위해 태그와 라벨을 사용할 수 있다. 필요한 경우 태그를 사용하여 특정 리소스를 제외할 수도 있다.
또한 비용이 지역별로 다를 수 있으므로 허용되는 지역을 일부 지역으로 제한하는 것이 좋다. 마찬가지로, 애플리케이션에 필요한 인스턴스 유형만 활성화하고 다른 모든 유형은 제한하는 것이 좋다. 최적의 리소스를 사용하는 표준화된 템플릿을 만들고 사용자와 공유함으로써 자체 서비스 환경을 만들 수 있다.
또한 자동화된 정책을 설정하여 사용하지 않는 리소스를 정리할 수 있다.
간접 관리 및 유지 보수 비용을 간과해서는 안 된다. 쿠버네티스 인프라와 관련된 관리 및 유지 관리 비용은 종종 간과되는 경향이 있다. 특히 상당한 규모의 쿠버네티스 인프라를 관리하고 운영하는 경우, 이러한 간접 비용은 전체 쿠버네티스 지출의 주요 부분이 될 수 있다. 쿠버네티스 관리 및 유지 관리 작업에는 다음이 포함된다.
• 프로덕션 및 비프로덕션 환경을 위한 새로운 쿠버네티스 클러스터 만들기
• 클러스터 수준에서 필요한 추가 애드온 배포
• 클러스터에 필요한 보안 정책 구성
• 로그 및 모니터링 설정
• 최종 사용자를 위한 쿠버네티스 RBAC 설정
• 애플리케이션 배포
• 쿠버네티스 버전 업그레이드 수행
• 애드온 버전 업그레이드 수행
• 재해 복구를 위한 백업 및 복원 설정
• 인프라 문제 해결 및 문제 해결
위의 작업 외에도 쿠버네티스 SRE, 운영 및 플랫폼 팀은 인프라를 관리하고 유지 관리하기 위해 많은 다른 활동을 수행한다. 이러한 작업을 수동으로 수행하면 조직에 막대한 운영 비용이 발생할 수 있다. 이러한 작업을 자동화하면 비용을 크게 줄일 수 있을 뿐만 아니라 개발자 경험을 개선하고 제품 제공 시간을 단축할 수 있다.
많은 쿠버네티스 운영 플랫폼이 쿠버네티스 인프라 관리를 위한 턴키 자동화를 제공한다. 사내에서 자동화를 구축하는 것은 매우 비용이 많이 들 수 있으므로, 쿠버네티스 인프라를 관리하고 유지하려면 이러한 플랫폼을 살펴보는 것이 좋다.
별도의 쿠버네티스 비용 관리 도구 사용
복잡성과 미묘한 차이를 고려한다면, 쿠버네티스 비용 관리를 위해 특별히 제작된 서드파티 오픈소스 또는 상용 도구를 활용하는 것이 필수적이다. 이러한 도구는 다음과 같은 기능을 제공해야 한다.
• 클러스터, 팀, 사업부서, 애플리케이션 및 환경 전반의 모든 쿠버네티스 비용에 대한 통합 보기
• 네임스페이스, 파드, 라벨 등에 따른 비용 메트릭에 대한 세분화된 가시성
• 팀 간에 비용을 배분하기 위한 핀옵스(FinOps) 팀의 차지백(Chargeback) 및 비용 분담
• 미래 비용을 예측하기 위한 메트릭의 장기 보존
• 각 팀에 해당하는 비용 인사이트를 제공하는 통합 RBAC
기본 쿠버네티스 비용 관리 도구를 사용하여 적절한 예산 임계값, 지불 거절 그룹 및 기타 비용 제어 정책을 구성할 수 있다.
비용 관리는 성공적인 쿠버네티스 배포를 위한 중요한 요소이다. 기업은 비용 관리 전략을 개발하는 데 상당한 시간과 주의를 기울여야 한다. 쿠버네티스의 본질적인 복잡성으로 인해 쿠버네티스에 특화된 비용 관리 솔루션을 사용하여 쿠버네티스에 특정한 사용 사례를 처리해야 한다.
적절한 크기의 인스턴스를 선택하는 것부터 쿠버네티스 리소스 사용량 및 비용을 세부적으로 모니터링하는 것까지, 이 문서에 설명된 모범 사례를 따르면 비용을 효과적으로 관리할 수 있다. 전용 쿠버네티스 비용 관리 툴을 사용하여 비용에 대한 가시성을 제공하고 필요한 재무 거버넌스를 수립하여 핀옵스(FinOps) 팀이 조직 전체에 적절한 비용 제어를 할 수 있도록 도움을 줄 수 있다.
* Hemanth Kavuluru는 쿠버네티스 운영 플랫폼 공급사인 라파이 시스템즈의 공동 설립자이자 SVP다. dl-ciokorea@foundryco.com