Events
쿠버네티스 리소스 타입 중 하나로 다른 리소스의 상태 변화, 에러 등 시스템에 특정 메시지를 전파해야 할 때 자동으로 만들어진다.
쿠버네티스 클러스터를 개발하고 운영하면서 디버깅할 때 유용하다.
Events 조회
Events 리소스에 대해 알지 못해도 한 번쯤은 이미 봤을 텐데, describe 명령어로 확인할 수 있기 때문이다.
Events 항목에 나열된 목록이 바로 Events 리소스에 해당한다.
다른 리소스와 마찬가지로 get 명령으로도 조회할 수 있다.
kubectl get events
--field-selector 옵션을 사용하면 원하는 정보만을 찾아볼 수 있다.
# Warning 유형만 확인
kubectl get events --field-selector type=Warning
# Node에서 발생한 이벤트 제외
kubectl get events --field-selector involvedObject.kind!=Node
# nginx Pod에서 발생한 이벤트
kubectl get events --field-selector involvedObject.kind=Pod,involvedObject.name=nginx
Events는 일종의 로그와 비슷한 역할이기 때문에 다른 리소스와 다르게 계속 유지되지 않는다. 기본적으로 1시간 동안 유지되었다가 자동으로 삭제한다.
필드
Events 리소스는 아래와 같은 정보를 가진다.
- Last Seen : 이벤트가 발생한 시점
- Type : 이벤트 유형. 이미지 pull, deployments 업데이트 등 단순 정보성 이벤트, Pod 오류와 같은 경고성 이벤트, node Notready와 같은 오류 이벤트가 존재한다.
- Reason : 이벤트가 발생한 이유. 별도의 형식 없이 사람이 이해할 수 있는 128자 이하의 문자열이다.
- Object : 이벤트가 발생한 객체
- Message : 이벤트 메시지
중요 이벤트
쿠버네티스에는 수많은 종류의 이벤트가 있지만, 아래의 이벤트는 매우 중요하다.
이벤트 | 발생 상황 |
CrashLoopBackOff | 포드가 시작 후 충돌로 인해 재시작을 반복하는 경우에 발생한다. |
ImagePullBackOff | 이미지 pull 불가 시 발생한다. |
Evicted | 노드가 CPU, MEM 등 리소스를 확보하기 위해 포드를 삭제해야 할 때에 발생한다. 다른 노드에 포드를 스케쥴링해야 한다. |
FailedMount / FailedAttachVolume | PV에 접근할수 없는 경우 발생한다. |
FailedSchedulingEvents | 스케쥴러가 포드를 실행할 노드를 찾을 수 없는 경우에 발생한다. |
NodeNotReady | 노드를 사용해 포트를 실행할 수 없을 때 발생한다. |
참고 문서
https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/
https://isitobservable.io/observability/kubernetes/how-to-collect-kubernetes-events