Kubernetes

[k8s] kubectl 플러그인 - kubectx / kubens

비번변경 2023. 2. 5. 17:20

kubectx / kubens

멀티 클러스터 / 다중 네임스페이스 간의 쉬운 전환을 도와주는 kubectl 플러그인/도구이다. v0.9.0부터는 Go로 작성되었다. 두 개 도구 모두 https://github.com/ahmetb/kubectx에서 지원하고 있다.

 

kubectx : kubectl에서 context 전환을 빠르게 할 수 있게 해주는 플러그인

kubens : 쿠버네티스 네임스페이스 간 전환을 쉽게 할 수 있게 해주는 플러그인

 

이 글에서는 설치 방법과 사용 방법을 간단히 정리해둔다.

 

+ 2023.02.04 - [k8s] kubectl 플러그인 - kube-ps1와 함께 사용하기 좋아 보인다.

 

 

설치

Ubuntu 기준으로 krew를 통한 설치, 수동 설치 방법 두 가지를 고려할 수 있다.

 

Krew를 통한 설치

kubectl과 krew 모두 설치되어 있다고 가정한다. krew 설치는 2023.02.03 - [k8s] krew - kubectl 플러그인 관리자를 참고할 수 있다.

# kubectx 설치
kubectl krew install ctx

# kubens 설치
kubectl krew install ns

설치한 플러그인은 각각 아래 명령어로 사용할 수 있다.

# kubectx 사용
kubectl ctx

# kubens 사용
kubectl ns

 

수동 설치

kubectx Git 저장소를 clone 한 뒤, 심볼릭 링크를 생성하는 방식으로 설치한다.

sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

 

 

자동 완성 설정

Git 저장소를 클론 하여  직접 설치했다면 아래의 명령을 실행하여 명령어 자동 완성을 설정할 수 있다.

git clone https://github.com/ahmetb/kubectx.git ~/.kubectx
COMPDIR=$(pkg-config --variable=completionsdir bash-completion)
ln -sf ~/.kubectx/completion/kubens.bash $COMPDIR/kubens
ln -sf ~/.kubectx/completion/kubectx.bash $COMPDIR/kubectx
cat << EOF >> ~/.bashrc


#kubectx and kubens
export PATH=~/.kubectx:\$PATH
EOF

 

유감스럽게도 Krew를 통해 설치한 경우에는 자동완성을 사용할 수 없다.

 

 

kubectx 사용법

kubectx를 사용하면 아래의 긴 명령어 대신보다 짧은 명령어로 context를 나열하고 전환할 수 있다.

kubectl config get-contexts
kubectl config use-context <CONTEXT_NAME>

 

현재 context 확인

kubectl ctx -c

# 또는
kubectx -c

 

 

context 나열

kubectl ctx

# 또는
kubectx

 

context 전환

kubectl ctx <CONTEXT_NAME>

# 또는
kubectx <CONTEXT_NAME>

 

이전 context로 돌아가기

kubectl ctx -

# 또는
kubectx -

 

그 외 사용법

context를 이름을 변경하거나 삭제할 수 있다.

 

 

kubens 사용법

kubeconfig에 현재 사용 중인 네임스페이스가 아닌 다른 네임스페이스에 존재하는 자원을 조회하거나 작업하기 위해서는 명령어에 네임스페이스를 지정해주어야 한다.

kubectl get pods -n <NAMESPACE>

kubens는 kubeconfig의 contexts.context.namespace 필드 값을 편집하여 사용하는 namespace를 변경해 준다. 

따라서 특정 네임스페이스에서 작업을 많이 하는 경우에는 사용하는 namespace를 변경하여 작업하는 게 편리할 수 있다.

kubectl ns <NAMESPACE>
kubectl get pods
kubectl delete pods nginx
...

 

 

현재 Namespace 확인

kubectl ns -c

# 또는
kubens

 

Namespace 나열

kubectl ns

# 또는
kubens

 

사용 namespace 변경

kubectl ns <NAMESPACE_NAME>

# 또는
kubens <NAMESPACE_NAME>

 

이전 namespace로 돌아가기

kubectl ns -

# 또는
kubens -

 

 

참고 문서

https://github.com/ahmetb/kubectx

https://wookiist.dev/139