# K8S

> Kubernetes operational knowledge for accessing clusters, running kubectl, understanding Flux status, and navigating the homelab Kubernetes environment. Use when: (1) Accessing a cluster or checking connectivity, (2) Running kubectl commands or checking resource status, (3) Checking Flux reconciliation status or triggering reconciliation, (4) Finding internal service URLs, (5) Understanding cluster layout or resource types, (6) Researching unfamiliar Helm charts or services. Triggers: "kubectl", "kubeconfig", "flux get", "flux reconcile", "flux status", "cluster access", "internal URL", "service URL", "prometheus URL", "grafana URL", "helm release status", "check flux", "which cluster", "how to access", "port-forward"

- Skill: `ionfury/k8s` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add ionfury/k8s`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ionfury/k8s/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: ionfury (https://skillmd.com/u/ionfury)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ionfury/k8s

---


# ACCESSING CLUSTERS

The available clusters are `dev`, `integration`, and `live`.  Use the coresponding kube context for access.

# Common kubectl Patterns

| Command | Purpose |
|---------|---------|
| `kubectl get pods -n <ns>` | List pods in a namespace |
| `kubectl get pods -A` | List pods across all namespaces |
| `kubectl describe pod <pod> -n <ns>` | Detailed pod info with events |
| `kubectl logs <pod> -n <ns> --tail=100` | Recent logs from a pod |
| `kubectl logs <pod> -n <ns> --previous` | Logs from previous container instance |
| `kubectl get events -n <ns> --sort-by='.lastTimestamp'` | Recent events timeline |
| `kubectl top pods -n <ns>` | CPU/memory usage per pod |
| `kubectl top nodes` | CPU/memory usage per node |
| `kubectl get ns <ns> --show-labels` | Namespace labels (network policy profiles) |
| `kubectl explain <resource>` | API schema reference for a resource type |

# Flux GitOps Commands

```bash
# Check status
flux --context <cluster> get all
flux --context <cluster> get kustomizations
flux --context <cluster> get helmreleases -A

# Trigger reconciliation
flux --context <cluster> reconcile source git flux-system
flux --context <cluster> reconcile kustomization <name>
flux --context <cluster> reconcile helmrelease <name> -n <namespace>
```

## Flux Status Interpretation

| Status | Meaning | Action |
|--------|---------|--------|
| `Ready: True` | Reconciled and healthy | None |
| `Ready: False` | Failed to reconcile | Check the message/reason |
| `Stalled: True` | Stopped retrying after repeated failures | Suspend/resume to reset (see `sre` skill) |
| `Suspended: True` | Intentionally paused | Resume: `flux resume <type> <name>` |
| `Reconciling` | Actively being applied | Wait for completion |

# Researching Unfamiliar Services

When investigating unknown services, spawn a haiku agent to research documentation:

```
Task tool:
- subagent_type: "general-purpose"
- model: "haiku"
- prompt: "Research [service] troubleshooting docs. Focus on:
  1. Common failure modes
  2. Health indicators
  3. Configuration gotchas
  Start with: [docs-url]"
```

**Chart URL to Docs mapping:**

| Chart Source | Documentation |
|--------------|---------------|
| `charts.jetstack.io` | cert-manager.io/docs |
| `charts.longhorn.io` | longhorn.io/docs |
| `grafana.github.io` | grafana.com/docs |
| `prometheus-community.github.io` | prometheus.io/docs |

# Common Confusions

BAD: Use `helm list` to check Helm release status
GOOD: Use `kubectl get helmrelease -A` — Flux manages releases via CRDs, not Helm CLI

