쿠버네티스 교육

02. kube 실습 과제 - kubectl 환경 최적화 및 kube tool 설치

Jerry_이정훈 2021. 7. 26. 11:24
728x90

실습 과제

  • kubectl 환경 최적화
    : 자동 완성, Alias 설정
  • kubectl tool 설치
    : kubeps, kubekrew, kubectx, kubens 

시간이 가장 소중한 자원이라 엔지니어는 항상 시간을 줄일 수 있는 도구를 찾아야 한다고 생각합니다. 아마 우리가 하는 일의 대부분은 예전에도 하였고 다음에도 할 일입니다. (니체의 영원회귀는 언제나 맞는 말입니다.) 귀챠니즘이 가장 큰 적인데 매번 작업 시 다음에 어떻게 더 빠르게 할 수 있을까 생각하며 조금이라도 더 생각하는 게 퇴근 시간을 앞당길 수 있는 길이라 생각합니다.

 

Kubectl 환경 최적화 - 자동 완성 및 Alias 설정 

 

관련 링크 : https://kubernetes.io/ko/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/

 

리눅스에서 bash 자동 완성 사용하기

리눅스에서 bash 자동 완성을 위한 몇 가지 선택적 구성에 대해 설명한다.

kubernetes.io

 

자동 완성 설정

저는 이미 WSL에 bash-completion 설치 되어 있습니다. 설치되어 있지 않는 경우 아래 명령어로 설치 합니다.

spkr@erdia22:/mnt/c/Users/erdia$ sudo apt-get -y install bash-completion
[sudo] password for spkr:
Reading package lists... Done
Building dependency tree
Reading state information... Done
bash-completion is already the newest version (1:2.10-1ubuntu1).
bash-completion set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

~/.bashrc 열어 아래 파일을 추가 합니다. 

spkr@erdia22:/mnt/c/Users/erdia$ vi ~/.bashrc 
source <(kubectl completion bash)

추가로 kubectl 명령어를 전부 입력하면 오타가 잦습니다. 현재 열려진 ~/.bashrc 파일에 Alias k 설정 역시  추가 합니다.

alias k=kubectl
complete -F __start_kubectl k

.bashrc 설정을 다시 로드 합니다.

spkr@erdia22:/mnt/c/Users/erdia$ source ~/.bashrc

이제 자동 완성 및 k Alias를 검증 합니다.

[spkr@erdia22 ~ (ubuns:vm)]$ kubectl get depl

(: depl 까지만 입력하고 tap 하시면 자동으로 완성됩니다.)

[spkr@erdia22 ~ (ubuns:vm)]$ kubectl get deployments.apps

동일하게 k alias 에서도 동일하게 자동 완성 사용 가능합니다. 

[spkr@erdia22 ~ (ubuns:vm)]$ k get deployments.apps

추가로 자주 사용하는 kubectl 명령어의 단축키 alias를 ~/.bashrc 같이 추가 합니다.

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 kgew='kubectl get events -w'
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'

아래와 같이 alias로 편하게 확인 가능합니다. 

[spkr@erdia22 erdia (ubuns:default)]$ source ~/.bashrc

[spkr@erdia22 erdia (ubuns:default)]$ kgn
NAME       STATUS   ROLES                  AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
ubun20-1   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.61   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7
ubun20-2   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.62   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7
ubun20-3   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.63   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7

[spkr@erdia22 erdia (ubuns:default)]$ k get node -o wide
NAME       STATUS   ROLES                  AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
ubun20-1   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.61   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7
ubun20-2   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.62   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7
ubun20-3   Ready    control-plane,master   5d20h   v1.21.2   172.17.29.63   <none>        Ubuntu 20.04.2 LTS   5.4.0-65-generic   docker://20.10.7

kubectl tool 설치 : kubeps, kubectx, kubens 

 

Kube Cluster 관리 하면 여러 Cluster 및 네임스페이스 선택을 할 경우가 많이 있습니다. 이 때 여러 Cluster, 네임스페이스 이동을 편리하게 하도록 kubeps, kubectx, kubens 사용이 필수적입니다. 

 

kubeps 참조

https://github.com/jonmosco/kube-ps1

 

GitHub - jonmosco/kube-ps1: Kubernetes prompt info for bash and zsh

Kubernetes prompt info for bash and zsh. Contribute to jonmosco/kube-ps1 development by creating an account on GitHub.

github.com

공식 가이드에 따라 설치를 진행 합니다.

[root@ksp1 ~]# git clone https://github.com/jonmosco/kube-ps1.git
Cloning into 'kube-ps1'...
(생략)

아래 내용을 ~/.bashrc 추가 합니다.

[root@ksp1 kube-ps1]# vi ~/.bashrc
(생략)
source ~/kube-ps1/kube-ps1.sh
PS1='[\u@\h \W $(kube_ps1)]\$ '
KUBE_PS1_SYMBOL_ENABLE=false

[root@ksp1 kube-ps1]# source ~/.bashrc

이제 Prompt가 아래와 같이 변경되었습니다.

[spkr@erdia22 ~ (ubuns:vm)]$

현재 ubuns 라는 cluster 와 vm 이라는 네임스페이스를 사용 중이라는 것을 Prompt 에서 확인 가능합니다. 

 

kubectl krew

kubectl krew는 kubectl 관련 여러 plug-in 설치를 쉽게하는 tool 입니다. 아래 가이드에 따라 설치 합니다.

 

참조

https://krew.sigs.k8s.io/docs/user-guide/setup/install/

 

Installing · Krew

© 2021 The Kubernetes Authors. Krew is a Kubernetes SIG CLI project. Edit Page ·

krew.sigs.k8s.io

아래 명령어를 ( ) 괄호 포함하여 붙여 넣습니다.

(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
  tar zxvf krew.tar.gz &&
  KREW=./krew-"${OS}_${ARCH}" &&
  "$KREW" install krew
)

실제 예제 입니다.

[spkr@erdia22 erdia (ubuns:vm)]$ (
>   set -x; cd "$(mktemp -d)" &&
>   OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
>   ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
>   curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
>   tar zxvf krew.tar.gz &&
>   KREW=./krew-"${OS}_${ARCH}" &&
>   "$KREW" install krew
> )
++ mktemp -d
+ cd /tmp/tmp.vWc8NazofM
++ uname
++ tr '[:upper:]' '[:lower:]'
+ OS=linux
++ uname -m
++ sed -e s/x86_64/amd64/ -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/'
+ ARCH=amd64
+ curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz
+ tar zxvf krew.tar.gz
./LICENSE
./krew-darwin_amd64
./krew-darwin_arm64
./krew-linux_amd64
./krew-linux_arm
./krew-linux_arm64
./krew-windows_amd64.exe
+ KREW=./krew-linux_amd64
+ ./krew-linux_amd64 install krew
Adding "default" plugin index from https://github.com/kubernetes-sigs/krew-index.git.
Updated the local copy of plugin index.
Installing plugin: krew
Installed plugin: krew
\
 | Use this plugin:
 |      kubectl krew
 | Documentation:
 |      https://krew.sigs.k8s.io/
 | Caveats:
 | \
 |  | krew is now installed! To start using kubectl plugins, you need to add
 |  | krew's installation directory to your PATH:
 |  |
 |  |   * macOS/Linux:
 |  |     - Add the following to your ~/.bashrc or ~/.zshrc:
 |  |         export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
 |  |     - Restart your shell.
 |  |
 |  |   * Windows: Add %USERPROFILE%\.krew\bin to your PATH environment variable
 |  |
 |  | To list krew commands and to get help, run:
 |  |   $ kubectl krew
 |  | For a full list of available plugins, run:
 |  |   $ kubectl krew search
 |  |
 |  | You can find documentation at
 |  |   https://krew.sigs.k8s.io/docs/user-guide/quickstart/.
 | /
/

vi ~/.bashrc 아래 내용을 추가 합니다.

[spkr@erdia22 erdia (ubuns:vm)]$ vi ~/.bashrc
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

[spkr@erdia22 erdia (ubuns:vm)]$ source ~/.bashrc

설치가 완료 되었습니다. 아래와 같이 정상적으로 확인이 가능합니다. 

[spkr@erdia22 erdia (ubuns:vm)]$ k krew
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."

Usage:
  kubectl krew [command]

Available Commands:
  help        Help about any command
  index       Manage custom plugin indexes
  info        Show information about an available plugin
  install     Install kubectl plugins
  list        List installed kubectl plugins
  search      Discover kubectl plugins
  uninstall   Uninstall plugins
  update      Update the local copy of the plugin index
  upgrade     Upgrade installed plugins to newer versions
  version     Show krew version and diagnostics

Flags:
  -h, --help      help for krew
  -v, --v Level   number for the log level verbosity

Use "kubectl krew [command] --help" for more information about a command.

kubectl krew 를 이용하여 k ctx, k ns 설치합니다. 

 

kctx, kns 설치

kubectx, kubens 설치 방법 입니다. 공식 홈페이지 가이드 따라 설치 하시면 됩니다.

 

참조 : https://github.com/ahmetb/kubectx

 

GitHub - ahmetb/kubectx: Faster way to switch between clusters and namespaces in kubectl

Faster way to switch between clusters and namespaces in kubectl - GitHub - ahmetb/kubectx: Faster way to switch between clusters and namespaces in kubectl

github.com

kubectl krew 이용해서 간단히 설치 가능합니다.

[spkr@erdia22 erdia (ubuns:vm)]$ k krew install ctx
Updated the local copy of plugin index.
Installing plugin: ctx
Installed plugin: ctx
\
 | Use this plugin:
 |      kubectl ctx
 | Documentation:
 |      https://github.com/ahmetb/kubectx
 | Caveats:
 | \
 |  | If fzf is installed on your machine, you can interactively choose
 |  | between the entries using the arrow keys, or by fuzzy searching
 |  | as you type.
 |  | See https://github.com/ahmetb/kubectx for customization and details.
 | /
/
WARNING: You installed plugin "ctx" from the krew-index plugin repository.
   These plugins are not audited for security by the Krew maintainers.
   Run them at your own risk.

[spkr@erdia22 erdia (ubuns:vm)]$ k krew install ns
Updated the local copy of plugin index.
Installing plugin: ns
Installed plugin: ns
\
 | Use this plugin:
 |      kubectl ns
 | Documentation:
 |      https://github.com/ahmetb/kubectx
 | Caveats:
 | \
 |  | If fzf is installed on your machine, you can interactively choose
 |  | between the entries using the arrow keys, or by fuzzy searching
 |  | as you type.
 | /
/
WARNING: You installed plugin "ns" from the krew-index plugin repository.
   These plugins are not audited for security by the Krew maintainers.
   Run them at your own risk.

이제 kube cluster의 namespace를 아래와 같이 확인하고 변경이 가능합니다. 

 

namespace 리스트 확인

[spkr@erdia22 erdia (ubuns:vm)]$ k ns
default
kasten-io
kube-node-lease
kube-public
kube-system
kubevirt
metallb-system
rook-ceph
snapscheduler
vm
yelb

(cluster 상황에 따라 다르게 보이실 수 있습니다.)

namespace 변경은 아래와 같이 가능합니다.

[spkr@erdia22 erdia (ubuns:vm)]$ k ns default
Context "ubuns" modified.
Active namespace is "default".

[spkr@erdia22 ~ (ubuns:default)]$

Prompt 에서 default로 변경되신 걸 확인 가능합니다. 

 

마찬가지로 cluster 리스트 변경도 가능합니다. (현재는 cluster 하나 뿐이지만 cluster 여러 개면 아래와 같이 여러 cluster가 보입니다.)

[spkr@erdia22 ~ (ubun2010:default)]$ k ctx
nvme
sfx
spkcluster:admin:default
tera:admin:default
ubun02
ubun2010
ubuns

변경은 동일 합니다.

[spkr@erdia22 ~ (ubun2010:default)]$ k ctx ubun02
Switched to context "ubun02".

[spkr@erdia22 ~ (ubun02:rook-ceph)]$

위와 같이 cluster, namespace 변경이 가능하고 변경된 정보는 prompt 에서 확인 가능합니다.

 

앞으로 제가 위 alias 및 kube tool를 사용해서 실습을 진행합니다. 위 alias 등에 익숙해 지시는 것을 권고 드립니다. 

 

감사합니다. 

반응형