MFormations
Modern DevOps Engineering

Chapitre 22

22 - Préparation aux Entretiens DevOps

22 - Préparation aux Entretiens DevOps

Cours 22 : Préparation aux Entretiens DevOps

Partie 1 : Questions Comportementales (30 Q)

Méthode STAR

  • Situation : Contexte
  • Task : Objectif
  • Action : Ce que vous avez fait
  • Result : Résultat mesurable

Questions STAR et réponses

Q1. Parlez-moi d'un incident critique que vous avez géré. STAR :

  • S : Application de production en panne, 5000 utilisateurs affectés
  • T : Rétablir le service en moins de 30 minutes
  • A : J'ai activé le runbook incident, identifié un déploiement défectueux (mauvaise variable d'env), rollback en 8 minutes
  • R : Service rétabli en 12 minutes, post-mortem partagé, test automatisé ajouté

Q2. Comment gérez-vous un conflit avec un développeur qui veut déployer le vendredi soir ?

  • S : Feature critique à livrer pour lundi
  • T : Éviter un déploiement risqué sans perdre la confiance du dev
  • A : Proposition de déploiement canary (10% du trafic) avec monitoring renforcé + feature flag désactivable
  • R : Déploiement réussi, monitoring en place, rollback immédiat si problème

Q3. Décrivez une situation où vous avez automatisé une tâche répétitive.

  • S : 2h/jour passées à déployer manuellement
  • T : Automatiser le déploiement
  • A : Création d'un pipeline CI/CD complet (GitHub Actions + ArgoCD), tests automatisés, rollback auto
  • R : Lead time de 4h à 8 minutes, zéro erreur manuelle, équipe libérée

Q4. Projet où vous avez introduit une nouvelle technologie.

  • S : Équipe sans observabilité
  • T : Implémenter Prometheus + Grafana
  • A : POC de 2 semaines, demo à l'équipe, adoption progressive
  • R : 100% des services monitorés, MTTR réduit de 60%

Q5. Comment gérez-vous un post-mortem sensible ?

  • S : Incident critique causé par une erreur humaine
  • T : Analyse sans blâme
  • A : Focus sur "quoi" pas "qui", timeline factuelle, action items correctifs
  • R : Culture blameless renforcée, processus amélioré

Q6. Décrivez un conflit technique avec un collègue.

  • S : Désaccord sur le choix entre Kubernetes et ECS
  • T : Décision éclairée
  • A : Benchmark des deux solutions, analyse coûts/bénéfices, présentation à l'équipe
  • R : Kubernetes choisi, collègue convaincu par les données

Q7. Situation où vous avez manqué un deadline.

  • S : Migration K8s non terminée dans les temps
  • T : Communiquer sans cacher le problème
  • A : Communication précoce au manager, nouveau planning réaliste
  • R : Migration réussie avec 2 semaines de retard, confiance préservée

Q8. Comment avez-vous amélioré la fiabilité d'un service ?

  • S : Service avec 99% d'uptime (SLO 99.9%)
  • T : Atteindre 99.9%
  • A : Health checks, auto-scaling, multi-AZ deployment, circuit breaker
  • R : 99.95% d'uptime, 0 incident critique en 6 mois

Q9. Expérience avec le chaos engineering.

  • S : Résistance aux pannes inconnue
  • T : Tester la résilience
  • A : Chaos Mesh, pod-kill hebdomadaire, Game Days mensuels
  • R : 15 failles détectées et corrigées

Q10. Comment priorisez-vous la dette technique ?

  • S : Ancien pipeline Jenkins non maintenable
  • T : Moderniser sans stopper les features
  • A : Ticket de debt priorisé, 20% du temps sprint, migration progressive
  • R : Pipeline migré en 3 mois, 0 régression

Q11. Décrivez un projet multi-équipe réussi.

  • S : Plateforme commune DevOps pour 5 équipes
  • T : Standards unifiés
  • A : Workshops, RFC, GitHub templates, CI/CD partagé
  • R : 100% adoption, lead time réduit de 40%

Q12. Comment gérez-vous un collègue sous-performant ?

  • S : Jr. DevOps en difficulté sur K8s
  • T : L'aider à progresser
  • A : Pair programming, documentation, formations internes
  • R : Autonome en 2 mois, promu après 6 mois

Q13. Décision difficile où vous avez dit non.

  • S : Feature sans monitoring demandée en urgence
  • T : Refuser sans bloquer le business
  • A : Conditionné au déploiement : métriques + alertes obligatoires
  • R : Feature livrée avec monitoring, aucun incident

Q14. Comment restez-vous à jour techniquement ?

  • A : CNCF newsletter, KubeCon vidéos, side projects, blog technique
  • R : 3 contributions open source, veille hebdomadaire

Q15. Situation de stress extrême.

  • S : Base de données corrompue, prod down
  • T : Restaurer les données
  • A : Activation DR plan, restoration from backup, communication transparente
  • R : Service rétabli en 45 minutes, données intactes

Q16. Comment gérez-vous le changement de priorité ?

  • S : Feature bloquée, nouvelle urgence sécurité
  • T : Réaffecter les ressources
  • A : Sprint review ajusté, feature repoussée, ticket de sécurité priorisé
  • R : Vulnérabilité corrigée en 24h, feature livrée au sprint suivant

Q17. Expérience de mentoring.

  • S : Nouveau DevOps sans expérience cloud
  • T : Monter en compétence
  • A : Roadmap d'apprentissage, weekly 1:1, code reviews
  • R : Certifié AWS en 3 mois, autonome sur les pipelines

Q18. Situation où vous avez dû apprendre une techno rapidement.

  • S : Migration ArgoCD urgente
  • T : Maîtriser en 1 semaine
  • A : Documentation, hands-on lab, POC
  • R : Migration réussie dans les délais

Q19. Comment mesurez-vous le succès de votre travail ?

  • A : 4 métriques Accelerate (deployment freq, lead time, MTTR, change fail rate)
  • R : D2F x10, lead time -80%, MTTR -60%

Q20. Projet échoué et leçons apprises.

  • S : Migration K8s trop rapide
  • T : Apprendre
  • A : Post-mortem détaillé, nouvelles pratiques (canary, rollback testé)
  • R : Processus robuste, migrations suivantes réussies

Q21. Comment gérez-vous les stakeholders non techniques ?

  • S : CEO veut "cloud native" sans comprendre
  • T : Aligner sur les vrais besoins
  • A : Métaphones et KPIs métiers, roadmap claire
  • R : Budget approuvé, attentes réalistes

Q22. Expérience avec le on-call.

  • S : Rotation on-call 24/7
  • T : Réduire l'épuisement
  • A : Runbooks, playbooks, alertes pertinentes, follow-the-sun
  • R : Fatigue réduite, MTTR amélioré

Q23. Comment introduisez-vous une nouvelle pratique dans l'équipe ?

  • S : Code reviews inexistantes
  • T : Les instaurer sans friction
  • A : Template PR, checklist, bienveillance
  • R : 90% adoption en 1 mois

Q24. Situation où vous avez pris un risque calculé.

  • S : Skip QA manuel sur un fix urgent
  • T : Livrer vite sans casser
  • A : Tests automatisés complets, feature flag, rollback prêt
  • R : Fix en prod en 30 min, 0 impact

Q25. Comment gérez-vous la résistance au changement ?

  • S : Équipe réticente au CI/CD
  • T : Convaincre
  • A : POC concrets, bénéfices mesurables, implémentation progressive
  • R : Adopté après 2 sprints

Q26. Décrivez votre plus belle réussite technique.

  • S : Infrastructure legacy on-prem → cloud
  • T : Migration complète
  • A : IaC, GitOps, CI/CD, zero-downtime
  • R : 40% cost savings, 3x deploys, 99.99% uptime

Q27. Comment contribuez-vous à l'open source ?

  • A : Contributions à Terraform provider, rapports de bugs, docs
  • R : 5 PR acceptées

Q28. Comment gérez-vous les secrets dans CI/CD ?

  • A : GitHub Secrets, Vault, jamais en clair, rotation automatique
  • R : 0 fuite de secret en 2 ans

Q29. Décrivez votre IDE et setup de travail.

  • A : VS Code + devcontainers, terminal tmux, aliases kubectl

Q30. Pourquoi voulez-vous travailler ici ?

  • À adapter selon l'entreprise

Partie 2 : Questions Techniques (30 Q)

Kubernetes (Q1-Q8)

Q1. Expliquez le fonctionnement d'un Pod Kubernetes.

  • Plus petite unité déployable
  • Partage de réseau (IP, ports) et stockage (volumes)
  • Cycle de vie : Pending → Running → Succeeded/Failed
  • Multi-container Pods : sidecar, ambassador, adapter patterns

Q2. Quelle est la différence entre Deployment et StatefulSet ?

  • Deployment : Stateless, ordre indifférent, noms aléatoires
  • StatefulSet : Stateful, identité stable, ordre garanti

Q3. Comment fonctionne le kube-scheduler ?

  • Filtre les nœuds (resource requests, taints/tolerations, node selector)
  • Score les nœuds (priorities)
  • Binding du Pod au meilleur nœud

Q4. Qu'est-ce qu'un Service Mesh (Istio) ?

  • Sidecar proxy (Envoy) par Pod
  • Fonctionnalités : mTLS, traffic routing, observabilité, circuit breaking
  • Comparaison : Istio vs Linkerd vs Consul

Q5. Comment sécuriser un cluster Kubernetes ?

  • RBAC : Roles et RoleBindings
  • PodSecurity admission
  • Network Policies
  • ServiceAccount avec permissions minimales
  • Audit logging

Q6. Expliquez etcd dans K8s.

  • Key-value store distribué
  • Stocke toute la config et l'état du cluster
  • Consensus Raft
  • Backup/snapshot réguliers essentiels

Q7. Comment faire un rolling update ?

  • Modifier l'image dans le template Deployment
  • kubectl set image deployment/myapp app=myapp:v2
  • Surveiller : kubectl rollout status deployment/myapp
  • Rollback : kubectl rollout undo deployment/myapp

Q8. Qu'est-ce qu'un Operator ?

  • Extension Kubernetes avec CRD + Controller
  • Kubebuilder / Operator SDK
  • Exemples : Prometheus Operator, ArgoCD Operator

Docker (Q9-Q13)

Q9. Différence entre RUN, CMD, ENTRYPOINT ?

  • RUN : Exécute pendant le build (couches)
  • CMD : Commande par défaut (remplaçable)
  • ENTRYPOINT : Point d'entrée fixe (paramètres via CMD)

Q10. Comment optimiser la taille d'une image Docker ?

  • Multi-stage builds
  • Alpine Linux base
  • .dockerignore
  • Une seule couche par RUN
  • Nettoyage des caches

Q11. Qu'est-ce que Docker Overlay Network ?

  • Réseau multi-hôte pour Docker Swarm
  • Utilise VXLAN pour l'encapsulation
  • Permet la communication entre conteneurs sur différents hôtes

Q12. Sécurité Docker ?

  • Utilisateur non-root dans le conteneur
  • Read-only filesystem
  • Drop capabilities (--cap-drop=ALL)
  • Content trust (signatures)
  • Docker Bench Security

Q13. Expose et publish, différence ?

  • EXPOSE : Documentation dans Dockerfile
  • -p / --publish : Mappe le port hôte → conteneur (runtime)

Terraform (Q14-Q18)

Q14. Qu'est-ce que Terraform state et pourquoi est-il important ?

  • Mapping des ressources réelles → configuration
  • Contient les métadonnées (dépendances, attributes)
  • Stockage : local (dev), distant (S3 + DynamoDB pour équipe)
  • Locking pour éviter les conflits

Q15. Différence entre count et for_each ?

  • count : Nombre (0, 1, N), accès par index
  • for_each : Map/set, accès par clé, meilleur pour modification
  • count détruit pas bien si l'ordre change

Q16. Comment gérer les secrets dans Terraform ?

  • Variables sensibles (sensitive = true)
  • Backend avec encryption at rest
  • Vault provider
  • Ne jamais commit le fichier .tfstate

Q17. Qu'est-ce que Terragrunt ?

  • Wrapper Terraform pour DRY configuration
  • Gère les backends, providers, variables par environnement
  • keepers, dependencies, before_hook/after_hook

Q18. Expliquez le cycle de vie des ressources Terraform.

  • create : Création
  • read : Rafraîchissement (terraform refresh)
  • update : Modification in-place
  • delete : Destruction
  • create_before_destroy / prevent_destroy / ignore_changes

CI/CD (Q19-Q23)

Q19. Qu'est-ce que le Continuous Delivery vs Continuous Deployment ?

  • Continuous Delivery : Build + test + staging, déploiement manuel en prod
  • Continuous Deployment : Automatique jusqu'en prod

Q20. Stratégies de déploiement ?

  • Rolling update : Graduel (K8s default)
  • Blue/Green : Deux environnements, switch DNS
  • Canary : Petit % de trafic
  • Feature flags : Activation conditionnelle

Q21. Comment gérer les dépendances dans un pipeline CI/CD ?

  • Cache (npm, maven, pip, etc.)
  • Layer caching Docker
  • Dependency lock files (package-lock.json, poetry.lock)
  • SBOM pour la traçabilité

Q22. Quels sont les anti-patterns CI/CD ?

  • Pipeline trop long (> 30min)
  • Tests flaky (instables)
  • Secrets hardcodés
  • Déploiements manuels en prod
  • Branches longues sans merge

Q23. GitOps vs CI/CD traditionnel ?

  • GitOps : Git = source de vérité, sync automatique
  • CI/CD : Pipeline déclenché push, push artifacts
  • GitOps : ArgoCD, Flux
  • CI/CD : GitHub Actions, GitLab CI, Jenkins

System Design (Q24-Q28)

Q24. Concevez une plateforme microservices hautement disponible.

  • Compute : Kubernetes multi-AZ
  • Service mesh : Istio (mTLS, traffic mgmt)
  • Observabilité : Prometheus + Grafana + Loki + Tempo
  • CI/CD : GitHub Actions + ArgoCD
  • Database : RDS Multi-AZ + read replicas
  • Cache : Redis (ElastiCache)
  • CDN : CloudFront
  • DR : Multi-region active-passive

Q25. Comment scalez-vous une base de données PostgreSQL ?

  • Vertical : Bigger instance
  • Horizontal : Read replicas
  • Sharding : Citus / TimescaleDB
  • Connection pooling : PgBouncer
  • Caching : Redis

Q26. Concevez un système de logging distribué.

  • Collecte : Promtail / Fluentd (DaemonSet)
  • Stockage : Loki (agrégation) / Elasticsearch (recherche full-text)
  • Visualisation : Grafana
  • Retention : Hot (7j) / Warm (30j) / Cold (1 an)
  • Volume : 1TB/jour, budget défini

Q27. Comment gérez-vous l'identité et l'authentification dans K8s ?

  • OIDC avec Dex / Keycloak
  • ServiceAccount pour les apps
  • External secrets avec External Secrets Operator
  • Vault pour les secrets applicatifs

Q28. Stratégie de backup pour 100To de données ?

  • Database : pg_dump + WAL archiving → S3
  • Kubernetes : Velero (PV + resources)
  • Files : Restic / Kopia
  • Retention : Daily (30j), Weekly (12 mois), Monthly (7 ans)
  • DR test : Trimestriel automatisé

Incident Response (Q29-Q30)

Q29. Walk me through votre incident response.

  1. Détection : Alerte (PagerDuty/OpsGenie)
  2. Triage : Severity (SEV1/2/3), Incident Commander désigné
  3. Mitigation : Rollback, feature flag, scaling
  4. Resolution : Fix permanent
  5. Post-mortem : Timeline, root cause, action items

Q30. Comment réduire le MTTR ?

  • Runbooks automatisés
  • Alertes pertinentes (pas de noise)
  • Self-healing (automatic restarts, scaling)
  • Feature flags pour rollback rapide
  • Déploiements fréquents (petits changements)

Partie 3 : Coding Challenges

Go

// Reverse proxy basique
package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    target, _ := url.Parse("http://localhost:3000")
    proxy := httputil.NewSingleHostReverseProxy(target)
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        proxy.ServeHTTP(w, r)
    })
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Python

# Health check endpoint avec métriques Prometheus
from flask import Flask, jsonify
from prometheus_client import generate_latest, Counter, Histogram
import time

app = Flask(__name__)
REQUESTS = Counter('http_requests_total', 'Total HTTP requests')
LATENCY = Histogram('http_request_duration_seconds', 'Request latency')

@app.route('/health')
@LATENCY.time()
def health():
    REQUESTS.inc()
    return jsonify({"status": "ok"})

@app.route('/metrics')
def metrics():
    return generate_latest()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Bash

#!/bin/bash
# Script de diagnostic Kubernetes
set -euo pipefail

NAMESPACE="${1:-default}"
echo "=== Pods in $NAMESPACE ==="
kubectl get pods -n "$NAMESPACE" -o wide

echo -e "\n=== Resource Usage ==="
kubectl top pods -n "$NAMESPACE" 2>/dev/null || echo "Metrics server not available"

echo -e "\n=== Events ==="
kubectl get events -n "$NAMESPACE" --sort-by='.lastTimestamp' | tail -20

echo -e "\n=== Persistent Volume Claims ==="
kubectl get pvc -n "$NAMESPACE"

Part 4 : Conseils pour l'entretien

  1. Préparez vos projets : Ayez 3 projets détaillés (STAR)
  2. Montrez votre mindset : Fail fast, blameless, automation
  3. Posez des questions :
    • Stack technique actuelle ?
    • Équipe DevOps existante ?
    • On-call rotation ?
    • SLOs actuels ?
  4. Évitez : Technical jargon excessif, critiquer l'existant
  5. Négociation :
    • Connaître le marché
    • Valoriser les certifications
    • Package total (salaire + stock + perks)