본문 바로가기
엑셈 경쟁력/엑.기.스

엑기스 | 쿠버네티스 애플리케이션을 관리하는 3가지 도구

by EXEM 2020. 1. 10.






Kubernetes Tools


처음 Kubernetes를 접해서 사용하면 Docker와 Kubernetes가 주는 자동화로 인해 신세계를 경험하게 됩니다. 

이렇게 Kubernetes의 세계에 빠져들고 열심히 활용하다 보면 kubernetes만으로는 해소하지 못하는 불편함들이 많이 있습니다. 

따라서 이런 불편함을 해소시켜주는 Tool들도 계속해서 개발되고 발전하고 있습니다. 


이 글로는 모든 Kubernetes의 Tool들을 소개할 수 없지만, 

최근에 직접 구축하고 사용하면서 업무에 도움이 된 Tool들에 대해서 간략하게 소개시켜 드리려고 합니다. 




1. Helm


Kubernetes Application을 개발하고, 관리하다보면 어느새 산더미처럼 쌓여있는 yaml 파일들을 볼 수 있습니다. 

(ex. deployment.yaml , service.yaml, configmap.yaml, …) 


먼지처럼 쌓여가는 리소스 파일(yaml)들과  여러 사람들의 손을 거치면서 나오는 Deployment와 Pod들을 손쉽게 관리할 수는 없을까요?

이러한 고민을 한번에 덜어줄 기술이 바로 Helm 입니다.


# yaml

JSON, XML 과 같이 Data를 표현하는 형식으로 Kubernetes 에서 사용하는 ObjectSpec 입니다. 

(JSON도 가능하지만 대부분 yaml 사용)


Helm은 Kubernetes의 복잡한 응용 프로그램들의 관리를 도와주는 도구입니다. 

Kubernetes 환경에서 사용할 리소스(ex: deployment, service, ingress, …)들을 Chart라고 불리는 format의 package 파일을 만들어 줍니다. 

이렇게 만들어진 Chart Package로 Kubernetes 환경에 Application의 배포 및 관리를 손쉽게 할 수 있습니다. 

(Helm Chart를 사용한 Application 배포는 아래 3.Kubeapps에서 다루도록 하겠습니다.)


또한 Helm의 장점은 여기서 끝이 아닙니다.

기존 Kubernetes에서 생성하는 deployment 또는 pod, service 등에 들어가는 여러가지 설정 값들을 chart value를 통해 변경이 가능합니다. 

다시 말해 yaml에 입력되는 값이 변경이 되어도 새로운 yaml 파일을 만들어낼 필요가 없습니다. 


이후 value가 아닌 Kubernetes 리소스 (yaml) 자체를 수정하거나,

helm으로 구성한 Package 파일을 변경하고 싶은 경우에는 어떻게 할까요? 

답은 간단합니다. Chart Package 파일은 기본적으로 버전으로 관리되기 때문에 수정 후에 새로운 버전의 Package 파일을 만들면 됩니다.


그렇다면 chart package 파일도 결국에는 yaml 파일과 같이 결국에는 산더미처럼 쌓여있지 않을까요? 


이런 문제를 해결해주는 도구가 바로 ChartMuseum입니다.

# Chart
Helm에서 사용하는 Package format으로 예를 들어 “Helm create ChartName” 명령어를 사용하면아래 구조의 Chart가 생성됩니다.
이후 완성된 Chart를 “Helm package ChartName” 명령어를 통해 .tgz 확장자를 가진 Package 파일을 생성할 수 있습니다.


ChartName/            # 생성한 Chart의 이름으로 된 directory

  └  Chart.yaml          # Chart에 대한 정보

  └  values.yaml            # Chart에서 사용하는 기본 설정 값

  └  chart/            # 현재 Chart와 관련되어있는 Chart (directory)

  └  templates/            # Kubernetes 리소스 (yaml 파일) 들이 있는 directory




2. ChartMuseum


Source 파일을 관리해주는 Git, SVN 과 같은 도구가 있다면 Chart Package 파일을 관리해주는 도구도 있습니다. 

Helm에서는 Chart Package를 관리할 수 있는 ChartMuseum 이라는 오픈소스 Chart 저장소를 제공하고 있습니다. 

ChartMuseum은 앞서 소개한 Helm을 통해 나오는 .tgz 확장자를 가지는 Package 파일을 관리해주는 도구입니다. 또한

Git, SVN과 마찬가지로 생성한 Chart를 다른 사람들과 공유해서 사용하는게 가능합니다. 


이로써 Helm과 ChartMuseum을 통해 Kubernetes 관리를 효율적으로 할 수 있게 되었습니다. 

마지막으로 Helm Chart를 사용하여 Kubernetes에 Application의 배포 및 관리를 편리하게 만들어주는 

Kubeapps에 대해서 소개시켜 드리겠습니다.




3. Kubeapps


Kubeapps는 Kubernetes 클러스터에서 응용 프로그램을 배포 및 관리하기 위한 웹 기반 UI Tool 입니다. 

Kubeapps는 ChartMuseum과 연동하여 Helm으로 만든 Package 파일을 Kubeapps를 통해 UI로 제어할 수 있으며, 

Kubernetes에서 token(계정)을 발급받아 사용자 권한을 설정할 수 있습니다. 


또한 Application의 배포와 삭제, upgrade, rollback 등의 기능을 제공하며,

전 세계에서 제공하는 서비스를 사용할 수 있는데, 

kubernetes의 인기를 증명하기라도 하듯 엄청난 수의 Application들이 Helm으로 개발되어 등록되어 있는걸 확인할 수 있습니다. 


이를 통해 사용자는 kubeapps의 UI에서 자신이 개발한 helm package 외에도 

수많은 Kubernetes Application의 배포와 관리, 삭제 등의 제어가 가능합니다.




<Kubeapps Login 화면>



<Kubeapps 기본 Catalog list>



<tomcat helm chart>



<helm의 value.yaml를 사용하여 application을 배포하기 전 설정>



<Kubernetes에 tomcat application을 배포 후의 화면>







마무리


Helm, ChartMuseum, Kubeapps를 사용하여 Kubernetes Application을 관리하는 법을 소개하였습니다. 

위의 Tool을 적용하기 전에는 대부분의 Kubernetes 관리가 console에서 진행되었고, 일부 사용자만이 Kubernetes를 활용하였습니다.

하지만 최근에는 UI로 진행하면서

사용자들이 Kubernetes에 쉽게 접근하여 Application을 배포 및 관리하고 사용하면서 Kubernetes의 장점을 활용하고 있습니다. 


위에서 소개한 tool 외에도 Kubernetes tools에는 Keel, Draft 등 유명한 Tool 들도 많이 존재합니다. 

하지만 무조건 Kubernetes의 tool을 적용하는 것이 정답은 아닙니다. 


지금 이 순간, 개선점을 찾아서 발전시켜 나가는 자세가 가장 중요하지 않을까요? 




Change before you have to (변화해라. 억지로 변화해야 할 상황이 오기 전에.)

-Jack Welch










기고 | MFJ-데몬팀 박세훈

편집 | 사업기획팀 박예영






댓글