CtrlK
BlogDocsLog inGet started
Tessl Logo

pantheon-ai/k8s-debug

Comprehensive Kubernetes debugging and troubleshooting toolkit. Use this skill when diagnosing Kubernetes cluster issues, debugging failing pods, investigating network connectivity problems, analyzing resource usage, troubleshooting deployments, or performing cluster health checks.

Overall
score

93%

Does it follow best practices?

Validation for skill structure

Overview
Skills
Evals
Files

pod_diagnostics.pyscripts/

#!/usr/bin/env python3
"""
Kubernetes Pod Diagnostics Script
Gathers comprehensive diagnostic information about a specific pod
"""

import subprocess
import json
import sys
import argparse
from datetime import datetime


def run_kubectl(cmd):
    """Execute kubectl command and return output"""
    try:
        result = subprocess.run(
            cmd,
            shell=True,
            capture_output=True,
            text=True,
            timeout=30
        )
        return result.stdout, result.stderr, result.returncode
    except subprocess.TimeoutExpired:
        return "", "Command timed out", 1


def get_pod_info(pod_name, namespace="default"):
    """Gather comprehensive pod diagnostic information"""

    print(f"\n{'='*80}")
    print(f"Pod Diagnostics for: {pod_name} (namespace: {namespace})")
    print(f"Timestamp: {datetime.now().isoformat()}")
    print(f"{'='*80}\n")

    # Pod Status
    print("\n## POD STATUS ##")
    stdout, stderr, _ = run_kubectl(f"kubectl get pod {pod_name} -n {namespace} -o wide")
    print(stdout or stderr)

    # Pod Description
    print("\n## POD DESCRIPTION ##")
    stdout, stderr, _ = run_kubectl(f"kubectl describe pod {pod_name} -n {namespace}")
    print(stdout or stderr)

    # Pod YAML
    print("\n## POD YAML ##")
    stdout, stderr, _ = run_kubectl(f"kubectl get pod {pod_name} -n {namespace} -o yaml")
    print(stdout or stderr)

    # Events related to the pod
    print("\n## RECENT EVENTS ##")
    stdout, stderr, _ = run_kubectl(
        f"kubectl get events -n {namespace} --field-selector involvedObject.name={pod_name} --sort-by='.lastTimestamp'"
    )
    print(stdout or stderr)

    # Container logs (all containers)
    print("\n## CONTAINER LOGS ##")
    stdout, _, _ = run_kubectl(f"kubectl get pod {pod_name} -n {namespace} -o jsonpath='{{.spec.containers[*].name}}'")
    containers = stdout.strip().split()

    for container in containers:
        print(f"\n### Container: {container} ###")
        stdout, stderr, _ = run_kubectl(f"kubectl logs {pod_name} -n {namespace} -c {container} --tail=100")
        print(stdout or stderr)

        # Previous logs if container restarted
        print(f"\n### Previous logs for: {container} ###")
        stdout, stderr, _ = run_kubectl(f"kubectl logs {pod_name} -n {namespace} -c {container} --previous --tail=50 2>&1")
        if "previous terminated container" not in stderr.lower():
            print(stdout or stderr)

    # Resource usage
    print("\n## RESOURCE USAGE ##")
    stdout, stderr, _ = run_kubectl(f"kubectl top pod {pod_name} -n {namespace} --containers 2>&1")
    print(stdout or stderr)

    # Node information
    print("\n## NODE INFORMATION ##")
    stdout, _, _ = run_kubectl(f"kubectl get pod {pod_name} -n {namespace} -o jsonpath='{{.spec.nodeName}}'")
    node_name = stdout.strip()
    if node_name:
        print(f"Pod is running on node: {node_name}")
        stdout, stderr, _ = run_kubectl(f"kubectl describe node {node_name}")
        print(stdout or stderr)


def main():
    parser = argparse.ArgumentParser(description='Gather Kubernetes pod diagnostics')
    parser.add_argument('pod_name', help='Name of the pod to diagnose')
    parser.add_argument('-n', '--namespace', default='default', help='Namespace (default: default)')
    parser.add_argument('-o', '--output', help='Output file path (optional)')

    args = parser.parse_args()

    if args.output:
        sys.stdout = open(args.output, 'w')

    get_pod_info(args.pod_name, args.namespace)

    if args.output:
        sys.stdout.close()
        print(f"\nDiagnostics written to: {args.output}", file=sys.stderr)


if __name__ == "__main__":
    main()

Install with Tessl CLI

npx tessl i pantheon-ai/k8s-debug@0.1.0

SKILL.md

tile.json