CeleryExecutor
You maintain a pool of workers; tasks are sent to available workers.
KubernetesExecutor
Each task can run in its own Kubernetes pod:
Task A → Pod A Task B → Pod B
Advantages: isolation, per-task resources/images, dynamic scaling.
Disadvantage: pod startup overhead. A 2-second task with 5-second pod start is inefficient.
Interview tip: Prefer K8s when you already run Kubernetes and need isolation; Celery when you want steady multi-host workers with less per-task overhead.