💻 Développement

dev-kubernetes-helper

Aide à la configuration et au déploiement sur Kubernetes.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dev-kubernetes-helper --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dev-kubernetes-helper -Launch"

🚀 Déjà installé ?

claude "/dev-kubernetes-helper"

Ou tapez /dev-kubernetes-helper dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

KubernetesK8skubectlpoddeploymentserviceingresshelmclusternamespace

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/dev-kubernetes-helper ~/.claude/skills/

Payload du plugin : skills/dev-kubernetes-helper · source éditable : dev-skills/kubernetes-helper

📖 Manuel

Kubernetes Helper

Workflow

1. Qualifier le besoin

2. Structure des manifests

Organiser par dossier :

k8s/
  base/
    deployment.yaml
    service.yaml
    configmap.yaml
    secret.yaml         # ou ExternalSecrets / SealedSecret
    ingress.yaml
  overlays/
    dev/kustomization.yaml
    prod/kustomization.yaml

3. Deployment minimal prêt pour la prod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: my-ns
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
      containers:
        - name: my-app
          image: my-registry/my-app:1.2.3   # tag fixe, jamais latest
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8080
            initialDelaySeconds: 15
            periodSeconds: 20
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-app-secret
                  key: db-password

4. Scaling automatique

HPA (charge CPU/mémoire)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60

PodDisruptionBudget (toujours ajouter en prod)

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: my-app

5. Networking

BesoinType Service
Interne clusterClusterIP
Debug localNodePort (temp)
Exposition externeLoadBalancer ou Ingress

Ingress NGINX minimal

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80
  tls:
    - hosts:
        - app.example.com
      secretName: my-app-tls

6. Sécurité RBAC minimale

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: my-ns
  name: my-app-role
rules:
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-app-rolebinding
  namespace: my-ns
subjects:
  - kind: ServiceAccount
    name: my-app-sa
    namespace: my-ns
roleRef:
  kind: Role
  name: my-app-role
  apiGroup: rbac.authorization.k8s.io

7. Commandes kubectl utiles

# Vérifier l'état du rollout
kubectl rollout status deployment/my-app -n my-ns

# Rollback rapide
kubectl rollout undo deployment/my-app -n my-ns

# Logs multi-pods avec label
kubectl logs -l app=my-app -n my-ns --tail=100 -f

# Describe pod crashant
kubectl describe pod -l app=my-app -n my-ns

# Exec dans un pod
kubectl exec -it deploy/my-app -n my-ns -- sh

# Top ressources
kubectl top pods -n my-ns --sort-by=memory

# Port-forward debug
kubectl port-forward svc/my-app 8080:80 -n my-ns

8. Helm : packaging par environnement

# Créer un chart
helm create my-app

# Installer avec values spécifiques
helm upgrade --install my-app ./my-app \
  -n my-ns --create-namespace \
  -f values-prod.yaml \
  --set image.tag=1.2.3

# Diff avant apply (plugin helm-diff)
helm diff upgrade my-app ./my-app -f values-prod.yaml

Garde-fous et anti-patterns

Anti-patternRisqueCorrectif
image: latestrollouts non déterministesTag fixe ou digest SHA
Pas de resources.limitsnode starvationToujours définir requests + limits
Pas de probestrafic vers pod non prêtreadiness + liveness sur chaque container
Secrets en clair dans le YAMLfuite dans gitExternalSecrets ou SealedSecrets
privileged: trueescalade de privilègesrunAsNonRoot: true + drop ALL capabilities
1 seul replica en prodSPOFmin 2 replicas + PDB
NetworkPolicy absentemouvement latéraldefault-deny + allow explicite
kubectl apply manuel en proddésynchronisationGitOps : ArgoCD ou Flux

Bonnes pratiques 2026