개요
kubernetes 환경에서 작업을 하다보면 반복적으로 사용하는 kubectl 명령어가 꽤 귀찮은 경우가 있습니다. "kubectl"조차도 7글자이기 때문에 가끔 오타가 나고는 하고, Pod를 조회하려 해도 kubectl get po(d) 라는 명령을 쳐야 합니다.
오늘은 CLI환경에서 생산성 향상을 위해 alias 설정과 자동 완성 기능을 세팅해 보겠습니다. 기본적인 세팅 방법은 공식문서를 참고하면 좋습니다.
1. 셸 자동 완성 활성화
공식문서를 따라 진행합니다. 먼저 본인 환경에 맞는 셸이 어떤 것인지 확인할 필요가 있습니다. 저는 Mac이기 때문에 Zsh에서 설정하는 방법을 따라 진행합니다. 현재 사용 중인 셸을 확인하고 싶으면 다음 명령 통해 확인할 수 있습니다.
$ echo $SHELL
/bin/zsh
이제 kubectl 자동 완성 스크립트 활성화하고, 리다이렉션(>>)을 사용하여 특정 내용을 ~/.zshrc 파일의 맨 끝에 추가함으로써 자동 완성을 zsh 셸에 영구적으로 추가해줍니다.
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
이제 "kubectl + (Tab)"을 통해서 자동완성에 대한 지침이 나오는 지 확인합니다. 이 설정을 하지 않았을 때는 일반적인 자동완성처럼 디렉토리에 있는 파일 이름에 대한 자동완성만 되었습니다.
2. alias 설정
이제 반복적으로 사용되는 명령들을 축약해서 사용해보겠습니다. 예를 들어 kubectl 명령을 k로 별칭을 사용하고 싶다면 아래처럼 설정해주시면 됩니다.
echo 'alias k=kubectl' >>~/.zshrc
이제 레퍼런스를 참고하여 여러 명령들에 대해 alias를 추가해보겠습니다.
$ cat <<EOF >> ~/.zshrc
alias ka='kubectl apply --recursive -f'
alias kgp='kubectl get pods -o wide'
alias kgd='kubectl get deploy -o wide'
alias kgs='kubectl get service -o wide'
alias kgn='kubectl get nodes -o wide'
alias kgm='kubectl get nodes -o wide'
alias kgw='kubectl get events -w --field-selector type=Warning'
alias kgv='kubectl get pvc -o wide'
alias kgpa='kubectl get pods -o wide -A'
alias kgpw='kubectl get pods -o wide -w'
alias kgpaw='kubectl get pods -o wide -A -w'
EOF
## 재시작
$ source ~/.zshrc
이제 아무 명령이나 한 번 테스트해보겠습니다.
보시는 것처럼 세글자로 긴 명령을 대체할 수 있게 되었습니다.
3. krew를 이용한 플러그인 관리
krew는 kubectl 플러그인 매니저입니다. kubectl 커맨드라인 환경에서 사용가능한 플러그인을 조회, 설치, 삭제하는 기능을 제공합니다.
아래 링크를 보며 따라가겠습니다.
https://krew.sigs.k8s.io/docs/user-guide/setup/install/#bash
1. Krew 설치
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed 's/x86_64/amd64/;s/arm64/arm64/;s/aarch64/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
2. Krew 경로 설정
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
3. Krew 확인
kubectl krew
4. kube-ctx, kube-ns, kube-ps1
쿠버네티스를 관리하다 보면 여러 개의 클러스터를 동시에 관리해야 할 수 있습니다.(현재는 단일 클러스터지만) 또한 네임스페이스 간 이동과 이에 따른 프롬프트가 어떤 작업 공간에 있는 지도 확인할 수 있으면 좋습니다. 이에 따른 세팅을 진행해보겠습니다. krew를 활용해서 설치할 수 있습니다.
kubectl krew install ctx
kubectl krew install ns
brew install kube-ps1
echo 'source "$(brew --prefix kube-ps1)/share/kube-ps1.sh"' >> ~/.zshrc
echo 'PROMPT="$(kube_ps1) $PROMPT"' >> ~/.zshrc
source ~/.zshrc
막상 설정하고 나니 너무 긴 감이 있습니다. 일단 클러스터를 하나만 쓰니까 해당 내용은 지워보겠습니다(좋지 않아요.. 나중에 돌아와서 수정하겠습니다.)
vim "$(brew --prefix kube-ps1)/share/kube-ps1.sh"
"KUBE_PS1_CONTEXT_ENABLE" 인자가 true면 실행이군요. 아래와 같이 컨텍스트 정보를 비활성화 해주겠습니다.
source "$(brew --prefix kube-ps1)/share/kube-ps1.sh"
# 프롬프트 스타일 설정
export KUBE_PS1_CONTEXT_ENABLE=false # 컨텍스트 정보 비활성화
export KUBE_PS1_SYMBOL="⎈ "
export KUBE_PS1_NS_COLOR="green" # 네임스페이스 색상
그나마 깔끔해졌습니다. N/A는 현재 네임스페이스가 지정되어 있지 않다는 뜻입니다. 명시적으로 default로 설정하겠습니다.
kubectl config set-context --current --namespace=default
마음이 편안해졌습니다. 한번 네임스페이스 전환으로 테스트해보겠습니다.
잘 되었습니다. 이제 익숙해기만 하면 될 것 같습니다!
참고자료
리눅스에 kubectl 설치 및 설정
시작하기 전에 클러스터의 마이너(minor) 버전 차이 내에 있는 kubectl 버전을 사용해야 한다. 예를 들어, v1.32 클라이언트는 v1.31, v1.32, v1.33의 컨트롤 플레인과 연동될 수 있다. 호환되는 최신 버전
kubernetes.io
공식문서: https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/
kubectl 치트 시트
이 페이지는 일반적으로 사용하는 kubectl 커맨드와 플래그에 대한 목록을 포함한다. Kubectl 자동 완성 BASH source <(kubectl completion bash) # bash-completion 패키지를 먼저 설치한 후, bash의 자동 완성을 현재
kubernetes.io
책: https://www.yes24.com/product/goods/115187666
24단계 실습으로 정복하는 쿠버네티스 - 예스24
실무 현장의 경험을 고스란히 담은 쿠버네티스 실습서!직접 해야만 알 수 있는 것들이 있다. 쿠버네티스도 마찬가지다. 쿠버네티스의 기반이 되는 컨테이너 기술은 기존의 가상 머신과 기본 전
www.yes24.com
krew 설치 공식문서: https://krew.sigs.k8s.io/docs/user-guide/setup/install/#bash
Installing · Krew
© 2024 The Kubernetes Authors. Krew is a Kubernetes SIG CLI project. Edit Page ·
krew.sigs.k8s.io
'Kubernetes' 카테고리의 다른 글
[k8s] Pod의 생명주기 (11) | 2024.10.09 |
---|---|
[kubernetes] Traefik에 대해 알아보자! (0) | 2024.09.25 |
[Kubernetes] k3s로 경량화된 kubernetes 환경 구축하기 (2) | 2024.09.25 |
[k8s] Kubernetes에서 서비스에 외부 접근 제공하기: NodePort, LoadBalancer, Ingress (0) | 2024.09.18 |