클러스터 상태 토폴로지
클러스터 상태 토폴로지 (Cluster state topology)
Nomad 웹 UI의 토폴로지 시각화를 통해 전체 클러스터의 할당과 클라이언트 상태를 한눈에 파악하는 방법을 알아봐요.
출처: 문서
본문
Nomad 클러스터가 성장할수록 할당과 클라이언트의 정확한 상태는 미스터리가 될 수 있어요. 대부분 이는 좋은 일이에요. Nomad가 개입 없이 조용히 워크로드를 스케줄링하고 있다는 뜻이니까요. 그러나 운영자로서 클러스터 내부에서 무슨 일이 일어나고 있는지 알고 싶어하는 것은 합리적이에요.
토폴로지 시각화는 전체 클러스터를 단일 뷰로 보여줘요. 예방적 유지보수를 수행하는 데 도움이 되고, 클러스터의 특정한 동작을 이해하는 데도 도움을 줘요.
사전 요구 사항
이 튜토리얼은 Nomad에 대한 기본 지식을 가정해요. 하나 이상의 작업이 실행 중인 기존 클러스터에 접근할 수 있어야 해요.
이 가이드를 위해 필요한 것들은 다음과 같아요.
- 활성화된 Nomad >=1.0.0 클러스터
- 클러스터 웹 UI에 대한 접근
- 하나 이상의 네임스페이스에 대한 읽기 권한
토폴로지 시각화로 이동하기
웹 UI의 왼쪽 전역 내비게이션에는 클러스터 섹션 아래에 Topology 링크가 있어요. 이 링크를 클릭하면 토폴로지 시각화로 이동해요.
시각화의 구성 요소
왼쪽 정보 패널에는 클러스터의 집계 통계가 포함돼 있어요. 여기에는 Nomad에 사용 가능한 메모리와 CPU(MHz 단위)의 총합이 포함돼요. 메모리와 CPU의 백분율은 각 리소스가 얼마나 예약되었는지를 알려줘요. 현재 사용되는 양이 아니라요. 예를 들어, Docker 컨테이너가 현재 30MiB 메모리를 사용 중이지만 작업 명세에서 500MiB가 필요하다고 선언했다면, 토폴로지 시각화는 이 할당을 500MiB로 계산해요.
이 집계 메트릭들은 대략적인 규모 감각을 제공하고 즉각적인 예측 질문에 답할 수 있게 해줘요. 현재 클러스터가 총 200GiB 메모리의 80% 용량에 있고 내년에 서비스가 계속 성장할 것임을 안다면, 클러스터의 용량도 성장해야 한다고 결론 내릴 수 있어요.
집계된 남은 리소스가 작업에 필요한 것보다 적다고 해서 할당을 위한 공간이 있다고 가정하지 않도록 주의해요. 리소스는 집계되지만 할당은 단일 클라이언트에 배치되어야 하므로, 어떤 클라이언트에도 할당을 위한 공간이 없을 수 있어요. 클러스터 전체에 1500MHz의 CPU가 있지만 클라이언트별로 500MHz만 있다면, 600MHz의 CPU가 필요한 태스크는 배치될 수 없어요.
주 시각화는 모든 데이터 센터와 클라이언트를 정리하고 할당에 초점을 맞춰요.
가장 바깥쪽 섹션은 데이터 센터를 나타내요(1). 각 섹션은 데이터 센터 이름, 용량, 상태로 라벨링돼요. 클라이언트는 각자의 데이터 센터 내에 렌더링돼요. 클라이언트도 이름, 용량, 상태로 라벨링돼요(2). 여기에는 스케줄링 적격성과 드레인 상태의 아이콘 표시기도 포함돼요(3).
전체 플릿의 클라이언트는 용량에 따라 세로 크기가 결정돼요. 총 용량이 더 큰 클라이언트가 더 키가 커요. 이렇게 하면 클러스터를 훑어보기가 더 쉬워져요.
각 클라이언트 컨테이너 안에는 CPU와 메모리라는 두 개의 기본 스케줄링 단위에 대한 행이 하나씩 있어요. 각 행에는 해당 클라이언트의 각 할당이 예약된 리소스 양에 비례해 크기가 조정되어 포함돼요(4). 총 32GiB를 가진 클라이언트에서 8GiB 메모리를 필요로 하는 태스크 그룹에 대한 할당은 클라이언트 행의 25%를 차지해요.
시각화와 상호작용하기
토폴로지 시각화는 단일 뷰에서 가능한 많은 정보를 제시하도록 설계됐어요. 특정 요소 위에 마우스를 올리거나 클릭하면 더 많은 정보가 확장돼요.
할당 위에 마우스를 올리면 특정 할당 예약 요구 사항과 할당이 속한 작업을 포함한 빠른 세부 정보를 제공하는 툴팁이 열려요.
할당을 클릭하면 할당이 선택되고 정보 패널의 클러스터 집계 통계가 할당 정보로 바뀌어요. 여기에는 할당, 할당이 속한 작업, 할당이 실행 중인 클라이언트, 시간에 따른 현재 리소스 사용률에 대한 링크가 포함돼요.
패널에 표시된 정보 외에도 할당이 선택되면 같은 태스크 그룹과 작업의 모든 할당 간의 연관 관계가 그려져요. 이는 단일 태스크 그룹이 클러스터 전체에 어떻게 분산되는지를 전달하는 데 도움을 줘요.
대규모 클러스터의 경우 토폴로지 시각화는 클라이언트 라벨을 숨겨요. 이 경우 클라이언트를 클릭하면 정보 패널에서 클라이언트 세부 정보가 확장돼요.
토폴로지 시각화 효과적으로 사용하기
토폴로지 시각화는 개방형 탐색 도구로 의도됐어요. 시각화가 특히 잘 맞는 탐색 예시를 몇 가지 소개할게요.
과도한 클라이언트 프로비저닝 식별
때로는 클라이언트가 애플리케이션 크기와 배치와는 별도로 프로비저닝되곤 해요. 이로 인해 기대하는 클라이언트 요구 사항과 실제 요구 사항 사이에 차이가 생길 수 있어요. 할당이 없는 클라이언트는 여전히 비용이 들어요.
이는 토폴로지 시각화로 빠르게 감지할 수 있어요. 빈 클라이언트는 빨간색으로 강조되고 empty로 라벨링돼요.
이런 문제가 있나요? 수평 클러스터 자동 확장을 사용하는 것을 고려해 보세요.
잠재적으로 위험하거나 불안정한 할당 분포 발견하기
Nomad는 작업 명세에 선언된 요구 사항과 제약 조건에 따라 할당을 자동으로 배치해요. 사람의 실수나 알려지지 않은 주의 사항 때문에 작업에 제약 조건이 누락되는 것은 드문 일이 아니에요. 이런 오류는 태스크가 시작될 때 드러나는 경우가 많지만, 때로는 오류가 보이지 않고 특이한 오류율로만 표면화되기도 해요.
예를 들어, 다섯 개의 할당이 있는 Service A를 상상해 봐요. 네 개는 West 데이터 센터에 있고 하나는 East 데이터 센터에 있어요. Service A는 Service B와 통신해야 하지만, 네트워킹 규칙 때문에 데이터 센터 경계를 넘어 통신할 수 없어요. Service B가 West 데이터 센터에 있다면, Service A 트래픽의 80%(균일 분포 가정)는 의도대로 동작하지만 나머지 20%는 오류가 날 거예요. 또는 오류보다 더 나쁘게: 조용히 잘못 동작할 수도 있어요.
작업 명세의 데이터 센터 제약 조건으로 쉽게 해결할 수 있지만, 먼저 문제를 식별해야 해요. 토폴로지 시각화가 Service A의 모든 할당을 연관시키므로 빠르게 발견할 수 있어요.
시끄러운 이웃(noisy neighbor) 위험 찾기
기본적으로 Nomad의 태스크는 소프트 CPU 제한을 가져요. 이는 태스크가 할당된 CPU를 가끔 초과하면서도 단일 클라이언트에서 할당의 효율적인 빈-패킹을 허용하게 해줘요.
단일 클라이언트의 많은 할당이 CPU 소프트 제한을 초과하거나, 또는 하나의 할당이 크게 초과해서 다른 할당이 CPU를 굶을 수 있어요. 이로 인해 성능 저하와 테스트되지 않은 경쟁 조건이나 타임아웃으로 인한 비정상 오류가 발생할 수 있어요. 이 경우 문제가 되는 할당은 스케줄링된 클라이언트의 외부 환경 때문에만 문제가 되는 거예요.
토폴로지 시각화는 중요한 할당이 밀집된 클라이언트에서 다른 많은 할당과 함께 스케줄링될 때 이를 아주 명확하게 보여줘요. 이것만으로 시끄러운 이웃 문제가 있다는 뜻은 아니지만, 방어적으로 작업 명세를 수정할 충분한 근거가 될 수 있어요. 더 많은 CPU 여유(headroom)나 제약 조건을 추가하면 서비스를 안정화하는 데 도움이 될 수 있어요.
다음 단계
토폴로지 시각화는 Nomad 사용법을 배우고 특정 시점의 클러스터를 이해하는 데 유용한 도구예요. 이 시각화는 과거 할당 예약 정보를 보여주지 않아요.
더 깊은 사용률과 과거 데이터를 얻으려면 Nomad의 텔레메트리 데이터를 사용해 모니터링 스택을 구축해야 해요. 토폴로지 시각화는 특정 요구 사항에 맞는 운영 도구를 구축할 때 자체 사용자 지정 대시보드에 정보를 제공할 수 있어요.