전공영역 공부 기록

쿠버네티스 kubectl 유틸리티 도구

악분 2023. 7. 8. 11:17
반응형

이 글은 kubectl명령어 사용을 도와주는 유틸리티 도구를 소개합니다. kubectl 유틸리티 도구는 자동완성, 긴 명령어 축약 등이 있습니다.

 

이 글에서 사용하는 예제는 제 github에 있습니다.

※ 링크: https://github.com/choisungwook/kubectl_plugins

 

영상: https://youtu.be/UfKZPEk6D0k

 

autocomplete(자동완성)

autocomplete은 kubectl 명령어를 자동완성합니다.

 

설치방법 

설치방법은 사용하는 쉘에 따라 다릅니다. bash쉘 기준으로 설치방법은 아래와 같습니다.

apt-get install bash-completion
source <(kubectl completion bash)

 

사용방법

사용방법은 tab을 누르면 됩니다. 예를 들어 kubectl get을 입력한 후에 tab을 누르면, kubectl get으로 사용하는 명령어 목록이 나옵니다.

 

영구저장

source명령어를 사용한 autocomplete설치는 현재 쉘에만 적용됩니다. 다른 쉘에 적용되지 않으며 재부팅되면 설정이 사라집니다. 그러므로 영구실행 설정을 해야 합니다. 아래 예제는 사용자 홈디렉터리의 ".bashrc"파일에 영구실행 설정을 했습니다.

echo 'source <(kubectl completion bash)' >>~/.bashrc

 

alias k

alias는 kubectl명령어를 k로 단축해줍니다. 장시간 kubectl명령어 사용에 피로감이 느껴지신분은 alias사용을 추천드립니다.

 

설치방법

alias명령어를 사용합니다.

alias k=kubectl

 

사용방법

사용방법은 alias명령어를 사용하면 됩니다.

k get nodes

 

영구저장

alias명령어는 현재 쉘에만 적용됩니다. 다른 쉘에 적용되지 않으며 재부팅되면 설정이 사라집니다. 그러므로 영구실행 설정을 해야 합니다. 아래 예제는 사용자 홈디렉터리의 ".bashrc"파일에 영구실행 설정을 했습니다.

echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

 

autocomplete를 사용하는 경우, alias k에 대한 autocomplete설정이 필요합니다.

echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

 

kubenet

kubenet는 사용하려는 쿠버네티스 manifest API가 특정 쿠버네티스 버전에 작동하는지 확인합니다.

 

설치방법

설치는 공식문서에서 제공하는 쉘 스크립트를 실행하면 됩니다.

sh -c "$(curl -sSL https://git.io/install-kubent)"

 

사용방법

elasticsearch 7.10버전 helm차트를 예제로 사용하겠습니다. elasticsearch helm 차트를 추가합니다.

helm repo add elastic https://helm.elastic.co
helm repo add

 

7.10버전 helm차트 ingress는 v1beta1 API를 사용합니다.

helm template --version=7.10 --set ingress.enabled=true elastic elastic/elasticsearch | grep "kind: Ingress" -B 1

 

v1beta1 ingress API는 쿠버네티스 1.22버전 이상부터 사용할 수 없습니다.

helm template --version=7.10 --set ingress.enabled=true elastic elastic/elasticsearch | kubent -f - -c=false --target-version=1.20

 

krew(kubectl 플러그인 패키지 매니저)

krew는 사용자가 kubectl 플러그인을 배포하고 다른 사람에게 배포한 플러그인을 공유하는 패키지 매니저입니다. kubectl 플러그인은 kubectl 명령어 작업 효율성을 올려줍니다.

 

자기만의 kubectl명령어를 만드는 것을 kubectl 플러그인이라고 부를 수 있습니다. 그리고 여러 kubectl 플러그인 명령어를 저장하고 관리하는 저장소가 krew입니다. 사용자는 krew에 있는 플러그인을 다운로드하고 사용하면 됩니다.

 

설치방법

krew설치는 공식 홈페이지에 있는 설치 스크립트를 실행하면 됩니다.

(
  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/')" &&
  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
)

 

krew설치 후에 krew바이너리가 있는 경로를 환경변수로 설정합니다.

export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

 

사용방법

krew는 kubectl krew로 실행합니다. krew 뒤에 명령어를 입력하여 krew를 실행합니다.

 

 

자주 사용하는 명령어는 install입니다. install은 krew 플러그인을 설치합니다. krew 플러그인 목록은 웹페이지에 있습니다.

 

영구저장

환경변수는 현재 쉘에만 적용됩니다. 다른 쉘에 적용되지 않으며 재부팅되면 설정이 사라집니다. 그러므로 영구실행 설정을 해야 합니다. 아래 예제는 사용자 홈디렉터리의 ".bashrc"파일 끝에 환경변수 설정을 추가했습니다.

vi ~/.bashrc

# 맨 끝에 추가
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

 

ctx

ctx krew 플러그인은 kubectl context 조회, 변경을 합니다.

 

설치방법

krew를 사용하여 ctx플러그인을 설치합니다.

kubectl krew install ctx

 

사용방법

kubectl ctx를 입력하면 context목록이 나옵니다. kubectl config get-contexts명령어 결과와 동일합니다. 현재 사용하는 context는 색깔로 표시됩니다.

kubectl ctx

 

context이름을 입력하면 context가 변경됩니다.

kubectl ctx {context 이름}

 

neat

neat krew 플러그인은 kubectl -oyaml출력을 읽기 좋게 필터링합니다. kubectl -oyaml 결과는 쿠버네티스가 관리하는 메타데이터도 있습니다. neat 플러그인은 메타데이터를 필터링합니다.

 

설치방법

krew를 사용하여 neat플러그인을 설치합니다.

kubectl krew install neat

 

사용방법

neat 예제를 실행해볼게요. 예제코드는 제 git repo에 있습니다. git clone으로 예제코드를 다운로드 받습니다.

git clone https://github.com/choisungwook/kubectl_plugins.git example
cd example/

 

neat_example디렉터리에 있는 manifest를 배포합니다.

kubectl apply -f neat_example/

 

kubectl pod결과를 -oyaml로 출력해보고 neat플러그인을 사용하여 결과를 필터링해보세요. neat플러그인 사용한 결과가 읽기 편합니다.

kubectl -n default get pod busbox-neat -oyaml
kubectl -n default get pod busbox-neat -oyaml | kubectl neat

 

neat예제를 확인한 후, 배포한 리소스를 삭제합니다.

kubectl delete -f ./neat_example

 

lineage

lineage krew 플러그인은 쿠버네티스 리소스 관계도를 출력합니다.

 

설치방법

krew를 사용하여 lineage플러그인을 설치합니다.

kubectl krew install lineage

 

사용방법

lineage예제를 실행해볼게요. 예제코드는 제 git repo에 있습니다. git clone으로 예제코드를 다운로드 받습니다.

git clone https://github.com/choisungwook/kubectl_plugins.git example
cd example/

 

lineage_example 디렉터리에 있는 manifest를 배포합니다.

kubectl apply -f ./lineage_example

 

lineage 플러그인을 사용하여 busybox-lineage pod와 관련된 쿠버네티스 리소스를 확인합니다. pod가 실행되는 node이름, configmap 등이 보입니다.

kubectl lineage -n default pod busybox-lineage -D

 

lineage예제를 확인한 후, 배포한 리소스를 삭제합니다.

kubectl delete -f ./lineage_example

 

sick-pods

sick-pods krew 플러그인은 not ready pod를 조회합니다.

 

설치방법

krew를 사용하여 sick-pods플러그인을 설치합니다.

kubectl krew install sick-pods

 

사용방법

sick-pods예제를 실행해볼게요. 예제코드는 제 git repo에 있습니다. git clone으로 예제코드를 다운로드 받습니다.

git clone https://github.com/choisungwook/kubectl_plugins.git example
cd example/

 

sickpods_example디렉터리에 있는 manifest를 배포합니다.

kubectl apply -f ./sickpods_example

 

예제를 배포하면 not ready pod 2개가 실행됩니다.

kubectl -n default get pod

 

sick-pods 플러그인을 사용하면, 예제로 배포한 pod 2개가 조회됩니다. 플러그인 실행 결과가 너무 길어 grep명령어로 필터링하면 좋습니다.

kubectl sick-pods -n default | grep "is not ready"

 

sick-pod예제를 확인한 후, 배포한 리소스를 삭제합니다.

kubectl delete -f ./sickpods_example

 

stern

stern krew 플러그인은 pod 컨테이너 로그를 조회합니다.

 

설치방법

krew를 사용하여 stern플러그인을 설치합니다.

kubectl krew install stern

 

사용방법

stern예제를 실행해볼게요. 예제코드는 제 git repo에 있습니다. git clone으로 예제코드를 다운로드 받습니다.

git clone https://github.com/choisungwook/kubectl_plugins.git example
cd example/

 

stern_example디렉터리에 있는 manifest를 배포합니다.

kubectl apply -f ./stern_example

 

예제는 default namespace에 pod(nginx, busybox) 2개를 배포합니다. busybox pod는 컨테이너 3개를 실행하고 각 컨테이너는 3초마다 로그를 출력합니다. nginx pod는 일부로 유효하지 않은 주소로 probe를 검사하여 404 nof found 로그를 출력합니다.

 

default namespace에 있는 모든 pod 로그를 출력합니다. +로 표시된 줄은 로그를 출력할 pod목록입니다.

kubectl stern -n default .

 

since를 사용하면 시간대를 필터링합니다. 아래 예제는 마지막 10분간 로그만 출력합니다.

kubectl stern -n default . --since 10m

 

문자열을 입력하면 pod이름을 필터링합니다. 아래 예제는 stern문자열이 포함된 pod 로그만 출력합니다.

kubectl stern -n default stern

 

include를 사용하면 특정 문자열만 포함되는 로그를 필터링할 수 있습니다. 아래 예제는 first문자열이 포함된 로그만 출력합니다.

kubectl stern -n default . --include "first"

 

404문자열로 필터링 해보세요. 존재하지 않는 API호출 로그를 쉽게 필터링할 수 있습니다.

kubectl stern -n default . --include "404"

 

exclude를 사용하면 특정 문자열을 제외할 수 있습니다.

kubectl stern -n default . --exclude "first"
반응형