kubectl 17

kubectl events --for, 이거 모르는 분 꽤 많더라

트러블슈팅 하다가 오늘 알게 됐다. 정확히 말하면 "알고는 있었는데 안 쓰고 있었다"에 가깝다. kubectl events --for 얘기다.왜 이제서야 쓰나지금까지 특정 Pod의 이벤트만 보려면 이렇게 했다.kubectl get events --field-selector involvedObject.name=web-pod-abc,involvedObject.kind=Pod -n prod솔직히 매번 field-selector 문법이 헷갈렸다. involvedObject.name이었나 regarding.name이었나. Pod 이름을 오타 내면 결과가 조용히 비어있고, 그러면 또 오타를 의심하게 된다. 삽질 시간의 절반이 이 selector 맞추기였다.그런데 kubectl events는 v1.28에서 GA된 이..

IT/Kubernets 2026.08.23

kubectl debug --profile, 이거 모르는 사람 꽤 많더라

어제 팀원이 distroless 이미지로 뜬 파드에 붙어서 tcpdump를 뜨려다가 삽질했다. kubectl exec 안 되는 건 알아서 kubectl debug까지는 갔는데, 그 다음에 막혔다. 컨테이너는 붙었는데 /proc/1 못 읽고, 네트워크 인터페이스도 안 보이고. "이거 왜 이러지?" 하길래 옆에서 --profile=sysadmin 하나 붙여줬더니 바로 됐다.이 옵션 모르는 사람이 생각보다 많아서 짧게 정리한다.profile이 뭐냐kubectl debug는 기본적으로 ephemeral container를 파드에 끼워넣는다. 근데 이 컨테이너의 securityContext를 어떻게 세팅할지가 문제다. 그냥 붙이면 non-root에 capability 다 벗겨진 상태로 뜬다. nsenter, tc..

IT/Kubernets 2026.08.11

kubectl debug로 distroless 파드에 셸 붙이기

이거 모르는 분 꽤 많더라. 요즘 이미지 최적화한다고 distroless로 다 갈아엎는 팀이 늘어나면서, 정작 장애 났을 때 파드 안에 들어갈 방법이 없어서 당황하는 경우를 몇 번 봤다. kubectl exec 때려도 sh not found 뜨고, 로그만 봐서는 원인 파악이 안 되는 상황.kubectl debug 로 ephemeral container 붙이면 된다. 1.25에서 GA 됐고 지금은 안정적이다. 오늘 자주 쓰는 패턴 3개만 정리한다.1. distroless 파드에 셸 붙이기가장 흔한 케이스. target 컨테이너의 프로세스/네트워크 네임스페이스를 공유하는 임시 컨테이너를 하나 띄운다.kubectl debug -it my-pod \ --image=nicolaka/netshoot \ --ta..

IT/Kubernets 2026.08.03

kubectl debug --profile, 이거 모르면 매번 privileged 파드 만들고 있는 거다

오늘 사내 채널에서 후배가 "distroless 컨테이너 파드 안에서 tcpdump 뜨고 싶은데 어떻게 해요?" 라고 물어봐서 답해주다가, 생각보다 kubectl debug --profile 옵션을 모르는 사람이 많다는 걸 알았다. 나도 예전엔 급하면 그냥 securityContext.privileged: true 넣은 사이드카 파드 하나 붙여서 디버깅했는데, 지금은 그럴 필요가 없다.프로필이 뭘 해주냐면kubectl debug로 ephemeral container를 붙일 때 --profile 플래그 하나로 필요한 capability 조합을 미리 세팅해준다. 손으로 securityContext YAML을 쓰지 않아도 된다는 얘기다. 현재 지원되는 프로필은 다섯 개다.general — 일반적인 디버깅용 기..

IT/Kubernets 2026.07.20

distroless 파드 디버깅, kubectl debug --profile 만 알면 된다

이거 모르는 분 꽤 많더라. 어제 팀원이 "distroless 이미지로 바꿨더니 이제 파드 안 들여다볼 수가 없어요"라고 물어봐서, 그 자리에서 알려준 팁. 사실 별 것도 아닌데 정리해두면 다음에 또 물어보는 사람 나오니까.상황distroless 베이스로 만든 컨테이너는 셸도 없고 cat도 없다. 그러니 kubectl exec -it pod -- sh 는 당연히 안 먹힌다. 예전에는 어쩔 수 없이 debug용 이미지 하나 더 만들거나, 파드를 아예 복제해서 이미지만 갈아끼우거나 했었다. 근데 Kubernetes 1.25부터 ephemeral container가 stable 됐고, kubectl debug 로 훨씬 편해졌다.문제는 그냥 kubectl debug pod/foo -it --image=busyb..

IT/컨테이너 2026.07.06

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 ..

IT/Kubernets 2026.06.26

kubectl .kuberc, 팀 kubeconfig 안 건드리고 내 alias 관리하기

오늘 알게 된 건데, 의외로 모르는 분 꽤 있더라. kubectl 1.33부터 들어온 .kuberc 얘기.팀 단위로 kubeconfig를 공유해 본 사람은 다 한 번씩 짜증 났을 거다. 누군가 current-context를 prod로 바꿔놓고 그대로 푸시한 다음, 다른 사람이 dev에서 작업하다 prod 클러스터에 명령 날리는 그런 사고. 또 한 명은 alias k=kubectl을 셸에 박아두고, 다른 한 명은 kubectl get po -o wide를 매일 손가락으로 치고 있고. 개인 취향과 공용 자격증명이 같은 파일에 섞여 있는 게 문제다..kuberc(아직 alpha) 가 그 부분을 분리해 준다. ~/.kube/config에는 클러스터/사용자/컨텍스트만 두고, 내 개인 alias나 기본 플래그는 ~..

IT/Kubernets 2026.06.25

kubectl debug, --copy-to 쓰지 마세요 (production에서는)

오늘 알게 된 건데, 이거 모르는 분 의외로 많더라. kubectl debug 쓸 때 --copy-to 옵션 말이다.distroless 컨테이너 디버깅 글들 검색하면 거의 다 --copy-to 예제가 나온다. 근데 운영 파드를 진짜로 디버깅해본 분들은 알겠지만, 이게 좀 위험하다.두 가지 모드, 뭐가 다른가kubectl debug는 크게 두 가지로 쓸 수 있다.1. ephemeral container 주입 (기본)kubectl debug -it my-pod \ --image=busybox:1.36 \ --target=app원본 파드에 임시 컨테이너를 하나 더 끼워 넣는다. PID/network namespace를 공유하니까 ps, netstat, /proc/$PID/... 다 보인다. 원본 컨테이너는..

IT/Kubernets 2026.06.22

kubectl kuberc, 이제 alias 셸에 박지 말자

오늘 알게 된 건데, 1.34부터 kuberc가 beta 승격됐다. 이게 뭐냐면, kubectl 전용 사용자 설정 파일이다. 별칭하고 기본 옵션을 따로 관리할 수 있게 해준다.솔직히 우리 팀은 ~/.zshrc나 ~/.bashrc에 alias k=kubectl, alias kgp='kubectl get pods' 같은 걸 한 30줄씩 박아두고 살았는데, 이거 좀 지저분하다. 새 노트북 받을 때마다 dotfiles 복사하고, 팀 신입한테 "이거 깔아라" 시키는 것도 일이다.kuberc는 그 자리를 대체할 수 있는 공식 방법이다. kubectl 자체가 읽어서 처리한다.어떻게 생겼나~/.kube/kuberc 한 파일이다. 위치만 약속하면 끝.apiVersion: kubectl.config.k8s.io/v1bet..

IT/Kubernets 2026.06.20

Distroless Pod에 ephemeral container를 붙일 때, 안에서 일어나는 일

Distroless 이미지는 좋다. CVE 스캔 결과가 깨끗하고, attack surface가 작고, 이미지 크기도 작다. 그런데 사고가 났을 때가 문제다. sh도 없고 curl도 없고 ls도 없다. 컨테이너 안에 들어가서 뭔가 보고 싶어도 들어갈 수단 자체가 없는 셈이다.kubectl debug 한 줄이면 끝나는 일이긴 하다. -it --image=nicolaka/netshoot --target=app. 이렇게 치면 netshoot 컨테이너가 붙고, ps도 보이고, tcpdump도 된다. 신기하다. 분명히 distroless 컨테이너 안에는 셸이 없는데 어떻게 그 컨테이너의 프로세스를 들여다보고 있는 걸까. 이게 사실 처음 봤을 때 좀 헷갈렸다. 그래서 한번 파봤다.표면적으로는 pod.spec.ephe..

IT/Kubernets 2026.06.16