kubectl events, 아직도 get events 쓰세요?
오늘 후배가 kubectl get events --sort-by='.metadata.creationTimestamp' -n prod 를 또 한참 두드리고 있길래 옆에서 한마디 했다. "그거 그냥 kubectl events -n prod 하면 돼요." 진짜 표정이 굳더라. 의외로 모르는 분 꽤 많아서 짧게 정리한다.
kubectl events, 그게 뭔데
kubectl events 는 events.k8s.io/v1 API 가 v1.19에서 들어오면서 별도로 추가된 명령어다. 처음에는 alpha였는데 이제는 우리가 운영하는 1.32 정도 클러스터에서는 그냥 당연히 쓸 수 있다. kubectl get events 가 events.k8s.io/v1 와 core/v1 둘 다 보여주는 만능 명령이라면, kubectl events 는 트러블슈팅 동선에 맞춰 따로 만들어진 도구라고 보면 된다.
차이가 가장 크게 체감되는 건 세 가지다.
# 1. 기본이 시간순 정렬. --sort-by 안 붙여도 된다.
kubectl events -n prod
# 2. 특정 객체만. describe 안 해도 그 리소스에 묶인 이벤트만 본다.
kubectl events --for pod/my-pod-abc123 -n prod
# 3. 워치. tail -f 처럼 새 이벤트 흘러오는 거 본다.
kubectl events -w -n prod
특히 두 번째, --for 옵션이 진짜 편하다. 예전엔 pod 이름으로 grep 해서 봤는데, 그러면 같은 이름이 들어간 다른 이벤트(예: ReplicaSet 이벤트)도 같이 잡혀서 시끄럽다. --for pod/... 는 정확히 그 객체가 regarding 으로 잡힌 것만 보여준다.
get events 가 아예 필요 없는가
그건 아니다. 두 경우엔 여전히 get events 가 낫다.
하나는 -o json 이나 -o jsonpath=... 같은 출력 포맷 변형. kubectl events 도 -o json 은 지원하지만, kubectl 내부 구조체 그대로 던지지 않아서 jq 파이프로 쓰던 스크립트가 깨질 수 있다. 자동화 스크립트는 그냥 get events 가 안전하다.
또 하나는 클러스터 전 범위 조회. kubectl get events --all-namespaces 는 잘 동작하는데, kubectl events 에서는 -A 가 좀 어색하게 잘릴 때가 있다. 클러스터 한 바퀴 훑을 땐 그냥 익숙한 거 쓰는 게 낫다.
사실 더 좋은 거 하나
kubectl events -w --for pod/... 이 조합이 진짜 디버깅 콤보다. 새 파드 띄우면서 이벤트가 실시간으로 흘러오는 거 보면, ImagePullBackOff 인지 FailedScheduling 인지 OOMKilled 직전 단계인지 한 화면에 다 잡힌다. kubectl describe 를 5초마다 새로 치는 후배에게 꼭 알려주자.
그래서 결론은 짧다. 한 줄짜리 alias 정도는 등록해 둘 만하다.
alias kev='kubectl events --for'
# kev pod/my-pod-abc123 -n prod
혹시 다른 잘 쓰는 옵션 있으신 분 있으면 댓글로 알려주세요. 저는 -w 모드에서 --field-selector type=Warning 도 가끔 씁니다.