🔎 kubectl run에서 -it는 로그를 보기 위해 필요한가?

2026. 2. 21. 15:43k8s

“kubectl run에서 -it는 로그를 위해 필요한가?”

운영자 관점에서 오해 정리 중심으로 써줄게.
티스토리에 바로 올려도 자연스럽게 읽히도록 구성한다.


Kubernetes에서 테스트용 Pod를 실행할 때 이런 명령을 자주 사용한다.

kubectl run busybox --image=busybox -it --restart=Never -- echo "hello world"

여기서 많은 사람들이 궁금해한다.

“-it가 없으면 로그가 안 보이는 건가?”

결론부터 말하면:

❌ 로그 생성을 위해 필요한 옵션은 아니다.
⭕ 터미널에 바로 출력하기 위해 사용하는 옵션이다.


📌 기본 개념 정리

컨테이너의 STDOUT 출력은 항상 로그로 저장된다.

-it는 로그 생성 여부와는 관계가 없다.

-it의 의미는 다음과 같다.

옵션 의미
-i STDIN 연결
-t TTY 할당

즉, 현재 터미널과 컨테이너를 직접 연결하는 옵션이다.


1️⃣ -it 없이 실행하면?

kubectl run busybox --image=busybox --restart=Never -- echo "hello world"

동작 흐름:

  1. Pod 생성
  2. echo 실행
  3. 컨테이너 종료
  4. 출력은 로그로 저장됨

하지만 터미널에는 아무것도 바로 보이지 않는다.

출력을 보려면:

kubectl logs busybox

를 실행해야 한다.


2️⃣ -it를 붙이면?

kubectl run busybox --image=busybox -it --restart=Never -- echo "hello world"

동작 흐름:

  1. Pod 생성
  2. STDOUT이 현재 터미널에 연결됨
  3. 출력이 즉시 표시됨
  4. 컨테이너 종료

즉,

로그는 항상 생성되지만
-it가 있어야 터미널에 바로 출력된다.


📊 비교 정리

구분 -it 없음 -it 있음
로그 생성 O O
터미널 즉시 출력 X O
인터랙티브 가능 X O

🔥 언제 -it가 반드시 필요한가?

1️⃣ 쉘 실행할 때

kubectl run busybox -it --image=busybox --restart=Never -- sh

TTY가 없으면 쉘이 바로 종료될 수 있다.


2️⃣ 인터랙티브 명령 실행

  • bash
  • sh
  • mysql client
  • top
  • vi

이런 명령들은 TTY가 필요하다.


🧠 운영 관점에서 이해해야 할 것

  • -it는 로그를 만들기 위한 옵션이 아니다.
  • STDOUT은 항상 로그로 남는다.
  • 단지 터미널에 attach할지 말지의 차이이다.

테스트용 1회성 실행이라면:

kubectl run tmp --image=busybox -it --rm --restart=Never -- echo "hello world"

처럼 사용하는 것이 가장 깔끔하다.


🎯 한 줄 정리

-it는 로그 옵션이 아니라 “터미널 연결 옵션”이다.

이 차이를 이해하면 kubectl run, kubectl exec, kubectl attach의 동작도 자연스럽게 이해된다.