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éationread: Rafraîchissement (terraform refresh)update: Modification in-placedelete: Destructioncreate_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.
- Détection : Alerte (PagerDuty/OpsGenie)
- Triage : Severity (SEV1/2/3), Incident Commander désigné
- Mitigation : Rollback, feature flag, scaling
- Resolution : Fix permanent
- 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
- Préparez vos projets : Ayez 3 projets détaillés (STAR)
- Montrez votre mindset : Fail fast, blameless, automation
- Posez des questions :
- Stack technique actuelle ?
- Équipe DevOps existante ?
- On-call rotation ?
- SLOs actuels ?
- Évitez : Technical jargon excessif, critiquer l'existant
- Négociation :
- Connaître le marché
- Valoriser les certifications
- Package total (salaire + stock + perks)