🔎krew란?

Kubernetes를 운영 및 관리할 때 가장 많이 사용하는 툴이라고 하면 역시 kubectl일 텐데요. kubectl 덕분에 우린 커맨드 창에서 Kubernetes의 각 Object를 배포, 관리, 테스트할 수 있습니다.

이런 kubectl을 더욱 편리하고 효율적으로 사용할 수 있도록 도와주는 플러그인이 다양한 사람들에 의해 개발되고 있다는 사실, 알고 계셨나요?

krew는 이렇게 개발되는 kubectl 플러그인을 저장하고 배포하는 플러그인 매니저입니다.

2024년 7월 기준 현재 264개의 kubectl 플러그인이 krew에 등록되어 있는데요. krew를 사용하면 CLI상에서 kubectl 플러그인을 편리하게 검색하거나 로컬에 설치할 수 있습니다.

macOS, Linux, Windows 등 대부분의 운영체제에서도 지원되는 krew를 직접 사용해보고, 추천 플러그인도 소개해보겠습니다.

🛠️krew 사용해보기

로컬에서 krew를 사용하려면 git이 먼저 설치되어 있어야 합니다. 각 운영체제별 krew 설치 방법공식 링크에서 확인할 수 있습니다.

krew를 설치했다면 이제 직접 사용해볼 차례입니다. 먼저 아래 명령어로 최신 플러그인 리스트를 받아옵니다.

$ kubectl krew update

그리고 아래 명령어로 사용 가능한 플러그인을 탐색할 수 있습니다.

$ kubectl krew search
 
NAME                            DESCRIPTION                                         INSTALLED
access-matrix                   Show an RBAC access matrix for server resources     no
advise-psp                      Suggests PodSecurityPolicies for cluster.           no
auth-proxy                      Authentication proxy to a pod or service            no
[...]

아래 명령어로 원하는 플러그인을 다운로드 가능합니다.

$ kubectl krew install ctx # 예제에선 kubectx라는 플러그인을 다운로드합니다.

설치한 플러그인의 최신 업데이트를 아래 명령어로 한 번에 설치할 수도 있습니다.

$ kubectl krew upgrade

더 이상 사용하지 않는 플러그인은 아래 명령어로 삭제할 수 있습니다.

$ kubectl krew uninstall ctx # 예제에선 설치된 kubectx 플러그인을 삭제합니다.

krew는 kubectl 플러그인 매니저 툴이기 때문에 설치/사용 방법이 어렵진 않은데요. 이제 실제로 사용하기 좋은 kubectel 플러그인 3가지를 추천드리겠습니다.

✨추천 kubectl 플러그인 소개

kubectx

가장 먼저 소개해드릴 추천 플러그인은 kubectx입니다. kubectx는 Kubernetes의 context object를 쉽게 변경할 수 있게 도와주는 플러그인인데요.

Kubernetes의 context란, 여러 Kubernetes 클러스터에 접근할 수 있도록 관련 config 값을 모아둔 Object를 말합니다.

이런 context를 변경해서 다른 Kubernetes 클러스터에 접근하려면 기존에는 아래와 같은 과정을 거쳐야 했습니다.

  1. kubectl config get-contexts 명령어로 변경 가능한 context 이름 확인
  2. kubectl config use-context {context 이름} 명령어로 context 변경

하지만 kubectx 플러그인을 사용하면 context를 간단한 CLI 명령어만으로 쉽게 변경 가능합니다.

kubectx는 아래와 같이 설치할 수 있습니다.

$ kubectl krew install ctx

설치 완료 후 아래와 같은 명령어로 현재 context 확인 및 context 변경이 가능합니다.

$ kubectl ctx
coffee
minikube
test
 
$ kubectl ctx coffee
Switched to context "coffee"
 

neat

다음으로 소개해드릴 kubectl 플러그인은 neat입니다.

Kubernetes 클러스터에 배포된 object의 Manifest를 참고하거나 가져오기 위해 kubectl get ... -o yaml 형태의 명령어를 사용할 때가 많은데요.

하지만 이렇게 가져온 Manifest에는 아래 이미지와 같이 object 배포 당시 메타데이터나 현재 object의 상태와 관련된 데이터 등도 포함하고 있어서 가독성이 떨어집니다.

이 때 neat 플러그인을 사용하면, 아래와 같이 object 배포에 필요없는 정보가 제외된 Manifest를 얻을 수 있습니다.

neat는 아래와 같이 설치할 수 있습니다.

$ kubectl krew install neat

neat를 사용하는 가장 직관적인 방법은 파이프라인(|)을 사용하는 것입니다. 아래와 같이 기존 kubectl get 명령어에 kubectl neat 명령어를 연결하면 가독성이 더욱 좋은 Manifest를 얻을 수 있습니다.

$ kubectl get ... -o yaml | kubectl neat

kail

마지막으로 소개해드릴 플러그인은 kail입니다. Kubernetes와 tail을 합친 이름을 지닌 kail은, Kubernetes의 다양한 Object에서 발생하는 로그를 실시간으로 보여주는 플러그인입니다.

Kubernetes 상에서 배포된 애플리케이션에 대한 로그를 확인하고 싶을 때 우린 kubectl logs {Object 종류}/{Object 이름} 명령어를 주로 사용합니다.

하지만 이런 방식은 단일 Object에 대한 로그만 확인이 가능하며, 여러 Object의 로그를 한 번에 확인하는 등 좀 더 복잡한 로그 조회는 어렵죠.

kail은 이런 문제를 해결해주는 플러그인입니다.

kail은 아래와 같이 설치할 수 있습니다.

$ kubectl krew install tail

kail을 이용하면 Service, ReplicaSet, Deployment 등을 Argument로 필터링한 다음, 매칭되는 Pod의 로그를 한 번에 확인할 수 있습니다.

예를 들어, frontend라는 이름의 Service와 webapp이라는 이름의 Deployment에 포함된 Pod의 로그를 확인하고 싶다면 아래와 같은 kail 명령어를 사용하면 되는 것이죠.

k tail --svc frontend --deploy webapp

kail을 이용하면 특정 Namespace와 Node에서 동작 중인 Pod의 로그도 한 번에 확인할 수 있습니다.

예제를 위해 stress란 이름의 Namespace에 일정 주기로 테스트용 로그를 생성하는 nginx 컨테이너 및 cache 컨테이너가 포함된 Deployment가 배포했습니다. 그리고 해당 Object들은 playground라는 이름의 Node 위에서 동작하고 있죠.

이때 kailstress Namespace와 playground Node에서 동작 중인 모든 Pod의 로그를 조회하면 아래와 같이 표시됩니다.

<stress Namespce에서 동작하는 모든 Pod 로그 조회>

<playground Node에서 동작하는 모든 Pod 로그 조회>

References