IT/Kubernetes

[Kubernetes] kubectx를 활용해서 멀티 클러스터를 관리하자

wookiist 2021. 6. 13. 11:39

Prologue

사내에서 사용하던 클러스터가 1개라 그동안은 멀티 클러스터 관리에 그다지 관심을 두지 않았습니다. 하지만 개발용 클러스터와 실사용 클러스터를 분리하고 제 로컬에 있는 데스크탑 클러스터까지 사용하게 되다보니 이제는 멀티 클러스터 관리의 필요성을 절실히 느끼게 됐는데요. 로컬에서 작업을 할 때 빈번히 클러스터의 전환이 필요했고 더불어 네임스페이스의 전환도 필요했습니다. 매번 -n blahblahblah 를 타이핑하는 건 수고로운 일이니까요. 오늘 포스트에서는 kubectx를 이용한 클러스터 간 전환을 간편하게 만들어보는 작업을 해보겠습니다.

kubectx

kubectx는 클러스터 간의 전환을 쉽고 빠르게 할 수 있게 해주는 플러그인입니다. v0.9.0 이전까지는 bash를 이용해 구현되었고, 이후부터는 Go로 짜여 있다고 합니다. 제 입장에선 뭔가 더 친근하게 느껴지네요!

https://github.com/ahmetb/kubectx/raw/master/img/kubectx-demo.gif
image source : github.com/ahmetb/kubectx

명령어는 굉장히 간단합니다.

kubectx 명령어를 수행하면, 현재 전환이 가능한 cluster context가 보입니다.

image

kubectx ${context_name} 을 수행하면 해당 cluster context로 전환됩니다.

image

kubectx - 를 수행하면, 직전의 cluster context로 전환됩니다.

image

만약 너무나 긴 cluster context 이름을 갖고 있다면, alias를 설정하는 것도 가능합니다.

$ kubectx eu=gke_ahmetb-samples-playground_europe-west1-b_dublin

하지만 이렇게 context를 한 곳에서 관리하려면 몇 가지 준비 작업이 필요합니다. 지금부터 알아보도록 하겠습니다.

KUBECONFIG 모아두기

Context와 Cluster 정보를 담고 있는 kubeconfig 파일을 한 곳으로 모아와야 합니다.

제 경우 각기 다른 클러스터에서 kubeconfig 파일을 옮겨와 ~/.kube/ 아래에 위치시켰습니다. 그리고 쉘 프로파일을 열어 이 위치를 등록해주었습니다. 저는 zsh 를 사용해서 ~/.zshrc 를 수정했습니다. zshrc의 가장 아래에 다음 내용을 추가해주세요.

export KUBECONFIG=$KUBECONFIG:$HOME/.kube/[KUBECONFIG_NAME1]:/$HOME/.kube/[KUBECONFIG_NAME2]

KUBECONFIG_NAME1, KUBECONFIG_NAME2은 본인의 CONFIG 이름으로 바꿔주면 됩니다. 이후 저장하고 나와 Shell을 재시작해줍시다.

KUBECTX 자동완성 설정하기

지금까지 따라 오셨다면 kubectx의 대부분 설정은 마무리 되었습니다. 하지만 아직 불편한 점이 하나 더 남았죠. 클러스터 이름을 매번 직접 쳐야 한다면 그 또한 수고로운 일이 될테니까요. 이번엔 kubectx 자동완성을 추가해보겠습니다. 저는 zsh 를 사용하기 때문에 아래 내용은 zsh 를 사용하신다는 가정 하에 작성하도록 하겠습니다. 나머지 쉘은 다음의 링크를 참조해주세요. (링크)

$ mkdir -p ~/.oh-my-zsh/completions
$ chmod -R 755 ~/.oh-my-zsh/completions
$ curl -o ~/.oh-my-zsh/completions/_kubens.zsh https://github.com/ahmetb/kubectx/blob/master/completion/kubectx.zsh

여기까지 마치셨다면 이제부턴 제대로 활용하실 시간입니다! 즐기세요! 🙂

의문점

이렇게 KUBECONFIG를 한 곳으로 모아두면, 해당 위치를 공격받았을 때, 전체 클러스터의 정보가 유출될 수도 있을텐데, 과연 이렇게 사용하는 것이 합리적이고 안전한 것인가에 대해 의문이 듭니다. 혹시라도 이에 관해 잘 아시는 분(혹은 조금이라도 아시는 분)이 있으시다면 꼭 댓글 부탁드립니다! 🥺🥺

마무리

여기까지 따라오시느라 고생이 많으셨습니다. 만약 이 튜토리얼이 도움이 되셨다면 글 좌측 하단의 하트❤를 눌러주시면 감사하겠습니다.

혹시라도 튜토리얼에 이상이 있거나, 이해가 가지 않으시는 부분, 또는 추가적으로 궁금하신 내용이 있다면 주저 마시고 댓글💬을 남겨주세요! 빠른 시간 안에 답변을 드리겠습니다 😊

참고

반응형