-
Kubectl 명령어 간편하게 사용하기 (alias, 자동 완성, flag)Programming/Server 2024. 7. 3. 16:55
쿠버네티스를 사용하면서 가장 자주 사용하는 명령어는 단연코 kubectl 일 것이다. 이 길다면 긴 명령어를 매번 치기는 번거로울뿐더러, 긴 Pod 이름 등을 매 번 복사 붙여 넣기 하기도 여간 귀찮은 게 아니다.
개발 편의성을 매우 중시하는 개발자들을 위해 kubectl 명령어를 좀 더 편하게 사용하기 위해 연구해 보자.1. Alias
우선 'kubectl' 명령어의 길이 자체가 너무 길다! 적당히 헷갈리지 않으면서도 짧은 alias를 등록해 두고 사용하자. 보통 'k'를 많이 쓰는 것 같다.
현재 등록된 alias 목록을 보고 싶다면, bash 창에 `alias` 명령어를 입력하면 된다. alias를 신규로 등록하는 것 또한 간단하게 alias 별칭='명령어'를 사용하면 된다. (일회성 등록)alias k='kubectl'
일회성이 아니라 지속 적용되게 하려면 홈 디렉터리에 있는 .bashrc 파일 등록해서 사용하면 된다.
# .bashrc 파일 오픈 vim ~/.bashrc # .bashrc 파일 내에 alias 명령어 추가 alias k='kubectl' # 변경 사항 적용 source ~/.bashrc
2. 자동 완성
bash의 자동 완성을 담당하는 bash-completion 이 설치되어 있지 않다면 kubectl 자동 완성 또한 적용되지 않는다.
보통 설치되어 있지만, 설치되어 있지 않을 경우(type _init_completion 명령어로 확인 가능)
`apt-get install bash-completion` 등의 패키지 관리자 명령어를 통해 설치해 주자.kubectl 자동 완성은 kubectl completion bash 명령으로 생성할 수 있다. (참고)
alias와 마찬가지로 .bashrc 파일에 등록해 주자.# .bashrc 파일 오픈 vim ~/.bashrc # .bashrc 파일 내에 자동 완성 명령어 추가 source <(kubectl completion bash) # 변경 사항 적용 source ~/.bashrc
이 자동 완성은 kubectl이라는 명령어를 인식해야만 작동하기 때문에, 위에서 만든 alias(k)에는 적용이 되지 않는다. alias에도 자동 완성을 적용하고 싶다면 마찬가지로 `~/.bashrc`에 아래 내용을 추가로 기입 & 적용해주자.complete -o default -F __start_kubectl k
여기까지 적용을 했다면, 'k g<tab>' 을 눌러보면 'k get'으로 자동 완성이 되는 것을 확인할 수 있을 것이다. (이외의 명령어들 및 pod 이름 등에도 모두 적용된다.)
3. Flag 옵션이 있을 때 자동 완성 적용
업무 환경에서 위 내용을 실제로 사용하다 보니 사소한 문제가 있었다. 종종 context, kubeconfig 등 설정이 필요한 경우에 kubectl과 함께 아래 예시처럼 alias로 묶어 놓고 사용하는 경우가 있다. (상황에 따라 다른 kubectl 명령어 만으로 다른 config 파일 및 context를 사용할 수 있어서 편리하다.)
alias k1='kubectl --context context1' alias k2='kubectl --context context2' alias k3='kubectl --kubeconfig /home/poarlim/.kube/customconfig'
이처럼 flag 옵션을 alias로 같이 사용했을 때 자동 완성 스크립트가 동작하지 않는 현상이 있는 것을 발견했다.
원인
bash completions stop working when aliasing kubectl --kubeconfig on v1.22
정리하자면, 'kubectl des<tab>'을 입력하면 'kubectl __complete des'으로 __complete 플러그인이 kubectl 뒤에 추가되어 자동 완성을 활성화시켜 주지만, alias 사용 시 'k1 des<tab>'을 입력하면 'kubectl --context context1 __complete des'으로 __complete 플러그인이 이상한 위치에 붙게 되어서 kubectl 명령어를 인식하지 못하게 된다.해결
Do not try to load plugins for cobra commands
해결책은 위 이슈에서 찾을 수 있었는데, '=' 기호를 사용하여 flag를 추가하면 자동 완성을 인식하도록 이슈를 해결했다고 한다. (모든 경우에 가능하게 하는 것은 너무 복잡해진다고...)
즉, flag가 있는 alias에 자동 완성을 적용하려면 띄어쓰기가 없어야 하고, '='을 사용해야 한다. 이에 맞도록 alias를 수정하도록 하자.alias k1='kubectl --context=context1' alias k2='kubectl --context=context2' alias k3='kubectl --kubeconfig=/home/poarlim/.kube/customconfig'
alias 수정 후 'source ~/.bashrc'로 적용하여 주면 자동 완성이 잘 적용된다.
※ --kubeconfig를 사용할 때는 항상 전체 경로를 사용해야 자동 완성이 적용된다. (상대 경로 X)'Programming > Server' 카테고리의 다른 글
[웹서버] 라즈베리파이로 홈 서버 만들기 (0) 2020.10.30 [포트포워딩] 라즈베리파이 외부접속하기 (2) 2020.10.24