'쿠버네티스 길들이기' 전방위 쿠버네티스 배치 간소화 프로젝트 19선

InfoWorld
쿠버네티스는 컨테이너화된 애플리케이션을 대규모로 배치하기 위한 표준적인 방법으로 확고하게 자리를 잡았다. 쿠버네티스가 복잡하게 얽힌 컨테이너 배포를 간소화하는 데 도움이 된다고 하는데, 그렇다면 쿠버네티스 자체를 간소화하는 데 도움이 되는 툴은 무엇일까? 쿠버네티스 역시 복잡하게 얽히고 관리가 어려워질 수 있다.

ⓒ GettyImagesBank

물론 쿠버네티스가 앞으로 더 성장하고 발전함에 따라 내부적으로도 거친 부분이 다듬어질 것이다. 그러나 쿠버네티스를 사용한 작업이 더 쉬워질 때까지 기다리기보다는 스스로 솔루션을 만들어 프로덕션의 쿠버네티스와 관련된 다양한 일반적인 문제에 대처하는 사람들도 있다.

편리한 명령줄 사용부터 애플리케이션 배포 구문 간소화, AWS 통합, 그리고 여러 클러스터에 대한 가시성에 이르기까지 다양한 방법으로 쿠버네티스를 간소화하는 19가지 프로젝트를 소개한다.
 

비트나미 캐빈(Bitnami Cabin): iOS와 안드로이드용 쿠버네티스 대시보드

현대적인 웹 애플리케이션 또는 서비스라면 모바일 인터페이스는 필수다. 캐빈은 쿠버네티스 관리자에게 iOS 또는 안드로이드 스마트폰에서 액세스할 수 있는 쿠버네티스 대시보드 버전을 제공한다. 헬름 차트, 배치 확장, 팟 로그 읽기, 쿠버네티스로 호스팅되는 웹 기반 앱 액세스 등 정식 쿠버네티스 대시보드 기능 중 상당수를 캐빈에서 실행할 수 있다.
 

골드핑거(Goldpinger): 쿠버네티스 클러스터 시각화

사람은 시각적 존재다. 그래프와 차트는 전체적인 그림을 보다 쉽게 이해할 수 있게 해준다. 쿠버네티스 클러스터의 범위와 복잡함을 감안하면 가능한 시각적 도움을 모두 이용하는 것이 좋다.

이름도 재미있는 골드핑거는 블룸버그(Bloomberg)의 기술 사업부가 오픈소스화한 간단한 툴로, 쿠버네티스 클러스터 내에서 실행되면서 노드 간 관계를 인터랙티브한 지도로 표시한다. 건강한 노드는 초록색으로, 건강하지 않은 노드는 빨간색으로 표시된다. 노드를 클릭하면 세부 정보를 볼 수 있다. 스웨거(Swagger)로 API를 맞춤설정해서 부가적인 보고 기능과 메트릭 및 기타 통합을 이용할 수 있다.
 

켓지(Kedge): 간결한 쿠버네티스 배치 정의

쿠버네티스에 대한 가장 흔한 불만 중 하나는 매니페스트, 즉 애플리케이션 정의의 복잡함과 장황함이다. 작성하기도, 유지하기도 괴롭다. 사람들이 서드파티 툴을 찾는 것도 당연하다. 켓지는 더 단순하고 간결한 구문을 제공한다. 켓지에 쿠버네티스 정의 파일의 단순 버전을 제공하면 켓지가 이 단순한 정의를 완전한 쿠버네티스 정의로 확장해준다. 다음에 소개하는 코키 쇼트(Koki Short)와 달리 켓지는 선언 파일에 모듈형 구문을 사용하지 않고, 단순히 애플리케이션 정의를 일반적인 바로가기로 축약하는 기능을 한다.
 

코키 쇼트(Koki Short): 관리 가능한 쿠버네티스 매니페스트

코키 쇼트는 켓지처럼 쿠버네티스에서 애플리케이션 정의(매니페스트)의 작동 방식을 개선하고자 하는 프로젝트다. 켓지 정의와 마찬가지로 쇼트 정의도 쿠버네티스 팟 설명에 축약 구문을 사용한다. 이 구문을 정식 구문으로 변환할 수 있다. 켓지와 다른 점은 쇼트 정의는 모듈형이므로 한 쇼트 선언의 세부 내용을 다른 선언에서 재사용할 수 있다는 점이다. 따라서 공통 요소가 있는 다수의 팟을 간결하게 정의할 수 있다.
 

캅스(Kops): 쿠버네티스 클러스터를 위한 명령줄 작업

쿠버네티스 팀이 개발한 캅스는 명령줄로 쿠버네티스 클러스터를 관리할 수 있게 해주는 툴이다. AWS와 GCE에서 실행되는 클러스터를 지원하며 VM웨어 v스피어를 비롯한 다른 환경도 현재 작업 중이다. 캅스는 설정 및 해체 프로세스 자동화 외에 다른 종류의 자동화에도 유용하다. 예를 들어 테라폼(Terraform) 구성을 생성하므로 테라폼을 사용한 클러스터 재배포가 가능하다.
 

큐브박스(Kubebox): 쿠버네티스용 터미널 콘솔

쿠버네티스용 고급 터미널 콘솔인 큐브박스는 쿠버네티스와 그 API를 위한 단순한 셸 확장 이상으로, 메모리와 CPU 사용량, 팟 목록, 실행 중인 로그, 구성 편집기를 보여주는 인터랙티브 디스플레이를 제공한다. 가장 좋은 점은 리눅스, 윈도우, 맥OS용 독립 애플리케이션으로 제공된다는 것이다.
 

큐브DB(KubeDB): 쿠버네티스에서 프로덕션 데이터베이스 실행

쿠버네티스에서 데이터베이스를 매끄럽게 실행하기는 항상 어렵다. 네이티브 쿠버네티스 기능으로는 데이터베이스와 관련된 상당수 문제에 직접 대처할 수 없다.

관리자는 큐브DB를 사용해서 데이터베이스 관리를 위한 쿠버네티스 작업자를 생성할 수 있다. 백업 실행, 복제, 모니터링, 스냅샷, 선언적 데이터베이스 생성 등이 모두 포함된다. 클러스터링도 지원되지만 일부 데이터베이스에 한해서다. 예를 들어 포스트그레SQL에서는 가능하지만 마이SQL에서는 (아직) 안 된다.
 

큐브몽키(Kube-monkey): 쿠버네티스용 카오스 몽키

가장 효과적인 시스템 스트레스 테스트 방법 중 하나는 이것저것을 무작위로 망가뜨리는 것이다. 이 개념을 바탕으로 설계된 툴이 바로 넷플릭스의 카오스 엔지니어링 툴인 카오스 몽키(Chaos Monkey)다. 카오스 몽키는 프로덕션에서 실행 중인 가상머신과 컨테이너를 무작위로 중단시켜 개발자가 더욱 탄력적인 시스템을 구축하도록 “독려”한다. 큐브몽키는 이와 동일한 개념을 쿠버네티스 클러스터 스트레스 테스트에 구현해서, 사용자가 지정하는 클러스터의 팟을 무작위로 중단시킨다. 특정 시간대 내에서 작동하도록 설정할 수 있다.
 

큐브-ps1(Kube-ps1): 스마트 쿠버네티스 명령 프롬프트

이름만 보고 쿠버네티스용 1세대 소니 플레이스테이션 에뮬레이터라고 생각하기 쉽지만, (유감스럽게도) 아니다. 큐브-ps1은 간단한 배시(Bash) 추가 기능으로, 프롬프트에서 현재 쿠버네티스 컨텍스트와 네임스페이스를 보여준다. 큐브-셸(Kube-shell)은 이 기능 외에도 다른 많은 기능을 제공하지만 스마트한 프롬프트만으로 충분하다면 오버헤드가 거의 없는 큐브-ps1이 좋다.
 

큐브-프롬프트(Kube-prompt): 인터랙티브 쿠버네티스 클라이언트

미니멀하면서도 유용한 또 다른 쿠버네티스 CLI 모드인 큐브-프롬프트를 사용하면 일종의 쿠버네티스 클라이언트 인터랙티브 명령 세션에 들어갈 수 있다. 큐브-프롬프트는 모든 명령 앞에 kubectl을 입력할 필요를 없애주고 각 명령의 컨텍스트 정보를 사용한 자동 완성 기능을 제공한다.     
 

큐브-셸(Kube-shell): 쿠버네티스 CLI를 위한 셸

쿠버네티스 명령줄은 강력하지만 모든 명령줄 앱이 그렇듯이 때로는 옵션을 살펴보고 선택하는 과정이 무척 번거롭다. 큐브-셸은 표준 쿠버네티스 명령줄을 포장해서 쿠버네티스 서버가 제공하는 제안(예를 들어 서비스 이름 제안)을 포함한 일반적인 명령의 자동 완성 및 자동 제안 기능이 포함된 통합 셸을 제공한다. 또한 더욱 강력한 명령 이력 기능, vi 스타일의 편집 모드, 사용자와 네임스페이스, 클러스터 및 기타 설치 관련 세부사항에 대한 실행 컨텍스트 정보도 제공한다.
 

큐브스파이(Kubespy): 쿠버네티스 리소스 실시간 모니터링

풀루미(Pulumi)의 큐브스파이는 쿠버네티스 리소스의 변경을 실시간으로 추적해서 현재 상황에 대한 일종의 텍스트 뷰 대시보드를 제공하는 진단 툴이다. 예를 들어 팟 부팅 중 팟 정의가 Etcd에 작성되고 팟이 노드에서 실행되도록 예약되고 노드의 큐블릿이 팟을 생성하고 최종적으로 팟이 실행 중으로 표시되기까지 팟 상태의 변화를 관찰할 수 있다. 큐브스파이는 독립형 바이너리, 또는 Kubectl 플러그인으로 실행할 수 있다.
 

AWS용 쿠버네티스 인그레스 컨트롤러(Ingress Controller)

쿠버네티스는 인그레스(Ingress)라는 서비스를 통해 클러스터에 외부 로드밸런싱 및 네트워크 서비스를 제공한다. 아마존 웹 서비스는 로드밸런싱 기능을 제공하지만 이러한 서비스를 쿠버네티스의 동일한 기능과 자동으로 결합하지는 않는다. AWS용 쿠버네티스 인그레스 컨트롤러는 이 간극을 메우는 역할을 한다. 인그레스 컨트롤러는 클러스터의 각 인그레스 개체를 위한 AWS 리소스를 자동으로 관리하고, 새 인그레스 리소스를 위한 로드 밸런서를 생성하고 제거된 리소스의 로드 밸런서를 삭제하고 AWS 클라우드포메이션(CloudFormation)을 사용해 클러스터의 일관적인 상태를 보장한다. 또한 SSL 인증서, EC2 자동 확장 그룹(Auto Scaling Group)과 같은 클러스터에 사용되는 다른 요소를 자동으로 관리한다.
 

큐브-옵스-뷰(Kube-ops-view): 여러 쿠버네티스 클러스터를 위한 대시보드

쿠버네티스에는 전반적인 모니터링을 위한 유용한 대시보드가 있지만, 쿠버네티스 커뮤니티에는 쿠버네티스 관리자를 위해 유용하게 데이터를 표시하는 다른 방법에 대한 실험이 활발하게 이뤄지고 있다. 큐브-옵스-뷰는 이러한 실험 중 하나로, 여러 쿠버네티스 클러스터에 대한 정보를 일목요연하게, 그래픽으로 표시한다. 이 툴에서 클러스터 전체의 CPU와 메모리 사용량, 팟 상태를 한눈에 확인할 수 있다. 단, 명령 호출은 허용되지 않는다. 이 툴은 엄격히 시각화만을 위한 툴이다. 그러나 큐브-옵스-뷰가 제공하는 시각화는 눈에 잘 들어오고 효율적이다. 운영 센터의 벽면 모니터로 보기에 안성맞춤이다.
 

스캐폴드(Skaffold): 쿠버네티스용 반복 개발

스캐폴드는 구글 자체 쿠버네티스 툴 가운데 하나로, 쿠버네티스 앱에서 지속적 개발을 수행하기 위한 툴이다. 소스 코드를 변경하면 스캐폴드가 자동으로 이를 탐지하고 빌드 및 배포 프로세스를 트리거하고 오류가 감지되면 사용자에게 경고한다. 스캐폴드는 클라이언트 측에서 실행된다. 기존 CI/CD 파이프라인에서 사용할 수 있으며 구글 바젤(Bazel)을 비롯한 소수의 외부 빌드 툴과 통합된다.
 

스턴(Stern)큐브테일(Kubetail): 쿠버네티스를 위한 로그 테일링

스턴은 쿠버네티스의 팟과 컨테이너에서 색 구분 출력(tail 명령에 따라)을 생성할 수 있게 해준다. 여러 리소스의 모든 출력을 일목요연하게 볼 수 있는 하나의 스트림으로 신속하게 연결하는 방법이다. 또한 색으로 구분되므로 스트림을 구별하기도 쉽다.

큐브테일도 이와 비슷하게 여러 팟의 로그를 하나의 스트림으로 모으고 각 팟과 컨테이너에 서로 다른 색을 적용한다. 그러나 큐브테일은 배시 스크립트이므로 셸만 있으면 된다.
 

테레사(Teresa): 쿠버네티스의 간단한 PaaS

테레사는 쿠버네티스에서 간단한 PaaS로 실행되는 애플리케이션 배포 시스템이다. 사용자는 팀으로 구성되어 자신에게 속한 애플리케이션을 배포 및 관리할 수 있다. 따라서 특정 애플리케이션에서 신뢰할 수 있는 사람들이 쿠버네티스를 직접 다룰 필요 없이 좀더 쉽게 작업할 수 있다.
 

틸트(Tilt): 쿠버네티스 클러스터의 스트림 컨테이너 업데이트

윈드밀 엔지니어링(Windmill Engineering)에서 개발한 틸트는 도커파일(Dockerfile)의 변경을 실시간으로 모니터링한 다음 쿠버네티스 클러스터의 적절한 컨테이너에 증분적으로 이러한 변경을 배포한다. 핵심은 개발자가 도커파일을 업데이트하는 간단한 방법으로 라이브 클러스터를 실시간으로 업데이트할 수 있게 해준다는 것이다. 틸트는 클러스터 내에서 빌드를 수행하므로 소스 코드만 변경으로 푸시된다.  editor@itworld.co.kr