Kubernetes 인시던트 트라이지
kubectl을 사용하여 Kubernetes 워크로드 및 네임스페이스의 읽기 전용 트라이지를 수행합니다.
지원:
- 자연어 입력 (인간 모드)
- 구조화된 JSON 입력 (자동화 모드)
이 스킬은 절대 클러스터 상태를 변경하지 않습니다.
도구 사용
이 스킬은 kubectl 명령어만 사용하여 cli_execute를 사용합니다.
Kubernetes와 상호 작용하기 위해 http_request나 web_search를 절대 사용하지 마십시오.
모든 클러스터 작업은 반드시 cli_execute 도구를 통해 kubectl로 수행되어야 합니다.
도구: k8s_triage
비정상 Kubernetes 워크로드, 파드 또는 네임스페이스를 진단합니다.
입력 모드
1) 인간 모드 (자연어)
입력은 일반 문자열입니다.
예시:
triage payments-prodtriage deployment payments-api in payments-prodwhy are pods pending in checkout-prod?investigate crashloop in payments-prodtriage pod api-7c9f6d7f86-abcde in payments-prodcheck rollout of deployment payments-api in prod
동작:
- 네임스페이스, 워크로드, 파드 또는 셀렉터 의도를 분석합니다.
- 네임스페이스가 생략된 경우,
$DEFAULT_NAMESPACE가 설정되어 있으면 사용합니다. - 모호한 경우, 기본적으로 네임스페이스 수준 트라이지를 수행합니다.
- 사용자가 JSON 필드를 기억하도록 요구하지 않습니다.
2) 자동화 모드 (구조화된 JSON)
입력 JSON 스키마:
{
"namespace": "payments-prod",
"workload_kind": "deployment",
"workload_name": "payments-api",
"pod_name": null,
"label_selector": null,
"include_logs": true,
"logs_tail_lines": 200,
"include_previous_logs": true,
"events_limit": 50,
"include_node_diagnostics": true,
"include_metrics": false,
"output_format": "markdown"
}
규칙:
namespace는 필수입니다.pod_name이 제공되면 → 파드 수준 트라이지.- 워크로드 필드가 제공되면 → 워크로드 수준 트라이지.
- 그 외 → 네임스페이스 스캔.
트라이지 프로세스
0단계 — 사전 조건
클러스터 접근 확인:
kubectl version --client
kubectl cluster-info
RBAC가 접근을 거부하는 경우:
- 허용된 작업으로 계속 진행합니다.
- 출력에서 거부된 명령어를 명시적으로 보고합니다.
1단계 — 빠른 상태 스냅샷
네임스페이스 범위:
kubectl get pods -n <ns> -o wide
kubectl get deploy,sts,ds,job,cronjob -n <ns>
워크로드 범위:
kubectl get <kind> <name> -n <ns>
kubectl rollout status <kind>/<name> -n <ns> --timeout=10s
다음 상태의 파드 선택:
- CrashLoopBackOff
- ImagePullBackOff
- ErrImagePull
- Pending / Unschedulable
- Error
- NotReady
- OOMKilled
- 높은 재시작 횟수
심층 트라이지를 $TRIAGE_MAX_PODS(기본값 5)로 제한합니다.
2단계 — 이벤트 타임라인
kubectl get events -n <ns> --sort-by=.lastTimestamp | tail -n <events_limit>
찾을 내용:
- FailedScheduling
- FailedMount
- Unhealthy (프로브 실패)
- Back-off pulling image
- Evicted
- 노드 압력 신호
3단계 — 파드 및 워크로드 설명
선택된 각 파드에 대해:
kubectl describe pod <pod> -n <ns>
캡처할 항목:
- 컨테이너 상태 및 이유
- 재시작 횟수
- 마지막 종료 이유
- 프로브 실패
- 볼륨 마운트 문제
- 노드 할당
- 테인트 / 톨러레이션
- 어피니티 제약 조건
워크로드 수준 트라이지인 경우:
kubectl describe <kind> <name> -n <ns>
4단계 — 노드 진단 (선택 사항)
kubectl get nodes -o wide
kubectl describe node <node>
확인할 내용:
- NotReady
- MemoryPressure
- DiskPressure
- PIDPressure
- 축출
5단계 — 로그 (선택 사항)
kubectl logs <pod> -n <ns> --all-containers --tail=<N>
재시작 루프가 있고 include_previous_logs=true인 경우:
kubectl logs <pod> -n <ns> --previous --all-containers --tail=<N>
규칙:
- CrashLoopBackOff의 경우 이전 로그를 선호합니다.
- 명백한 민감 패턴은 가립니다.
- 비밀 값을 절대 출력하지 않습니다.
6단계 — 선택적 메트릭
활성화된 경우:
kubectl top pods -n <ns>
kubectl top node
metrics-server를 사용할 수 없으면 정상적으로 건너뜁니다.
탐지 휴리스틱
발견된 문제를 다음으로 분류:
- 크래시루프 / 애플리케이션 크래시
- OOMKilled / 리소스 제한
- 이미지 가져오기 실패
- 스케줄링 제약
- 프로브 실패
- PVC / 볼륨 실패
- 노드 압력 / 축출
- 롤아웃 중단
- 알 수 없음 / 에스컬레이션 필요
각 문제에 대해 다음 제공:
- 가설
- 뒷받침하는 증거
- 신뢰도 점수 (0.0–1.0)
- 권장 다음 명령어
출력 구조
1) 인시던트 요약
- 네임스페이스
- 범위 (파드/워크로드/네임스페이스)
- 영향받은 리소스 수
- 타임스탬프
2) 주요 발견 사항
간결한 글머리 요약.
3) 가능한 근본 원인 (상위 3개)
각 항목:
- 설명
- 증거 발췌
- 신뢰도
- 권장 조치
4) 다음 명령어
복사 가능한 kubectl 명령어.
5) 증거 부록
- 이벤트 (최근)
- describe 발췌
- 로그 발췌
안전 제약 사항
이 스킬은 반드시:
- 읽기 전용 kubectl 작업만 수행해야 합니다.
- 다음을 절대 실행하지 않아야 합니다:
- apply
- patch
- delete
- exec
- port-forward
- scale
- rollout restart
- 비밀 값을 절대 출력하지 않아야 합니다.
- 전체 환경 변수를 덤프하지 않아야 합니다.
자율 호환성
이 스킬은 다음에 의해 호출되도록 설계되었습니다:
- k8s_alert_handler (경고 트리거 트라이지)
- k8s_patrol (예약된 순찰 스캔)
- 자연어 CLI를 통한 인간
다음 조건을 충족해야 합니다:
- 멱등성(idempotent)을 가져야 함
- 결정론적 핑거프린트를 생성해야 함
- 과도한 클러스터 부하를 피해야 함
- 심층 트라이지 범위를 제한해야 함