Kubernetes Platform
Treat the cluster like a product, not a toy. Workload teams should ship via a paved path (Helm/Kustomize + GitOps + policy) and never need to know which CNI you chose. Operators get day-2 covered: autoscaling, upgrades, security, multi-tenancy.
Stack Baseline (2026)
| Concern |
Recommended |
| Distribution |
EKS 1.32, AKS 1.32, GKE 1.32 (or Autopilot/Fargate for low-ops) |
| Cluster IaC |
Terraform + EKS Blueprints / AKS Bicep / GKE Terraform modules; Cluster API for fleets |
| GitOps |
Argo CD 3.x or Flux 2.x; ApplicationSets for fleet rollouts |
| Packaging |
Helm 3 + Kustomize overlays, or Timoni (CUE) for stricter typing |
| Service mesh (only if needed) |
Istio Ambient, Linkerd 2.x, Cilium service mesh |
| Networking |
Cilium CNI (eBPF), NetworkPolicy default-deny |
| Ingress |
Gateway API 1.2 (HTTPRoute), or NGINX/Envoy/Contour |
| Autoscaling |
Karpenter (AWS) / Cluster Autoscaler / GKE Autopilot; HPA + KEDA for events |
| Policy |
Kyverno (preferred) or Gatekeeper/OPA; Pod Security Admission restricted |
| Supply chain |
Sigstore (cosign) signing + verification, SLSA L3 build, SBOM (CycloneDX) |
| Runtime security |
Falco, Tetragon, AWS GuardDuty for EKS |
| Observability |
OpenTelemetry Operator, Prometheus + Mimir/Thanos, Loki, Tempo, Pixie |
| Progressive delivery |
Argo Rollouts or Flagger (canary, blue-green, analysis) |
| Secrets |
External Secrets Operator → Vault / KMS / Key Vault / Secret Manager |
| Cost |
OpenCost, Karpenter consolidation, Spot/Preemptible for stateless |
When to Use
- Multiple teams need isolated workloads on shared infra.
- Per-PR preview environments at scale.
- Need horizontal scaling beyond what PaaS offers.
- Standardizing on portable runtime across clouds.
Don't Use When
- One small service, one team — a managed PaaS (Cloud Run, Container Apps, Render) is cheaper end-to-end.
- No platform team to own day-2.
Prerequisites
- Cloud landing zone exists (
../landing-zones/SKILL.md).
- IdP federation in place for cluster RBAC.
- Container registry with vulnerability scanning.
- CI/CD with OIDC to the cluster (no static kubeconfigs).
Inputs the Agent Should Gather
- Cloud(s), region(s), HA target.
- Tenant model: namespace per team vs cluster per environment vs vCluster.
- Compliance scope (PCI / HIPAA / FedRAMP).
- Workload mix: stateless web, batch, GPU, stateful.
- Existing tooling investments (Argo vs Flux, Helm vs Kustomize).
Instructions
1. Cluster topology
- ≥ 1 cluster per environment (prod, non-prod, sandbox); one cluster per region for prod HA.
- Three control-plane AZs; nodes in ≥ 2 AZs per nodegroup.
- Reserve a
system nodegroup with taints for platform addons.
- Use Karpenter / Autopilot; avoid hand-tuned ASGs.
2. Multi-tenancy via namespaces + policy
# Kyverno: enforce required labels and resource limits per namespace
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata: { name: tenant-baseline }
spec:
validationFailureAction: Enforce
rules:
- name: require-owner-and-cost-center
match: { any: [{ resources: { kinds: [Namespace] } }] }
validate:
message: "Namespace must have owner and cost-center labels"
pattern:
metadata:
labels:
owner: "?*"
cost-center: "?*"
- name: require-resource-limits
match: { any: [{ resources: { kinds: [Pod] } }] }
validate:
message: "All containers need CPU and memory limits"
pattern:
spec:
containers:
- resources:
limits: { cpu: "?*", memory: "?*" }
requests: { cpu: "?*", memory: "?*" }
Combine with ResourceQuota, LimitRange, and NetworkPolicy default-deny per namespace.
3. GitOps as the only deploy path
# Argo CD ApplicationSet: one app per env per service via PR labels
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata: { name: payments }
spec:
generators:
- matrix:
generators:
- list:
elements:
- { env: dev, cluster: dev-eu }
- { env: prod, cluster: prod-eu }
- git:
repoURL: https://github.com/org/payments
revision: HEAD
files: [{ path: "deploy/{{env}}/values.yaml" }]
template:
metadata: { name: "payments-{{env}}" }
spec:
project: payments
source:
repoURL: https://github.com/org/payments
path: charts/payments
helm: { valueFiles: ["../deploy/{{env}}/values.yaml"] }
destination: { server: "{{cluster}}", namespace: payments }
syncPolicy: { automated: { prune: true, selfHeal: true } }
No kubectl apply from laptops in any environment.
4. Supply-chain trust
- Build images with reproducible builders (Docker BuildKit, ko, Buildpacks).
- Sign with cosign (keyless via OIDC).
- Generate SBOM (
syft, cyclonedx).
- Admission verifies signature + provenance via Kyverno
verifyImages or Sigstore policy-controller.
- Fail closed on unsigned images in prod.
5. Progressive delivery
# Argo Rollouts canary with analysis
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata: { name: api }
spec:
strategy:
canary:
steps:
- setWeight: 10
- pause: { duration: 5m }
- analysis:
templates: [{ templateName: success-rate }]
args: [{ name: service, value: api }]
- setWeight: 50
- pause: { duration: 10m }
Analysis template queries Prometheus burn rate; auto-rollback on failure.
6. Day-2 operations
- Upgrades: N-1 always supported; rehearse on non-prod monthly.
- Backups: Velero for cluster state; provider snapshots for PVs.
- Drains: PodDisruptionBudgets on every workload.
- Observability: OTel Collector DaemonSet; one tracing/metrics/logging backend.
- Cost: OpenCost dashboard per namespace; Karpenter consolidation.
7. Security baseline
- Pod Security Admission
restricted cluster-wide.
- Default-deny NetworkPolicy in every namespace.
- IRSA / Workload Identity / Azure Workload Identity — no node IAM.
- External Secrets Operator; never
kubectl create secret from laptops.
- Falco / Tetragon for runtime detection routed to SIEM.
Common Pitfalls
| Pitfall |
Why it bites |
Fix |
| One mega-cluster for all envs |
Blast radius; upgrades terrifying |
Cluster per env, fleet via GitOps |
| Service mesh by default |
High ops cost, unclear value |
Add only when mTLS / advanced traffic policy is required |
Manual kubectl in prod |
Drift, no audit |
GitOps only; kubectl read-only |
latest image tags |
Non-reproducible deploys |
Pin by digest; signature-verified |
| Default-allow NetworkPolicy |
Lateral movement on compromise |
Default-deny per namespace |
| Hand-rolled autoscaling |
Slow, expensive |
Karpenter / Autopilot |
| Secrets in Helm values |
Leak via Git, Argo UI |
External Secrets Operator |
| No upgrade cadence |
Stuck on EOL versions |
Quarterly minor upgrade rehearsed |
Output Format
- Cluster topology diagram (envs × regions × nodegroups).
- Tenant model + namespace baseline (quotas, policies, network).
- GitOps repo layout (app of apps / ApplicationSets).
- Supply-chain pipeline: build → sign → SBOM → admit.
- Progressive delivery template.
- Day-2 runbook index (upgrade, backup, incident, drain).
- Cost allocation model.
Abort Criteria
- No platform team capacity for day-2 — recommend managed PaaS.
- Single workload only — Kubernetes overhead exceeds value.
- No landing zone / IdP — fix prerequisites first.
Related Skills
../landing-zones/SKILL.md
../finops/SKILL.md — OpenCost, Karpenter consolidation
../../security/secure-development/SKILL.md — supply chain
../../engineer/devops-practices/ — GitOps, progressive delivery
../../architect/quality-attributes/slo-error-budgets/SKILL.md
Authoritative References
- Kubernetes docs — Pod Security Admission, NetworkPolicy, Gateway API
- CNCF — Argo, Flux, Cilium, Kyverno, OpenTelemetry projects
- AWS EKS Best Practices Guide
- Azure AKS Baseline architecture
- Google GKE Enterprise / Autopilot docs
- Sigstore + SLSA framework
- CIS Kubernetes Benchmark
Source: SwapnilPopat/ai-assistant-skills — distributed by TomeVault.
1---2name: kubernetes-platform-23description: Design and operate a managed Kubernetes platform (EKS, AKS, GKE) as an internal product — golden paths, multi-tenancy, autoscaling, supply-chain security, and progressive delivery. Use when standing up a new cluster strategy or maturing one beyond raw kubectl. Use when this capability is needed.4---56# Kubernetes Platform78Treat the cluster like a product, not a toy. Workload teams should ship via a paved path (Helm/Kustomize + GitOps + policy) and never need to know which CNI you chose. Operators get day-2 covered: autoscaling, upgrades, security, multi-tenancy.910## Stack Baseline (2026)1112| Concern | Recommended |13| --- | --- |14| Distribution | EKS 1.32, AKS 1.32, GKE 1.32 (or Autopilot/Fargate for low-ops) |15| Cluster IaC | Terraform + EKS Blueprints / AKS Bicep / GKE Terraform modules; Cluster API for fleets |16| GitOps | Argo CD 3.x or Flux 2.x; ApplicationSets for fleet rollouts |17| Packaging | Helm 3 + Kustomize overlays, or Timoni (CUE) for stricter typing |18| Service mesh (only if needed) | Istio Ambient, Linkerd 2.x, Cilium service mesh |19| Networking | Cilium CNI (eBPF), NetworkPolicy default-deny |20| Ingress | Gateway API 1.2 (HTTPRoute), or NGINX/Envoy/Contour |21| Autoscaling | Karpenter (AWS) / Cluster Autoscaler / GKE Autopilot; HPA + KEDA for events |22| Policy | Kyverno (preferred) or Gatekeeper/OPA; Pod Security Admission `restricted` |23| Supply chain | Sigstore (cosign) signing + verification, SLSA L3 build, SBOM (CycloneDX) |24| Runtime security | Falco, Tetragon, AWS GuardDuty for EKS |25| Observability | OpenTelemetry Operator, Prometheus + Mimir/Thanos, Loki, Tempo, Pixie |26| Progressive delivery | Argo Rollouts or Flagger (canary, blue-green, analysis) |27| Secrets | External Secrets Operator → Vault / KMS / Key Vault / Secret Manager |28| Cost | OpenCost, Karpenter consolidation, Spot/Preemptible for stateless |2930## When to Use31- Multiple teams need isolated workloads on shared infra.32- Per-PR preview environments at scale.33- Need horizontal scaling beyond what PaaS offers.34- Standardizing on portable runtime across clouds.3536## Don't Use When37- One small service, one team — a managed PaaS (Cloud Run, Container Apps, Render) is cheaper end-to-end.38- No platform team to own day-2.3940## Prerequisites41- Cloud landing zone exists (`../landing-zones/SKILL.md`).42- IdP federation in place for cluster RBAC.43- Container registry with vulnerability scanning.44- CI/CD with OIDC to the cluster (no static kubeconfigs).4546## Inputs the Agent Should Gather47- Cloud(s), region(s), HA target.48- Tenant model: namespace per team vs cluster per environment vs vCluster.49- Compliance scope (PCI / HIPAA / FedRAMP).50- Workload mix: stateless web, batch, GPU, stateful.51- Existing tooling investments (Argo vs Flux, Helm vs Kustomize).5253## Instructions5455### 1. Cluster topology56- ≥ 1 cluster per environment (prod, non-prod, sandbox); one cluster per region for prod HA.57- Three control-plane AZs; nodes in ≥ 2 AZs per nodegroup.58- Reserve a `system` nodegroup with taints for platform addons.59- Use Karpenter / Autopilot; avoid hand-tuned ASGs.6061### 2. Multi-tenancy via namespaces + policy62```yaml63# Kyverno: enforce required labels and resource limits per namespace64apiVersion: kyverno.io/v165kind: ClusterPolicy66metadata: { name: tenant-baseline }67spec:68 validationFailureAction: Enforce69 rules:70 - name: require-owner-and-cost-center71 match: { any: [{ resources: { kinds: [Namespace] } }] }72 validate:73 message: "Namespace must have owner and cost-center labels"74 pattern:75 metadata:76 labels:77 owner: "?*"78 cost-center: "?*"79 - name: require-resource-limits80 match: { any: [{ resources: { kinds: [Pod] } }] }81 validate:82 message: "All containers need CPU and memory limits"83 pattern:84 spec:85 containers:86 - resources:87 limits: { cpu: "?*", memory: "?*" }88 requests: { cpu: "?*", memory: "?*" }89```90Combine with `ResourceQuota`, `LimitRange`, and `NetworkPolicy` default-deny per namespace.9192### 3. GitOps as the only deploy path93```yaml94# Argo CD ApplicationSet: one app per env per service via PR labels95apiVersion: argoproj.io/v1alpha196kind: ApplicationSet97metadata: { name: payments }98spec:99 generators:100 - matrix:101 generators:102 - list:103 elements:104 - { env: dev, cluster: dev-eu }105 - { env: prod, cluster: prod-eu }106 - git:107 repoURL: https://github.com/org/payments108 revision: HEAD109 files: [{ path: "deploy/{{env}}/values.yaml" }]110 template:111 metadata: { name: "payments-{{env}}" }112 spec:113 project: payments114 source:115 repoURL: https://github.com/org/payments116 path: charts/payments117 helm: { valueFiles: ["../deploy/{{env}}/values.yaml"] }118 destination: { server: "{{cluster}}", namespace: payments }119 syncPolicy: { automated: { prune: true, selfHeal: true } }120```121No `kubectl apply` from laptops in any environment.122123### 4. Supply-chain trust124- Build images with reproducible builders (Docker BuildKit, ko, Buildpacks).125- Sign with cosign (keyless via OIDC).126- Generate SBOM (`syft`, `cyclonedx`).127- Admission verifies signature + provenance via Kyverno `verifyImages` or Sigstore policy-controller.128- Fail closed on unsigned images in prod.129130### 5. Progressive delivery131```yaml132# Argo Rollouts canary with analysis133apiVersion: argoproj.io/v1alpha1134kind: Rollout135metadata: { name: api }136spec:137 strategy:138 canary:139 steps:140 - setWeight: 10141 - pause: { duration: 5m }142 - analysis:143 templates: [{ templateName: success-rate }]144 args: [{ name: service, value: api }]145 - setWeight: 50146 - pause: { duration: 10m }147```148Analysis template queries Prometheus burn rate; auto-rollback on failure.149150### 6. Day-2 operations151- **Upgrades:** N-1 always supported; rehearse on non-prod monthly.152- **Backups:** Velero for cluster state; provider snapshots for PVs.153- **Drains:** PodDisruptionBudgets on every workload.154- **Observability:** OTel Collector DaemonSet; one tracing/metrics/logging backend.155- **Cost:** OpenCost dashboard per namespace; Karpenter consolidation.156157### 7. Security baseline158- Pod Security Admission `restricted` cluster-wide.159- Default-deny NetworkPolicy in every namespace.160- IRSA / Workload Identity / Azure Workload Identity — no node IAM.161- External Secrets Operator; never `kubectl create secret` from laptops.162- Falco / Tetragon for runtime detection routed to SIEM.163164## Common Pitfalls165166| Pitfall | Why it bites | Fix |167| --- | --- | --- |168| One mega-cluster for all envs | Blast radius; upgrades terrifying | Cluster per env, fleet via GitOps |169| Service mesh by default | High ops cost, unclear value | Add only when mTLS / advanced traffic policy is required |170| Manual `kubectl` in prod | Drift, no audit | GitOps only; kubectl read-only |171| `latest` image tags | Non-reproducible deploys | Pin by digest; signature-verified |172| Default-allow NetworkPolicy | Lateral movement on compromise | Default-deny per namespace |173| Hand-rolled autoscaling | Slow, expensive | Karpenter / Autopilot |174| Secrets in Helm values | Leak via Git, Argo UI | External Secrets Operator |175| No upgrade cadence | Stuck on EOL versions | Quarterly minor upgrade rehearsed |176177## Output Format1781. Cluster topology diagram (envs × regions × nodegroups).1792. Tenant model + namespace baseline (quotas, policies, network).1803. GitOps repo layout (app of apps / ApplicationSets).1814. Supply-chain pipeline: build → sign → SBOM → admit.1825. Progressive delivery template.1836. Day-2 runbook index (upgrade, backup, incident, drain).1847. Cost allocation model.185186## Abort Criteria187- No platform team capacity for day-2 — recommend managed PaaS.188- Single workload only — Kubernetes overhead exceeds value.189- No landing zone / IdP — fix prerequisites first.190191## Related Skills192- `../landing-zones/SKILL.md`193- `../finops/SKILL.md` — OpenCost, Karpenter consolidation194- `../../security/secure-development/SKILL.md` — supply chain195- `../../engineer/devops-practices/` — GitOps, progressive delivery196- `../../architect/quality-attributes/slo-error-budgets/SKILL.md`197198## Authoritative References199- Kubernetes docs — Pod Security Admission, NetworkPolicy, Gateway API200- CNCF — Argo, Flux, Cilium, Kyverno, OpenTelemetry projects201- AWS EKS Best Practices Guide202- Azure AKS Baseline architecture203- Google GKE Enterprise / Autopilot docs204- Sigstore + SLSA framework205- CIS Kubernetes Benchmark206207---208> Source: [SwapnilPopat/ai-assistant-skills](https://github.com/SwapnilPopat/ai-assistant-skills) — distributed by [TomeVault](https://tomevault.io).209<!-- tomevault:4.0:skill_md:2026-05-22 -->