안녕하세요, 자바파커입니다.
"
kubectl get pods치고,describe치고,logs치고… 하루에 같은 명령을 몇 십 번 반복하고 있습니다."
솔직히 저도 그랬습니다. 쿠버네티스 운영이 익숙해질수록 반복 타이핑이 쌓이고, 멀티 컨텍스트·멀티 네임스페이스를 오갈 때는 kubectl config use-context·-n namespace 옵션 붙이는 것만으로도 피곤해집니다.
결론부터 말씀드리면 — k9s는 이 반복을 키보드 몇 개로 줄여주는 쿠버네티스 TUI 대시보드입니다. ~/.kube/config만 있으면 바로 동작하고, Pod 목록·로그·exec·port-forward를 전부 한 화면에서 처리합니다. 오늘은 설치부터 실전 워크플로우, 커스터마이징까지 정리하겠습니다.
이전 편을 안 보셨다면 K8S에 대한 이해와 kubectl 실전 명령어 가이드부터 읽고 오시면 흐름이 이어집니다.
k9s란?
k9s는 터미널에서 동작하는 쿠버네티스 TUI(Text UI) 대시보드입니다. Go로 작성된 단일 바이너리이고, 오픈소스(Apache 2.0)입니다.
~/.kube/config를 그대로 사용 — kubectl이 되면 k9s도 됩니다- 실시간 리프레시 (기본 2초 간격)
- 키보드 단축키 기반 내비게이션
- 로그 스트리밍·exec·port-forward·edit 모두 한 화면에서
핵심 장점: "어떤 리소스가 어떤 상태인지" 한눈에 보여주기 때문에, 디버깅과 탐색이 압도적으로 빠릅니다. kubectl이 "정밀한 외과용 칼"이라면 k9s는 "넓게 스캔하는 관제실 모니터"에 가깝습니다.
설치 — OS별 한 줄 명령어
# macOS
brew install derailed/k9s/k9s
# Linux (snap)
snap install k9s --devmode
# Linux (바이너리 직접 다운로드)
curl -sS https://webinstall.dev/k9s | bash
# Windows (scoop)
scoop install k9s
# Windows (winget)
winget install k9s설치 후 확인:
k9s version
# 또는 바로 실행
k9sk9s가 뜨면 현재 컨텍스트의 리소스가 보입니다. 설정 끝.
주의: k9s는 현재 컨텍스트를 그대로 사용합니다. 실수로 운영 클러스터에서 실행하지 않도록
kubectl config current-context로 먼저 확인하는 습관을 들이세요.
화면 구성 — 3줄로 끝
k9s는 UI가 단순합니다.
| 영역 | 역할 |
|---|---|
| 상단 헤더 | 현재 컨텍스트·클러스터·네임스페이스·단축키 힌트 |
| 리스트 뷰 | 현재 조회 중인 리소스(Pod, Deployment 등) 테이블 |
| 커맨드바 | :를 눌러 리소스 전환 (:pod, :svc, :ns …) |
리스트 항목을 화살표로 선택하고, 단축키 한 글자로 액션을 실행하는 흐름입니다.
필수 단축키 20개 — 외우면 끝
k9s는 단축키가 전부입니다. 이 표만 외우면 일상의 90%가 커버됩니다.
1) 리소스 이동 (커맨드모드 :)
| 단축키 | 동작 |
|---|---|
:pod |
Pod 목록 |
:deploy |
Deployment 목록 |
:svc |
Service 목록 |
:ing |
Ingress 목록 |
:ns |
Namespace 선택 |
:ctx |
Context 선택 |
:events |
클러스터 이벤트 |
:node |
Node 목록 |
2) Pod/리소스 조작
| 단축키 | 동작 |
|---|---|
d |
describe (Events까지 한 화면에) |
l |
logs (실시간 스트리밍) |
p |
직전 컨테이너 로그 (previous) |
s |
shell — exec -it bash/sh 진입 |
f |
port-forward (로컬 포트 프롬프트) |
e |
edit (YAML 인라인 수정) |
y |
YAML 뷰 (읽기 전용) |
Ctrl+K |
kill (리소스 삭제) |
3) 뷰 제어
| 단축키 | 동작 |
|---|---|
/ |
필터 — 이름으로 실시간 검색 |
Esc |
뒤로 가기 · 필터 해제 |
0~9 |
네임스페이스 숫자 전환 |
? |
전체 단축키 도움말 |
Space |
다중 선택 (Ctrl+D 로 일괄 삭제) |
:q |
종료 |
4) XRay 뷰 (리소스 관계 시각화)
| 단축키 | 동작 |
|---|---|
:xray pod |
Pod → Container → Volume → ConfigMap 트리 구조로 조회 |
xray는 한 번 써보면 빠져나올 수 없습니다. "이 Deployment가 쓰는 ConfigMap이 뭐지?"를 클릭 한 번(Enter)으로 드릴다운합니다.
실전 워크플로우 — "Pod가 죽었을 때"
kubectl 편에서 본 5단계 디버깅을 k9s로 하면 총 10초입니다.
1. k9s 실행 → k9s
2. Pod 화면 이동 → :pod
3. 문제 Pod 필터 → / nginx
4. describe 열기 → d (Events 즉시 확인)
5. 로그 보기 → l
6. 직전 로그 보기 (Crash인 경우) → p
7. 컨테이너 진입 (필요 시) → skubectl로 같은 작업을 하면 7~8개 명령을 쳐야 하는데, k9s는 키보드 7번입니다. 디버깅 루프의 마찰이 크게 줄어듭니다.
포트포워딩 실전
f 하나로 끝납니다.
:svc→ Service 목록- 원하는 Service 선택 →
f - 로컬 포트 입력 (예:
8080) → 엔터 - 자동으로 port-forward 시작, 브라우저에서
localhost:8080접속
종료도 Ctrl+C 한 번. 포트포워딩 창을 따로 관리할 필요가 없습니다.
커스터마이징 — 나에게 맞게 튜닝
1) Skin (테마)
~/.config/k9s/skins/ 에 YAML 추가하면 색상 테마 변경 가능합니다. 인기 스킨:
draculaone-darksolarized-darknord
k9s skins 레포에 공식 프리셋이 있습니다.
2) 리소스 별칭 (aliases)
자주 쓰는 리소스는 단축어로 만들 수 있습니다. ~/.config/k9s/aliases.yaml:
alias:
pp: v1/pods
dp: apps/v1/deployments
sec: v1/secrets이제 :pp 로 Pod 목록 이동이 됩니다.
3) 핫키 (hotkeys)
Function 키에 액션을 바인딩할 수 있습니다. ~/.config/k9s/hotkeys.yaml:
hotKeys:
shift-1:
shortCut: Shift-1
description: "View pods in prod ns"
command: "pod -n production"Shift+1 한 번에 prod 네임스페이스 Pod로 이동합니다. 반복 작업이 많다면 적극 활용하세요.
4) 플러그인 — stern, jq 연동 예시
~/.config/k9s/plugins.yaml에 외부 도구 바인딩 가능. 예: Pod 선택 상태에서 Shift+L을 누르면 stern으로 멀티 Pod 로그 스트리밍.
plugins:
stern:
shortCut: Shift-L
description: "Logs with stern"
scopes:
- po
command: stern
background: false
args:
- --tail
- "50"
- $FILTERkubectl vs k9s — 언제 뭘 쓰나?
둘 다 써야 합니다. 역할이 다릅니다.
| 상황 | 추천 | 이유 |
|---|---|---|
| 탐색·디버깅 | k9s | 실시간 뷰, 키 몇 개로 끝 |
| 자동화 스크립트 | kubectl | 파이프·jsonpath·exit code 처리 가능 |
| CI/CD 파이프라인 | kubectl | 비대화형, 재현 가능 |
| 장애 대응(온콜) | k9s | 빠른 Pod·로그·이벤트 스캔 |
| YAML 배포·apply | kubectl | 선언적 상태 관리 원칙 |
| 멀티 클러스터 모니터링 | k9s | :ctx 로 즉시 전환 가능 |
현실적 조합: 평소 모니터링·디버깅은 k9s, 배포·자동화는 kubectl. 실제 운영자들이 쓰는 패턴입니다.
자주 겪는 이슈 3가지
1) "context를 못 찾는다"
→ kubectl config current-context 먼저 확인. k9s는 kubectl과 같은 설정을 씁니다.
2) "네임스페이스가 자꾸 default로 돌아간다"
→ k9s 실행 시 -n <ns>로 고정. 또는 ~/.config/k9s/config.yaml에서 currentNamespace 지정.
3) "리소스가 너무 많아서 느리다"
→ refreshRate를 늘려서 리프레시 주기 조정 (기본 2초 → 5~10초). 대형 클러스터에서 권장.
# ~/.config/k9s/config.yaml
k9s:
refreshRate: 5
maxConnRetry: 5
enableMouse: falseFAQ
Q. 운영 환경에서 k9s 써도 되나요?
읽기(조회·로그)는 문제없습니다. 단, Ctrl+K(삭제)·e(edit)·s(shell) 같은 쓰기 액션은 RBAC로 제한하는 걸 권장합니다. 실수로 Pod를 지우는 걸 방지하기 위해, 운영 컨텍스트는 ClusterRole을 view 정도로 바인딩해두세요.
Q. Lens나 Headlamp 같은 GUI는 어떤가요?
k9s는 터미널·단축키 중심, Lens/Headlamp는 GUI 중심입니다. SSH 세션 안에서 쓸 거라면 k9s가 거의 유일한 선택입니다. 로컬 개발 중심이면 GUI 도구도 좋은 선택인데, 키보드만으로 속도를 내고 싶다면 k9s가 훨씬 빠릅니다.
Q. kubectl 안 써도 되나요?
아니요. 자동화·CI/CD·apply 기반 GitOps에서는 여전히 kubectl이 기본입니다. k9s는 탐색·디버깅 레이어라고 생각하세요. 둘 다 있어야 온전합니다.
Q. 로그를 파일로 저장하고 싶어요.
로그 뷰에서 s 키로 저장 가능합니다. 기본 저장 경로는 /tmp 하위. 또는 plugin에 kubectl logs ... > file.log 명령을 바인딩하는 방법도 있습니다.
마무리 — 다음 단계
k9s는 "도입 후 kubectl 쓰는 시간이 절반으로 줄었다"는 후기가 가장 많은 도구입니다. 체감 생산성 변화가 크기 때문에, 오늘 바로 설치해서 30분만 써보세요. 단축키 ? 한 번 누르고 d·l·f 세 개만 익혀도 효과가 즉시 나타납니다.
오늘 정리 핵심:
- k9s는 실시간 TUI 대시보드, kubectl과 역할 분담
- 단축키 20개 중
d / l / p / s / f / /이 6개가 하루의 80% :ctx·:ns·:xray는 멀티 클러스터 운영자의 필수- 커스터마이징(aliases·hotkeys·plugin)으로 반복 작업을 지속 줄이세요
시리즈 다음 주제
- Helm으로 K8S 패키지 관리하기
- HPA·VPA로 오토스케일링 구성
- Ingress + cert-manager로 HTTPS 자동화
- ArgoCD로 GitOps 배포 파이프라인
- kustomize로 환경별 YAML 관리
여러분은 어떤 k9s 단축키나 플러그인을 가장 유용하게 쓰고 계신가요? 댓글로 공유해주시면 다음 편에 반영하겠습니다.