포스팅 개요
이번 포스팅은 kubernetes(쿠버네티스)의 package managing인 helm에 대해서 알아봅니다. 흔히 helm chart라고도 불리우는 helm에 대해서 간략히 알아보고, 어떻게 사용하는지를 간단한 예제 즉, mysql example로 알아보겠습니다.
이 블로그를 작성하면서 참고한 자료는 아래와 같습니다.
포스팅 본문
개요에서 말씀드렸듯이 이번 포스팅은 kubernetes(쿠버네티스)의 helm에 대해 알아보는 포스팅입니다. 따라서, 먼저 helm이란 무엇인지 먼저 알아보겠습니다.
helm이란?
Docker가 나오면서 container 혁신이 이루어졌습니다. 그리고 그 container를 쉽게 관리하고 배포해주는 kubernetes가 나오게 되었죠. 즉, 일종의 container orchestration입니다. 그리고 이러한 kubernetes를 package로 해서 관리해주는 것이 바로 helm입니다.
일종의 Python에서 패키지를 관리하는 pip, Node.js에서의 npm의 역할이라고 보시면 되겠습니다.
그리고 helm을 조사하다보면 helm chart라는 용어가 많이 보입니다. helm chart란 또 무엇일까요?
helm chart란?
helm chart라는 것은 helm의 package format입니다. chart는 kubernetes를 설명하는 파일들의 집합이라고 보시면됩니다.
공식문서에도 같은 설명으로 나와있습니다. chart는 파일들, 그 속에 속해있는 폴더의 집합입니다. 그리고 폴더의 이름은 chart의 이름을 나타나게 되는데요. 위 예시처럼 만약, wordpress를 예시로 든다면 폴더 이름도 wordpress로 나오게 됩니다.
각 파일에 대한 간략한 설명은 다음과 같습니다.
- Chart.yaml : 해당 helm chart에 대한 정보가 담겨있습니다.
- values.yaml : 해당 helm chart에서 사용하는 각종 값들에 대한 정의가 담겨있습니다.
- chart 디렉토리 : 의존하는 chart에 대한 정보가 담겨있습니다.
- templates : kubernetes르 정의하는 metifest file이 정의되어 있는 폴더입니다.
- README.md : 사용자가 읽을 수 있는 README 파일
등이 있으며, 자세한 내용은 개요에 helm chart 링크를 걸어놓았으니 참고바랍니다.
이 외에도 repository, release 개념이 있는데요. 각 설명은 아래와 같습니다.
- repository : chart들이 공유되는 공간입니다. 일종의 docker hub같은? 개념이라고 보시면 될 것 같아요.
- release : kubernetes(쿠버네티스) 환경에서 동작되는 서비스들은 relase 버전이 존재합니다.
Chart - Repository - Release 관계를 정리하자면, helm chart repository에서 chart를 찾을 수 있으며 이 helm chart는 kubernetes를 설명하는 파일의 목록입니다. 그리고 설치할 때마다 release 버전이 생성됩니다.
helm 설치하기
그러면 이 helm은 어떻게 사용할까요? 먼저 설치가 필요하겠죠? 저는 MacOS 카탈리나 환경에서 설치를 진행했습니다. 설치는 다음과 같이 진행할 수 있습니다. (개요에 첨부한 url 중 맨 아래에 있는 quickstarter 페이지를 보면 자세한 설명이 나와있습니다.)
Mac 환경에서는 helm 설치는 정말 간단합니다. brew install helm 명렁어로 helm을 설치할 수 있습니다.
처음 설치 되었을 때는 helm search repo stable 명령어를 입력했을 때 아무것도 나오지 않습니다. 그리고 helm version을 입력하면 helm 버전을 확인할 수 있구요. 이제 helm에서 사용할 kubernetes를 가져오기 위해서 아래와 같은 명령어를 입력합니다.
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
해당 명령어를 입력하면 kubernetes 환경 중 stable한 환경을 이미 구축한 것들의 목록이 나오게 됩니다.
다시 한 번 helm search repo stable을 입력해봅니다.
그러면 위와 같은 목록들이 나오는 것을 확인할 수 있습니다.
helm은 이렇듯 kubernetes 환경을 이미 만들어놓은 repository가 존재하며, 이 repo를 이용해 이미 만들어진 kubernetes 환경을 구축할 수 있습니다.
helm을 이용한 kubernetes환경의 mysql example
그러면 helm을 이용해서 mysql을 kubernetes 환경에서 동작되도록 만들어보는 예제를 진행해보겠습니다.
먼저 stable 환경에서 mysql이 어떤 것이 있는지 확인해봅니다. helm search repo stable | grep mysql 명령어를 입력하면 mysql stable 버전이 나오는데요. 저는 여기서 stable/mysql을 사용해서 mysql을 kubernetes 환경에 설치해보도록 하겠습니다.
설치 방법은 굉장히 간단합니다. 아래와 같이 진행하면 됩니다.
helm install stable/mysql --generate-name 명령어를 입력하게 되면 stable/mysql chart를 이용해서 kubernetes 환경에 mysql을 배포하도록 합니다. 그리고 나면 위 명령어 창에서 보시는바와 같이 어떻게 하면 비밀번호를 얻을 수 있고, 실행할 수 있는지 여러 설명이 나오게 됩니다.
또한, helm을 이용해서 배포한 kubernetes 환경을 보고 싶으면 helm ls 명령어를 입력하면 볼 수 있습니다
지금은 mysql 하나만 동작시키고 있기 때문에 mysql만 나오고 있습니다.
또한, 실제 kubernetes 환경에서 동작이 되고 있는지 확인하고 싶으면 아래와 같이
kubectl get pods --all-namespaces 명령어를 입력해 확인할 수 있습니다.
또한, kubectl get svc 명령어로 해당 kubernetes의 IP, PORT 정보를 확인할 수 있는데요.
kubectl get svc 명령어를 입력하니 방금 만들어놓은 mysql 정보가 나오는 것을 확인할 수 있습니다. 해당 ip 정보와 port 정보를 기억해두어야 합니다. 이 정보를 사용해 해당 kubernetes 환경 mysql에 접속할 수 있기 때문입니다.
이제 helm으로 설치한 kubernetes mysql 환경에 접속해보려고 하는데요. 지금 설치만 하고 root 비밀번호를 알지 못하는 상황입니다.
아까 helm으로 mysql을 설치했을 때 설명이 나와있던 것 중 mysql root password를 받을 수 있는 명령어가 있었습니다. 제가 올린 사진에도 나오는데요. 그 명령어를 복사해서 명령어창에 붙여넣어봅니다.
그리고 echo를 이용해서 출력하면 저희가 설치한 kuberentes 환경의 mysql root 비밀번호를 알 수 있습니다.
자! 이제 저 정보를 이용해서 helm으로 설치한 쿠버네티스 mysql 환경에 접속해보죠. 먼저 port-forward(포트포워딩)을 해야합니다.
kubectl port-forward svc/mysql 7000:3306 명령어를 입력하면, 내 local pc의 7000포트는 kubernetes 환경의 mysql 3306 포트로 연결되도록 포워딩한다! 라는 명령어입니다. 이제 mysql에 접속해보죠.
해당 mysql에 접속하려면 -P ( 대문자 p입니다 ) 를 7000으로 지정해주어야 합니다. 또한, -h를 127.0.0.1로 지정해주어야 하죠.
mysql -h 127.0.0.1 -P 7000 -u root -p를 입력하면 호스트는 내 local pc를 지정하고 포트는 7000번으로 지정합니다. 그러면 내 로컬 pc 7000번 포트는 현재 helm으로 설치한 mysql kubernetes 환경에 접속하도록 되어있으니 mysql 접속이 되는 것을 확인할 수 있을겁니다.
또한, 위 처럼 mysql 환경에 들어가게 되면 아까 포트포워드 지정한 터미널에서 아래와 같이
connection 되었다는 로그도 찍히는 것을 확인할 수 있습니다.
helm으로 설치한 kubernetes 환경 삭제
이제 mysql을 잘 사용했습니다. 근데 더 이상 kubernetes 환경을 돌릴 이유가 없어질 경우(삭제가 필요할 경우)에는 삭제를 해야합니다. helm으로 설치한 kubernetes 환경 삭제는 매우 간단합니다. unistall 명령어만 입력하면 됩니다.
helm uninstall mysql 을 입력하면 helm으로 설치한 mysql kubernetes 환경이 삭제됩니다.
실제로 kubernetes 환경에서도 지워진 것을 확인할 수 있습니다.
포스팅 마무리
이번 포스팅에서는 kubernetes를 패키징화 하여 쉽게 관리하고 배포할 수 있는 helm에 대해서 알아보았습니다. helm을 사용하면 kubernetes 환경을 정말 쉽게 다룰 수 있는 장점이 있습니다.
부다 도움이 되시길 바랍니다. 감사합니다.
'Data Engineering 및 Infra' 카테고리의 다른 글
kubeflow pipeline AWS와 연동하기 - kubeflow pipeline example with titanic data (2) | 2020.05.23 |
---|---|
사용자 정의 kubernetes helm 생성 및 배포하기 - django helm으로 배포하기 (2) | 2020.04.19 |
kubeflow pipeline 사용해보기 - kubeflow pipeline example with iris data (22) | 2020.04.07 |
kubeflow 설치하기 - Machine Learning pipeline kubeflow install (14) | 2020.04.05 |
머신러닝 파이프라인이란? - ML Pipeline에 대하여 (6) | 2020.03.29 |