ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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)

Designed by Tistory.