Skip to content
Back to skills

K8s

ASecurity

MANDATORY parallel execution patterns, cluster overview script, -o json with jq filtering, batch operations, and common pitfalls

  • 6 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
toolsgoshellbashnodekubernetesapisecuritydocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add cloudthinker-ai/CloudSkills --skill k8s --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of K8s?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for K8s
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/cloudthinker-ai-k8s/badge)](https://www.skillsdirectory.com/skills/cloudthinker-ai-k8s)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: k8s
description: "MANDATORY parallel execution patterns, cluster overview script, -o json with jq filtering, batch operations, and common pitfalls"
connection_type: k8s
preload: false
---

# Kubernetes CLI Skill

Execute kubectl and helm commands with proper kubeconfig injection.

## Workflow

<critical>
**If no `[cached_from_skill:k8s:discover]` context exists, MUST run the discovery script first:**

```bash
bun run ./_skills/connections/k8s/k8s/scripts/discover.ts
```

The output is auto-cached. Do not re-run unless user explicitly requests refresh.
</critical>

## CLI Tips

### Recommended First Step

Run the cluster discovery script (or the shell script directly):

```bash
bun run ./_skills/connections/k8s/k8s/scripts/discover.ts
# or
./get_k8s_cluster_overview.sh
```

This provides comprehensive cluster analysis (nodes, pods, resources, services, events) in a single parallelized call.
Only run targeted kubectl commands AFTER reviewing the overview output for specific deep-dives.

### Critical Requirements

🚨 MANDATORY: ALL independent kubectl operations MUST run in parallel using background jobs (&) + wait

- FORBIDDEN: Sequential loops `for item in $items; do kubectl get $item; done`
- REQUIRED: Background jobs `for item in $items; do kubectl get $item & done; wait`
- Read-only commands only (get, describe, top, logs) - never modify resources

### Parallel Execution

When to parallelize:

- Multiple namespaces/nodes/pods/resources β†’ ALWAYS parallel
- Operations with data dependencies β†’ Sequential only

Pattern:

```bash
# CORRECT: Parallel (0.5s for 30 pods)
for pod in $pods; do kubectl get pod "$pod" -n "$ns" & done; wait

# WRONG: Sequential (15s for 30 pods)
for pod in $pods; do kubectl get pod "$pod" -n "$ns"; done
```

Best practice - Batch:

```bash
# Fastest: Single kubectl call per namespace
kubectl get pods -n "$ns" -o json | jq '.items[] | {name, phase, ready}'
```

### Output Format

- Complex data: `-o json` with jq (better AI parsing)
  `kubectl get pods -n $ns -o json | jq -r '.items[] | "\(.metadata.name)\t\(.status.phase)"'`
- Simple lists: `-o jsonpath` or `--no-headers` (token efficient)
  `kubectl get pods -n $ns -o jsonpath='{.items[*].metadata.name}'`
- CRITICAL: Always filter JSON with jq - never dump raw output
- Machine-readable only: no decorative formatting, never expose credentials

### Optimization Rules

- Batch operations: Single `kubectl get -o json` instead of multiple calls
  BAD: `kubectl get node $n -o jsonpath='{.status.nodeInfo.machineID}'; kubectl get node $n -o jsonpath='{.status.nodeInfo.kubeletVersion}'`
  GOOD: `kubectl get node $n -o json | jq '{machineID: .status.nodeInfo.machineID, kubeletVersion: .status.nodeInfo.kubeletVersion}'`
- Cache namespaces: Get once and reuse
- Filter at source: Use `--field-selector` and `--selector` before post-processing
- Resource usage: `kubectl top` requires metrics-server; handle gracefully if unavailable

### Common Patterns

- List: `kubectl get <resource> -n <ns> -o json | jq -r '.items[] | ...'`
- Filter by label: `kubectl get pods -n <ns> -l app=myapp`
- Filter by field: `kubectl get pods --field-selector=status.phase=Running`
- Events: `kubectl get events -n <ns> --sort-by='.lastTimestamp'`
- Logs: `kubectl logs <pod> -n <ns> --tail=100` (use cautiously)

### Common Pitfalls

- Multiple calls for same resource β†’ Use single `-o json` + jq
- Not caching namespace list β†’ Cache once
- Sequential namespace processing β†’ Always parallelize
- Raw JSON dumps β†’ Always filter with jq first
- `kubectl describe` verbose β†’ Use `kubectl get -o json | jq` instead

### Helper Script

`./get_k8s_cluster_overview.sh` (in sandbox home) - YOUR GO-TO STARTING POINT
Provides: cluster info, nodes, pods, resources, namespaces, services, events
Usage: `./get_k8s_cluster_overview.sh`
Output: Structured JSON or machine-readable text (all operations parallelized)
TIP: Run this FIRST, then drill down into specific areas based on findings

## Anti-Hallucination Rules

1. **NEVER assume resource names** β€” always discover via CLI/API in Phase 1 before referencing in Phase 2.
2. **NEVER fabricate metric names or dimensions** β€” verify against the service documentation or `--help` output.
3. **NEVER mix CLI commands between service versions** β€” confirm which version/API you are targeting.
4. **ALWAYS use the discovery β†’ verify β†’ analyze chain** β€” every resource referenced must have been discovered first.
5. **ALWAYS handle empty results gracefully** β€” an empty response is valid data, not an error to retry.

## Counter-Rationalizations

| Shortcut | Counter | Why |
|----------|---------|-----|
| "I'll skip discovery and check known resources" | Always run Phase 1 discovery first | Resource names change, new resources appear β€” assumed names cause errors |
| "The user only asked for a quick check" | Follow the full discovery β†’ analysis flow | Quick checks miss critical issues; structured analysis catches silent failures |
| "Default configuration is probably fine" | Audit configuration explicitly | Defaults often leave logging, security, and optimization features disabled |
| "Metrics aren't needed for this" | Always check relevant metrics when available | API/CLI responses show current state; metrics reveal trends and intermittent issues |
| "I don't have access to that" | Try the command and report the actual error | Assumed permission failures prevent useful investigation; actual errors are informative |

Files in this skill

  • SKILL.md5.4 KB
  • scripts/discover.ts6.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…