이 특정 블로그에서는 Volterra가 사용자가 애플리케이션과 인프라를 함대처럼 운영하는 데 어떻게 도움이 되는지 설명합니다. 우리의 제어 평면 기반 접근 방식이 어떻게 대규모 앱 클러스터의 운영을 용이하게 하는지 설명하고 이를 Google Anthos, Azure Arc, Rancher 등과 같은 다른 다중 클러스터 관리 평면 접근 방식과 비교해 보겠습니다.
이제 여러분은 우리가 단지 마케팅 전략을 구사하고 다중 클러스터 관리를 함대 운영이라고 부르는 게 아닐까 하고 궁금해하고 있을 겁니다. 다중 클러스터 관리와 차량 운영 접근 방식은 서로 다른 사용 사례를 다루며 아키텍처가 근본적으로 다릅니다. 다중 클러스터 방식은 클러스터가 비교적 적고 사용자가 일관된 운영 모델을 사용하여 이러한 인프라 클러스터를 관리하려는 시나리오를 해결하도록 설계되었습니다. 반면, 플릿 방식은 대규모 클러스터(예: 로봇, 자동차, 산업용 게이트웨이, 수십 개의 퍼블릭 클라우드 지역 내의 K8s 클러스터 등)가 있고 사용자가 이러한 대규모 클러스터에 동일한 애플리케이션과 네트워크/보안을 배포하려는 시나리오를 해결하도록 설계되었습니다. 다음 두 섹션에서는 다중 클러스터와 함대 운영 방식을 더 자세히 설명하고 비교합니다.
다중 클러스터 관리 방식은 단일 팀이 운영하는 클러스터가 비교적 적은 경우의 사용 사례를 처리하도록 설계되었습니다. 이러한 시나리오의 예로는 폭발 반경을 줄이기 위해 몇 개의 가용성 영역에 걸쳐 10개의 클러스터를 배치하는 것이 있습니다. 마찬가지로, 사용자는 규제 요구 사항을 충족하기 위해 몇몇 지역에 걸쳐 여러 클러스터를 두는 것을 선택할 수 있습니다.
다음 두 가지 예는 다중 클러스터 솔루션이 (높은 수준에서) 작동하는 방식을 강조합니다.
그림 1에 표시된 것처럼 Rancher의 멀티 클러스터 접근 방식을 사용하여 애플리케이션 배포의 예를 살펴보겠습니다. 다중 클러스터 방식에서는 고객이 애플리케이션을 배포할 대상 사이트를 하나씩 선택합니다. 클러스터가 여러 개 있는 경우 대상 사이트를 하나씩 선택하는 이러한 접근 방식이 효과적입니다. 하지만 이 접근 방식은 수천 개의 클러스터를 위해 설계된 것이 아닙니다.
그림 2는 Rancher를 예로 들어 다중 클러스터 방식에서 관찰성이 어떻게 작동하는지 보여줍니다. 다중 클러스터 방식에서 고객은 각 클러스터를 하나씩 두 번 클릭하여 배포된 Pod 상태, CPU 및 메모리 리소스 사용률을 확인해야 합니다. 대상 사이트를 하나씩 관찰하는 이러한 접근 방식은 소수의 클러스터에는 적합하지만, 많은 수의 클러스터를 관리하는 데는 적합하지 않습니다.
클러스터 1:
클러스터 2:
첫 번째 예에서 설명한 문제를 해결하는 확실한 방법은 각 클러스터에 대해 작업을 반복하는 일종의 자동화를 작성하는 것입니다. 예를 들어, 새 클러스터가 추가될 때마다 스크립트는 다음 작업을 수행하여 새 애플리케이션(예: checkoutservice)을 배포할 수 있습니다.
KUBECONFIG=~/Documents/kubeconfig/ce01-ashburn-aws-staging을 내보냅니다.
kubectl 적용 -f 체크아웃서비스.yaml
그러나 배포, 업그레이드, 정책, 리소스 예약 등 각 작업에 대해 자동화를 구축해야 합니다. 이러한 자동화는 여러 클러스터에서 개별 작업을 수행할 뿐만 아니라 오류 조건 처리도 처리해야 합니다. 또한 복잡한 시나리오가 있는 경우(예: 클러스터 하위 집합에 대한 베타 테스트, 모든 클러스터에 걸친 롤링 업그레이드) 자동화는 점점 더 복잡해집니다. 우리는 프로세스 초기부터 이를 깨닫고 이 모든 기능을 제공하는 분산 제어 평면을 구축했습니다. 이는 다음에 설명할 함대 운영 방식을 사용하여 이루어집니다.
차량 운영이란 고객이 차량에 대한 의도를 한 번만 선언적으로 정의하고, 시스템이 영향을 받는 사이트가 정의된 의도와 일치하도록 보장하는 책임을 맡는 것을 의미합니다. 의도의 예로는 애플리케이션 소프트웨어 버전, 인프라 소프트웨어 버전(예: 운영 체제 버전), 네트워크 정책, 보안 정책, 리소스 예약 등이 있습니다.
의도가 적용되면 시스템에서 사용자는 함대의 상태와 운영 상태를 볼 수 있습니다. 이는 사용자가 단일 창에서 모든 사이트의 인프라 및 애플리케이션 상태를 집계하여 볼 수 있으므로 고객 운영 팀의 운영 복잡성이 줄어든다는 것을 의미합니다. 사용자는 각 사이트나 클러스터를 하나하나 클릭해서 상태를 확인하고 자동화 도구를 작성해서 정보를 집계할 필요가 없습니다.
Volterra의 함대 운영 접근 방식은 세 가지 주요 구성 요소, 즉 세분화, 구성 및 관찰성으로 구성되어 있으며, 다음 섹션에서 이에 대해 설명합니다.
사용자는 개발, 테스트, 프로덕션 컴퓨팅 사이트 등 다양한 사이트를 혼합하여 사용하는 경우가 많습니다. 개발 워크로드는 개발 사이트에만 적용해야 하는 등의 조직 정책으로 인해 특정 사이트 세그먼트에 다른 워크로드를 배포해야 합니다. 우리는 사용자가 키와 값의 두 부분으로 구성된 라벨을 사용하여 사이트를 유연하게 태그할 수 있도록 허용합니다. 다음은 그 예입니다.
사이트에 태그가 지정되면 사용자는 레이블 키-값 조건을 사용하여 "가상 사이트"를 정의할 수 있습니다. 멀티 클라우드 시나리오에서 사용자는 자신의 사이트를 개발, 사전 프로덕션, 프로덕션 등으로 태그 지정할 수 있습니다. 다음 그림 3은 앞서 설명한 레이블-키 값을 사용하는 로봇 사용 사례의 예를 보여줍니다.
다음은 Volterra에서 사용자가 blend/go-sdk 구문을 사용하여 가상 사이트를 만들 수 있는 구성 스니펫입니다. 이 특정 예에서 개별 사이트는 레이블 키=ves.io/country 및 레이블 값 ves-io-jpn으로 태그되었습니다.
사용자는 사전에 자신의 플릿 세그먼트를 정의하고 프로비저닝 시점에 플릿에 포함될 사이트에 태그를 지정하는 운영 모델에 익숙합니다. 가상 사이트는 사용자의 기존 운영 모델과 완벽하게 일치합니다. 적절한 태그가 적용된 새 사이트가 제공되면 추가적인 수동 단계 없이 앞서 정의한 가상 사이트에 자동으로 포함됩니다. 또한 Volterra는 하드웨어 제조업체나 퍼블릭 클라우드 유형과 같은 사전 제공된 정보를 발견하여 시스템 태그를 미리 채웁니다. 사용자는 선택적으로 자동 검색된 태그를 사용하여 가상 사이트를 정의할 수 있습니다.
다음 세 가지 예를 통해 함대 구성 기능을 가장 잘 설명할 수 있습니다.
적절한 레이블이 지정된 새로운 사이트가 플릿에 추가되면, 새로운 사이트가 자동으로 가상 사이트(이 예에서는 jpn-all-sites)에 추가되고 플릿 구성(이 예에서는 Kuard 배포)이 새로 추가된 사이트에 자동으로 적용되어 운영팀의 부담을 줄이고 인적 오류를 없앱니다.
가상 사이트와 가상 쿠버네티스(vK8s)는 구성에만 사용되는 것이 아니라 플릿 내 분산 사이트의 상태를 집계하는 데에도 사용됩니다. 이것은 사용자가 모든 사이트의 상태를 하나하나 파악하고 정보를 집계하는 도구를 작성해야 하는 다른 솔루션과 비교했을 때 정말 강력한 도구입니다. 이 시스템은 모든 사이트의 상태를 단일 창에서 자동으로 집계하여 고객 운영 팀의 운영 복잡성을 줄여줍니다. 수집된 상태에는 애플리케이션 배포 상태, 사이트 상태, 애플리케이션 상태 등 여러 측면이 포함됩니다.
다음 스크린샷에 표시된 것처럼 사용자는 지도에서 모든 사이트의 상태를 빠르게 살펴볼 수 있습니다. 건강 점수가 75보다 크면(녹색), 40~75 사이이면(주황색), 40보다 작으면 빨간색으로 표시됩니다. 상태 점수는 연결성, 안정성, 보안, 성능(즉, 리소스 소비)을 종합한 점수입니다.
사용자는 사이트 상태와 함께 모든 사이트의 연결성을 집계하여 볼 수도 있습니다. 그림 10에서는 사이트를 Volterra 백본에 연결하는 각 링크의 연결 상태도 시각화하여 보여줍니다. 그림 11에서 보듯이, 사용자는 상태에 따라 성능이 낮은 링크를 클릭하여 요청 및 오류에 대한 자세한 통계를 확인하고 연결 문제를 해결할 수 있습니다.
다음으로, 사용자는 사이트 전체의 CPU 및 메모리 부하 분포를 통해 모든 사이트의 집계된 정보를 볼 수 있습니다. 이 정보는 IT 관리자나 사이트 관리자가 어떤 사이트가 많이 활용되고 있고 리소스가 고갈될 위험이 있는지 파악하는 데 유용합니다. 사이트 관리자는 리소스 소비가 임계값을 초과하면 알림을 받도록 설정할 수 있습니다. 이 스크린샷에서 사용자는 사이트의 절반이 사용 가능한 메모리의 75% 이상을 사용하고 있음을 확인할 수 있습니다. 이 정보를 얻기 위해 개별 사이트를 클릭할 필요도 없고, 추가 도구를 작성할 필요도 없습니다.
플릿 객체에 대한 지속적인 검증 기능은 POD 배포 상태(배포되었거나 진행 중인 POD 수 또는 실패한 POD 수)를 제공합니다. 배포가 완료되면 사용자는 Pod의 상태(실행 중인지, 이미지를 기다리고 있는지, 메모리가 부족한지 등)도 볼 수 있습니다.
또한, 사용자는 보안 정책의 효과에 대한 집계된 보기를 보고, 다음 스크린샷에서 볼 수 있듯이 모든 사이트에 대한 조회수를 얻을 수 있습니다.
Volterra의 플릿 운영 접근 방식이 3000개 클러스터의 플릿을 관리하는 데 어떻게 사용되었는지 자세히 알아보려면 Kubernetes 컨퍼런스에서 Volterra의 프레젠테이션을 시청 하고 Jakub Pavlik의 이 블로그를 읽어보세요.
"효과 시간"이라는 제목의 다음 블로그에서는 Volterra의 분산 제어 평면과 백본이 어떻게 매우 짧은 시간 내에 전 세계적으로 분산된 사이트에서 구성의 일관성을 전파하고 보장하는지 설명하겠습니다. 기대해주세요!