Community코딩 & 개발github.com

initializ/k8s-incident-triage

Kubernetes 인시던트 트라이지를 위해 kubectl을 사용하는 읽기 전용 스킬입니다. 자연어 또는 구조화된 입력을 받아들여 근본 원인 가설, 증거 및 다음 단계 명령을 생성합니다.

k8s-incident-triage란 무엇인가요?

이 스킬은 Kubernetes 클러스터에서 워크로드, 파드, 네임스페이스의 비정상 상태를 진단하는 읽기 전용 트라이지를 수행합니다. 자연어(인간 모드)와 구조화된 JSON(자동화 모드)을 모두 지원하여, 개발자나 운영자가 kubectl 명령어를 직접 기억하지 않아도 됩니다. kubectl의 'describe', 'logs', 'get events' 등 읽기 전용 명령어만 사용하여 클러스터 상태를 변경하지 않으며, CrashLoopBackOff, ImagePullBackOff, OOMKilled, 스케줄링 실패 등 다양한 문제를 감지합니다. 또한 이벤트 타임라인, 파드 상세 정보, 노드 진단, 로그 분석을 체계적으로 수행하고, 각 문제에 대해 근본 원인 가설, 신뢰도 점수, 권장 명령어를 제공합니다. 환경 변수 DEFAULT_NAMESPACE와 TRIAGE_MAX_PODS를 통해 동작을 설정할 수 있으며, 알림 처리기나 정기 순찰 스캔과 같은 자동화된 시스템에서도 호출 가능하도록 설계되었습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/initializ/forge/tree/main/skills/k8s-incident-triage

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Kubernetes 인시던트 트라이지

kubectl을 사용하여 Kubernetes 워크로드 및 네임스페이스의 읽기 전용 트라이지를 수행합니다.

지원:

  • 자연어 입력 (인간 모드)
  • 구조화된 JSON 입력 (자동화 모드)

이 스킬은 절대 클러스터 상태를 변경하지 않습니다.


도구 사용

이 스킬은 kubectl 명령어만 사용하여 cli_execute를 사용합니다. Kubernetes와 상호 작용하기 위해 http_request나 web_search를 절대 사용하지 마십시오. 모든 클러스터 작업은 반드시 cli_execute 도구를 통해 kubectl로 수행되어야 합니다.


도구: k8s_triage

비정상 Kubernetes 워크로드, 파드 또는 네임스페이스를 진단합니다.


입력 모드

1) 인간 모드 (자연어)

입력은 일반 문자열입니다.

예시:

  • triage payments-prod
  • triage deployment payments-api in payments-prod
  • why are pods pending in checkout-prod?
  • investigate crashloop in payments-prod
  • triage pod api-7c9f6d7f86-abcde in payments-prod
  • check 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)을 가져야 함
  • 결정론적 핑거프린트를 생성해야 함
  • 과도한 클러스터 부하를 피해야 함
  • 심층 트라이지 범위를 제한해야 함

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬