kubernetes를 운영하면서, 도움이 될만한 몇가지 alias를 만들었습니다.
alias 뒤에 pod명의 일부를 넣으면 해당 pod를 찾아서 명령을 수행합니다.
매칭되는 pod가 여러개면 후보 목록을 출력합니다.
usage
kexecti
컨테이너 안에서 명령을 실행합니다.
kubectl exec -ti -n my-namespace my-pod -- ls -l
명령과 동일합니다.
host> $ kexecti my-pod ls -l
total 4
-rw-r--r-- 1 root root 82 Feb 23 10:32 README.md
kexecsh
컨테이너 안에 bash로 접속합니다.
kubectl exec -ti -n my-namespace my-pod -- bash --login
명령과 동일합니다.
host> $ kexecsh my-pod
pod> $
klogf
컨테이너 로그를 tail 겁니다.
kubectl logs -f -n my-namespace my-pod
명령과 동일합니다.
host> $ klogf my-pod
install
.kubeutil
파일을 home에 올리고, .bash_profile
에 아래 내용을 추가합니다.
source .kubeutil
code review
_KUBECTL=/usr/local/bin/kubectl
_kube_get_pod_name() {
_podname=""
_namespace=""
local num=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.name" | grep ^$1 | wc -l`
if [ $num -eq 1 ]; then
_podname=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.name" | grep ^$1`
_namespace=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.namespace" --field-selector metadata.name=$_podname`
elif [ $num -eq 0 ]; then
echo "not found podname [$1]"
else
# prefix 검색결과가 여러개면, equal 검색해보고 없으면 에러 처리
num=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.name" --field-selector metadata.name=$1 | wc -l`
if [ $num -eq 1 ]; then
_podname=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.name" --field-selector metadata.name=$1`
_namespace=`$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.namespace" --field-selector metadata.name=$_podname`
return
fi
echo "multiple pods named [$1]"
$_KUBECTL get pods -A --no-headers -o custom-columns=":metadata.name" | grep ^$1
fi
}
_kube_exec_ti() {
_kube_get_pod_name $1
if [ "$_podname" != "" ]; then
$_KUBECTL exec -ti -n $_namespace $_podname -- ${*: 2:99}
fi
}
_kube_exec_sh() {
_kube_get_pod_name $1
if [ "$_podname" != "" ]; then
$_KUBECTL exec -ti -n $_namespace $_podname -- bash --login
fi
}
_kube_exec_logf() {
_kube_get_pod_name $1
if [ "$_podname" != "" ]; then
$_KUBECTL logs -f -n $_namespace $_podname
fi
}
alias kexecti=_kube_exec_ti
alias kexecsh=_kube_exec_sh
alias klogf=_kube_exec_logf
ref
최종 코드는 github에 있습니다.
반응형
'Dev > DevOps' 카테고리의 다른 글
ArgoCD CLI명령어 몇 가지 (0) | 2023.02.03 |
---|---|
Redis 성능 향상 방법 (0) | 2022.10.13 |
Redis Cluster 구성 (0) | 2022.10.12 |
prompt에 kubernetes context 표시하기 (0) | 2022.09.16 |
nats - prometheus 연동 (0) | 2022.09.05 |