k9s

k9s는 terminal에서 Kubernetes cluster를 탐색하고 운영 상태를 확인하는 도구입니다. kubectl get, describe, logs, exec로 나눠 보던 정보를 빠르게 오가며 볼 수 있습니다.

1. 전체 흐름

1-1. 먼저 이해할 관계

먼저 kubeconfig와 context 관계를 이해해야 k9s를 헷갈리지 않고 쓸 수 있습니다.

1-2. 흐름도

RKE2 또는 k3s cluster 설치
  |
  v
cluster별 kubeconfig 파일 생성
  ~/.kube/tirosh-home.yml
  ~/.kube/tirosh-home-rke2.yml
  |
  v
main kubeconfig로 merge
  ~/.kube/config
  |
  v
context 이름으로 cluster 선택
  tirosh-home/k3s
  tirosh-home/rke2/gpu
  |
  v
kubectl / kubectx / k9s가 같은 context를 사용

자주 쓰는 명령은 아래 순서입니다.

1-3. 기본 명령

make k3s/kubeconfig/merge SITE=tirosh-home
make rke2/kubeconfig/merge SITE=tirosh-home

kubectl config get-contexts
kubectx tirosh-home/rke2/gpu
k9s

특정 context를 바로 열 수도 있습니다.

1-4. Context 지정 실행

k9s --context tirosh-home/rke2/gpu

2. kubeconfig와 context

2-1. kubeconfig가 담는 정보

kubeconfig는 Kubernetes cluster 접속 정보입니다. 보통 아래 정보를 포함합니다.

  • cluster API server 주소
  • cluster certificate
  • user credential
  • context
  • current-context

이 repo는 cluster별 kubeconfig를 먼저 가져온 뒤, 필요하면 ~/.kube/config에 merge합니다.

2-2. k3s kubeconfig

예를 들어 k3s management cluster는 아래 명령으로 가져옵니다.

make k3s/kubeconfig SITE=tirosh-home
make k3s/kubeconfig/merge SITE=tirosh-home

2-3. RKE2 kubeconfig

RKE2 workload cluster는 아래 명령으로 가져옵니다.

make rke2/kubeconfig SITE=tirosh-home
make rke2/kubeconfig/merge SITE=tirosh-home

site profile 기준 주요 context는 다음과 같습니다.

2-4. 주요 context

용도 context
Argo CD management cluster tirosh-home/k3s
RKE2 GPU workload cluster tirosh-home/rke2/gpu

kubectl, kubectx, k9s는 모두 kubeconfig의 context를 사용합니다. 그래서 context 이름이 정리되어 있으면 도구를 바꿔도 같은 cluster를 안정적으로 선택할 수 있습니다.

3. kubectx

3-1. 역할

kubectx는 kubeconfig 안의 context를 빠르게 바꾸는 도구입니다.

설치합니다.

3-2. 설치

brew install kubectx

현재 context 목록을 봅니다.

3-3. Context 목록

kubectx
kubectl config get-contexts

RKE2 GPU cluster로 전환합니다.

3-4. Context 전환

kubectx tirosh-home/rke2/gpu

현재 선택된 context를 확인합니다.

3-5. 현재 context 확인

kubectl config current-context

context를 바꾸면 이후 kubectlk9s는 기본적으로 그 context를 사용합니다.

4. k9s 설치

4-1. macOS 설치

macOS에서는 Homebrew로 설치합니다.

brew install derailed/k9s/k9s

설치 확인:

4-2. 설치 확인

k9s version

Linux에서도 Homebrew를 사용할 수 있다면 같은 명령을 사용할 수 있습니다. OS별 package manager나 binary release를 쓰는 경우에는 k9s 공식 문서를 기준으로 설치합니다.

5. k9s 실행

5-1. 현재 context로 실행

현재 context로 실행합니다.

k9s

특정 context를 지정해서 실행합니다.

5-2. 특정 context로 실행

k9s --context tirosh-home/rke2/gpu

특정 namespace로 바로 들어갑니다.

5-3. Namespace 지정

k9s --context tirosh-home/rke2/gpu --namespace gpu-operator

GPU Operator 상태를 볼 때는 아래 context와 namespace가 자주 쓰입니다.

5-4. GPU Operator 확인

k9s --context tirosh-home/rke2/gpu --namespace gpu-operator

Argo CD management cluster를 볼 때는 아래처럼 실행합니다.

5-5. Argo CD 확인

k9s --context tirosh-home/k3s --namespace argocd

6. 기본 사용법

6-1. Resource 화면 이동

k9s 안에서는 resource 이름을 입력해 이동할 수 있습니다.

입력 의미
:pods Pod 목록
:nodes Node 목록
:svc Service 목록
:deploy Deployment 목록
:ns Namespace 목록
:events Event 목록

자주 쓰는 키는 다음과 같습니다.

6-2. 자주 쓰는 키

의미
방향키 또는 j/k 위아래 이동
Enter 선택한 resource 상세 보기
Esc 이전 화면
l Pod logs
d describe
s shell
/ 필터
0 모든 namespace 보기
q 종료

GPU cluster에서 확인할 대표 화면은 다음입니다.

6-3. GPU cluster에서 볼 화면

:nodes
:pods
:events

gpu-operator namespace에서 Operator pod가 정상인지 확인하고, node 화면에서 GPU node가 Ready인지 확인합니다.

7. 문제 확인 흐름

7-1. Context 확인

cluster가 보이지 않으면 kubeconfig와 context부터 확인합니다.

kubectl config get-contexts
kubectl config current-context
kubectl --context tirosh-home/rke2/gpu get nodes

k9s가 다른 cluster를 보고 있다면 context를 명시해서 실행합니다.

7-2. k9s context 지정

k9s --context tirosh-home/rke2/gpu

GPU pod가 Pending이면 k9s에서 아래 순서로 봅니다.

7-3. Pending pod 확인

:pods
  -> pod 선택
  -> d로 describe
  -> Events 확인

GPU Operator 문제를 볼 때는 namespace를 먼저 좁힙니다.

7-4. Namespace 좁히기

k9s --context tirosh-home/rke2/gpu --namespace gpu-operator

8. 참고 문서

8-1. 외부 문서