AccueilBlogTest technique Docker et Kubernetes avancé pour la data
Guide recrutement data

Test technique Docker et Kubernetes avancé pour la data

Au-delà des bases Kubernetes, les Data Engineers déployant Airflow, Spark ou des APIs ML en production ont besoin de Helm, des StatefulSets et de GitOps. Voici ce qu on évalue au niveau Senior.

Data Builder·Juin 2025·7 min de lecture·Data Engineer
Sommaire
  1. Helm : gestionnaire de packages K8s
  2. StatefulSets pour les workloads data
  3. Secrets management sécurisé
  4. GitOps avec ArgoCD
  5. Airflow sur K8s
  6. Monitoring des workloads data
  7. Grille

1Helm : déployer des applications complexes

Question discriminante

Qu est-ce que Helm ? Comment l utilisez-vous pour déployer Airflow sur Kubernetes ?

# Helm : gestionnaire de packages Kubernetes # Chart = package K8s réutilisable # Ajouter le repo Airflow helm repo add apache-airflow https://airflow.apache.org helm repo update # Installer Airflow avec des valeurs personnalisées helm install airflow apache-airflow/airflow \ --namespace airflow \ --create-namespace \ --values airflow-values.yaml # airflow-values.yaml executor: KubernetesExecutor env: - name: AIRFLOW__CORE__LOAD_EXAMPLES value: 'false' persistence: enabled: true dags: persistence: enabled: true storageClassName: standard gitSync: enabled: true repo: https://github.com/org/dags-repo branch: main
  • Helm Chart — ensemble de manifests K8s paramétrables. Comme un package npm pour Kubernetes
  • values.yaml — surcharger les valeurs par défaut du chart. Versionner dans Git
  • Helm upgrade — mettre à jour une release. Helm rollback en cas de problème

2StatefulSets : workloads avec état persistant

Question discriminante

Quand utilisez-vous un StatefulSet plutôt qu un Deployment dans un contexte data ?

# StatefulSet : pour les workloads qui ont besoin # d identité stable et de stockage persistant apiVersion: apps/v1 kind: StatefulSet metadata: name: kafka spec: serviceName: kafka-headless replicas: 3 template: spec: containers: - name: kafka image: confluentinc/cp-kafka:7.5 volumeMounts: - name: data mountPath: /var/kafka-data volumeClaimTemplates: # PVC créé automatiquement par pod - metadata: name: data spec: accessModes: [ReadWriteOnce] resources: requests: storage: 50Gi
  • StatefulSet vs Deployment — Deployment : pods interchangeables. StatefulSet : pods avec identité stable (kafka-0, kafka-1, kafka-2)
  • Cas d usage data — Kafka, ZooKeeper, Elasticsearch, bases de données en cluster
  • PVC par pod — chaque pod a son propre Persistent Volume Claim. Données persistées même si le pod est supprimé

3Secrets management sécurisé

Question discriminante

Comment gérez-vous les credentials (clés API, mots de passe) dans un cluster Kubernetes ?

  • Kubernetes Secrets natifs — encodés en base64, pas chiffrés. Insuffisant pour la production
  • External Secrets Operator — synchronise automatiquement les secrets depuis AWS Secrets Manager, GCP Secret Manager, Azure Key Vault vers K8s
  • Sealed Secrets (Bitnami) — chiffrer les secrets K8s pour les versionner en Git de manière sécurisée
  • Workload Identity — le pod s authentifie directement sur GCP/AWS sans stocker de credentials. Meilleure pratique 2025
  • Ne jamais — mettre des secrets dans les images Docker ou dans les variables d environnement en clair

4GitOps avec ArgoCD

Question discriminante

Qu est-ce que GitOps ? Comment ArgoCD synchronise-t-il un cluster Kubernetes ?

# Application ArgoCD apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: airflow-prod namespace: argocd spec: project: default source: repoURL: https://github.com/org/k8s-infra targetRevision: main path: apps/airflow/prod destination: server: https://kubernetes.default.svc namespace: airflow syncPolicy: automated: prune: true # supprimer les ressources retirées du repo selfHeal: true # resynchroniser si quelqu un modifie K8s manuellement
  • GitOps — Git est la source de vérité pour l état du cluster. Tout changement passe par une PR
  • ArgoCD — détecte les divergences entre Git et le cluster, synchronise automatiquement
  • Avantages — auditabilité (tout changement est un commit), rollback simple (revert le commit), cohérence entre environnements

5Airflow sur Kubernetes : KubernetesExecutor

Question discriminante

Quelle est la différence entre CeleryExecutor et KubernetesExecutor pour Airflow ?

CeleryExecutorKubernetesExecutor
WorkersPool de workers permanentsUn Pod par tâche (créé/détruit)
IsolationFaible (workers partagés)Maximale (pod dédié)
ScalabilitéFixe ou autoscaling CeleryAutomatique K8s
CoûtWorkers toujours allumésPaye seulement pendant l exécution
ComplexitéNécessite Redis/RabbitMQK8s natif, plus simple

6Monitoring des workloads data K8s

Question discriminante

Comment monitorez-vous vos pipelines data déployés sur Kubernetes ?

  • Prometheus + Grafana — métriques CPU/RAM par pod, alertes sur les OOM kills ou les crashloops
  • Loki — agrégation des logs de tous les pods (Airflow, Spark, APIs ML). Stack Grafana complète
  • kube-state-metrics — métriques sur l état des ressources K8s (Deployments, StatefulSets, Jobs)
  • Alertes critiques data — pod en CrashLoopBackOff, job Spark OOMKilled, latence API ML > seuil, consumer Kafka en retard
# K8s CronJob pour pipeline data apiVersion: batch/v1 kind: CronJob metadata: name: daily-etl namespace: data-platform spec: schedule: "0 6 * * *" jobTemplate: spec: template: spec: serviceAccountName: data-pipeline-sa containers: - name: etl image: europe-west1-docker.pkg.dev/projet/data/pipeline:1.2.3 env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-credentials key: password resources: requests: {cpu: "500m", memory: "1Gi"} limits: {cpu: "2", memory: "4Gi"} restartPolicy: OnFailure backoffLimit: 3
  • KubernetesExecutor Airflow - chaque task Airflow = pod ephemere. Isolation totale, scaling automatique, pas de workers permanents. Standard pour les deployments K8s prod
  • Resource limits obligatoires - sans limits, un job peut consommer toute la memoire du node et tuer les autres pods. Toujours definir requests ET limits
  • Workload Identity - lier service account K8s a un service account GCP/AWS. Zero credential dans les pods, authentification via identite du pod
  • Horizontal Pod Autoscaling - pour les APIs de scoring ML : scaler selon CPU/memoire ou metriques custom (requetes en attente dans la queue)
  • Spark on Kubernetes - spark-submit vers cluster K8s. Les executors sont des pods ephemeres. GKE Autopilot simplifie le provisioning
  • KubernetesExecutor Airflow - chaque task Airflow = pod ephemere. Isolation totale, scaling automatique, pas de workers permanents. Standard pour les deployments K8s prod
  • Resource limits obligatoires - sans limits, un job peut consommer toute la memoire du node et tuer les autres pods. Toujours definir requests ET limits
  • Workload Identity - lier service account K8s a un service account GCP/AWS. Zero credential dans les pods, authentification via identite du pod
  • Horizontal Pod Autoscaling - pour les APIs de scoring ML : scaler selon CPU/memoire ou metriques custom (requetes en attente dans la queue)
  • Spark on Kubernetes - spark-submit vers cluster K8s. Les executors sont des pods ephemeres. GKE Autopilot simplifie le provisioning

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméHelm basique, déploiements K8s, secrets managementA déployé Airflow avec Helm, utilise External Secrets ou Workload IdentityStocke des credentials dans les manifests K8s
SeniorStatefulSets, GitOps ArgoCD, KubernetesExecutor, monitoringA mis en place GitOps avec ArgoCD, a déployé Airflow avec KubernetesExecutorNe sait pas ce qu est GitOps, ne connaît pas ArgoCD

Vous recrutez un Data Engineer K8s avancé ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.