Skip to content
Back to skills

K8s Client Js

BSecurity

Kubernetes JavaScript client for agent-driven cluster operations. Pod CRUD, Deployment scaling, namespace isolation, ConfigMap injection, log streaming, and exec into containers. Sources: kubernetes-client/javascript (Apache-2.0).

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 9, 2026
ai-agentsjavascriptgojavanodekubernetesgitapisecurity

Works with

  • cli
  • api

Security analysis

B88/100
  • criticalAccesses sensitive system or user directories

Pro shows the line behind each finding and how to fix it

Scanned September 9, 2026

npx -y skills add yanacuti1121/Yana-AI --skill k8s-client-js --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of K8s Client Js?

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

Security grade badge for K8s Client Js
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/yanacuti1121-k8s-client-js/badge)](https://www.skillsdirectory.com/skills/yanacuti1121-k8s-client-js)

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-client-js
description: Kubernetes JavaScript client for agent-driven cluster operations. Pod CRUD, Deployment scaling, namespace isolation, ConfigMap injection, log streaming, and exec into containers. Sources: kubernetes-client/javascript (Apache-2.0).
origin: yana-ai — synthesized from kubernetes-client/javascript (Apache-2.0)
license: Apache-2.0
version: 1.0.0
compatibility: yana-ai >= 1.3.52
---

# /k8s-client-js

## When to Use

- Agent spawns, monitors, and terminates child agent Pods programmatically
- Scale a Deployment based on task queue depth
- Stream logs from a running agent pod back to the orchestrator
- Exec a command inside a container for health checks or remediation

## Do NOT use for

- Infrastructure-as-code (use [[helm-chart-packaging]] or [[argocd-gitops]])
- High-frequency operations (K8s API has rate limits ~100 req/s)

---

## Setup and authentication

```javascript
import * as k8s from '@kubernetes/client-node'

const kc = new k8s.KubeConfig()

// Auto-detect: in-cluster (ServiceAccount) or ~/.kube/config
kc.loadFromDefault()

const coreApi  = kc.makeApiClient(k8s.CoreV1Api)
const appsApi  = kc.makeApiClient(k8s.AppsV1Api)
const batchApi = kc.makeApiClient(k8s.BatchV1Api)
```

---

## Spawn an agent Pod

```javascript
async function spawnAgentPod(agentId: string, tier: string): Promise<string> {
  const pod = await coreApi.createNamespacedPod('yamtam', {
    metadata: {
      name:   `agent-${agentId}`,
      labels: { app: 'yamtam-agent', tier, agentId },
    },
    spec: {
      restartPolicy: 'Never',
      containers: [{
        name:  'agent',
        image: `ghcr.io/yamtam/agent:latest`,
        env:   [
          { name: 'YAMTAM_AGENT_ID',   value: agentId },
          { name: 'YAMTAM_AGENT_TIER', value: tier },
        ],
        resources: {
          requests: { memory: '256Mi', cpu: '100m' },
          limits:   { memory: '512Mi', cpu: '500m' },
        },
        securityContext: {
          readOnlyRootFilesystem: true,
          allowPrivilegeEscalation: false,
          runAsNonRoot: true,
        },
      }],
    },
  })
  return pod.body.metadata!.name!
}
```

---

## Scale a Deployment

```javascript
async function scaleDeployment(name: string, namespace: string, replicas: number) {
  await appsApi.patchNamespacedDeploymentScale(name, namespace,
    [{ op: 'replace', path: '/spec/replicas', value: replicas }],
    undefined, undefined, undefined, undefined, undefined,
    { headers: { 'Content-Type': 'application/json-patch+json' } }
  )
  console.log(`[k8s] scaled ${name} → ${replicas} replicas`)
}
```

---

## Stream pod logs

```javascript
async function streamPodLogs(podName: string, namespace = 'yamtam') {
  const logStream = await new k8s.Log(kc).log(
    namespace,
    podName,
    undefined,    // container name (undefined = first)
    process.stdout,
    {
      follow:    true,
      tailLines: 100,
      timestamps: true,
    }
  )
  return logStream  // call logStream.destroy() to stop
}
```

---

## Wait for Pod to be Running

```javascript
async function waitForPod(podName: string, namespace = 'yamtam', timeoutMs = 60_000) {
  const start = Date.now()

  while (Date.now() - start < timeoutMs) {
    const pod   = await coreApi.readNamespacedPod(podName, namespace)
    const phase = pod.body.status?.phase

    if (phase === 'Running')  return true
    if (phase === 'Failed')   throw new Error(`[k8s] pod ${podName} failed`)
    if (phase === 'Succeeded') return true

    await new Promise(r => setTimeout(r, 2000))
  }
  throw new Error(`[k8s] pod ${podName} not ready after ${timeoutMs}ms`)
}
```

---

## Anti-Fake-Pass Checklist

```
❌ loadFromDefault() outside cluster without KUBECONFIG set → uses ~/.kube/config, may hit wrong cluster
❌ No resource limits on spawned pods → runaway agent exhausts node memory
❌ readOnlyRootFilesystem without emptyDir volume → agent can't write temp files
❌ Watching pods without timeout → watch connection drops after ~1h; reconnect required
❌ JSON patch without Content-Type: application/json-patch+json → K8s rejects with 415
❌ Deleting pod without waiting → successor pod starts with stale ConfigMap if not flushed
```

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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.