본문 바로가기
Cloud/Kubernetes

Kubernetes plug-in 설치 및 사용 가이드(kube-ctx, ns, node-shell, neat, kube-ps1)

by _Nate 2023. 3. 29.
반응형

Kubernetes환경의 운영을 좀 더 편하게 해주는 다양한 plug-in들이 많이 있다.
이번 포스팅에서는 몇가지 plug-in(ctx, ns, node-shell, neat)을 소개하겠다. OS는 ubuntu를 기준으로 설명한다.


1. kubectl 자동완성

  • kubectl 명령어는 그 종류도 많고 하나하나 치기도 귀찮다. 그래서 자동완성 기능을 사용한다.
  • bash-completion 설치
apt-get install bash-completion
  • kubectl 자동완성 기능은 bash-completion에 의존하고 있기 때문에 bash-completion설치가 필요하다.

 

  • 자동완성 기능을 활성화 한다.
echo 'source <(kubectl completion bash)' >>~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
  • 자신의 profile에 저장한다.

 

  • k 만 눌러도 kubectl이 실행되며 Tab키를 눌러 alias 확인 및 자동완성이 가능해진다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get nodes
NAME                                                STATUS   ROLES    AGE     VERSION
ip-172-16-134-12.ap-northeast-2.compute.internal    Ready    <none>   5h35m   v1.24.10-eks-48e63af
ip-172-16-144-213.ap-northeast-2.compute.internal   Ready    <none>   8d      v1.24.10-eks-48e63af
ip-172-16-146-6.ap-northeast-2.compute.internal    Ready    <none>   8d      v1.24.10-eks-48e63af
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k <Tab>
alpha          apply          certificate    cordon         delete         edit           get            logs           port-forward   run            top
annotate       attach         cluster-info   cp             describe       exec           help           options        proxy          scale          uncordon
api-resources  auth           completion     create         diff           explain        kustomize      patch          replace        set            version
api-versions   autoscale      config         debug          drain          expose         label          plugin         rollout        taint          wait
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get de <Tab>
deletebackuprequests.velero.io  deployments.apps

 
2. krew

  • krew는 Kubernetes plug-in들을 관리하는 툴이다.
  • git이 설치된 상태에서 아래 명령어를 수행한다.
(
  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
)

 

  • PATH에 krew/bin경로를 추가한다.
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"

 

  • k krew 명령어로 krew가 정상적으로 설치되었는지 확인한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k krew
krew is the kubectl plugin manager.
You can invoke krew through kubectl: "kubectl krew [command]..."

Usage:
  kubectl krew [command]

Available Commands:
  completion  generate the autocompletion script for the specified shell
  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.

 

  • krew update 수행
k krew update

 
3. kubectl-ctx

  • 여러 Cluster를 운영하는 경우 Cluster간 전환을 쉽게 도와주는 툴이다.
  • krew를 통해 간단하게 설치한다.
k krew install ctx

 

  • config파일에 저장된 다수의 Cluster를 조회하며 kubectl-ctx <context> 명령어로 쉽게 전환이 가능하다.
  • kx로 alias를 걸어 사용하고 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-control:default)# kx
test-cluster1
test-cluster2
test-control
test@DESKTOP-F55SF6V:~ (⎈|test-control:default)# kx test-cluster2
Switched to context "test-cluster2".
test@DESKTOP-F55SF6V:~ (⎈|test-cluster2:default)#
  • test-control cluster에서 test-cluster2 로 전환된다.

 
4. kubectl-ns

  • Namespace 전환 명령어 : kubectl config set-context --current --namespace=<Namespace명>
  • kubectl-ns는 이를 쉽게 해준다. kns로 alias를 걸어 사용하고 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:argocd)# kns kube-system
Context "test-cluster" modified.
Active namespace is "kube-system".

test@DESKTOP-F55SF6V:~ (⎈|test-cluster:kube-system)# k get deploy
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           8d
coredns                        2/2     2            2           12d
ebs-csi-controller             2/2     2            2           8d
efs-csi-controller             2/2     2            2           8d

test@DESKTOP-F55SF6V:~ (⎈|test-cluster:kube-system)# kns default
Context "test-cluster" modified.
Active namespace is "default".

test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get deploy
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
metrics-server   1/1     1            1           2d8h
  • kns <Namespace명>으로 쉽게 변경한다.

 
5. kube-ps1

  • PS1환경변수에 kubernetes의 context명과 namespace 정보를 표시한다.
  • git clone을 통해 kube-ps1을 가져온 뒤 profile에 PS1변수를 변경한다.
git clone https://github.com/jonmosco/kube-ps1.git

 

  • profile에 아래 내용을 추가한다.
source $KUBE_PS1디렉토리/kube-ps1.sh
PS1='test@\h:\w $(kube_ps1)\$ '

 

  • 아래처럼 프롬프트가 변경된 것을 확인한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)#
  • test-cluster의 default namespace가 현재 위치다.

 
6. node-shell

  • Kubernetes의 node에 직접 접속할 수 있게 해주는 도구다.
  • krew를 통해 설치한다.
kubectl krew index add kvaps https://github.com/kvaps/krew-index
kubectl krew install kvaps/node-shell

 

  • kn으로 alias를 걸어 사용중이다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get nodes
NAME                                                STATUS   ROLES    AGE    VERSION
ip-172-16-134-12.ap-northeast-2.compute.internal    Ready    <none>   5h35m   v1.24.10-eks-48e63af
ip-172-16-144-213.ap-northeast-2.compute.internal   Ready    <none>   8d      v1.24.10-eks-48e63af
ip-172-16-146-6.ap-northeast-2.compute.internal    Ready    <none>   8d      v1.24.10-eks-48e63af
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# kn ip-172-16-134-12.ap-northeast-2.compute.internal
spawning "nsenter-7xiiyi" on "ip-172-16-134-12.ap-northeast-2.compute.internal"
If you don't see a command prompt, try pressing enter.
[root@ip-172-16-134-12 /]#
  • kn <Node명>으로 해당 node에 접속했다.

 
7. neat

  • kubectl get resource -o yaml 수행시 쓸모없는 값들을 제거하여 가독성을 높여준다.
  • krew로 간단히 설치힌다.
k krew install neat

 

  • kubectl get reousrce -o yaml | kubectl neat 와 같은 형태로 사용한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get svc kubernetes -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2023-03-17T08:27:39Z"
  labels:
    component: apiserver
    provider: kubernetes
  name: kubernetes
  namespace: default
  resourceVersion: "202"
  uid: eeb3ea80-a142-490f-9952-470a2397d1ff
spec:
  clusterIP: 10.100.0.1
  clusterIPs:
  - 10.100.0.1
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
  • neat없이 값을 가져오면 creationTimestamp등등 불필요한 데이터가 많이 조회된다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get svc kubernetes -o yaml | k neat
apiVersion: v1
kind: Service
metadata:
  labels:
    component: apiserver
    provider: kubernetes
  name: kubernetes
  namespace: default
spec:
  clusterIP: 10.100.0.1
  clusterIPs:
  - 10.100.0.1
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: https
    port: 443
  • 결과가 훨씬 깔끔한걸 확인할 수 있다.
반응형

운영환경에 있어 plug-in은 선택사항이 아닌 필수다. 일의 생산성이 달라지는걸 확인할 수 있다.

반응형