apache/druid · error · IllegalArgumentException
Invalid pod adapter [%s], only pod adapter [%s] can be speci
Error message
Invalid pod adapter [%s], only pod adapter [%s] can be specified when sidecarSupport is enabled
What it means
KubernetesOverlordModule.provideTaskAdapter() rejects a configured pod adapter type that is incompatible with sidecar support. When druid.indexer.runner.k8s.sidecarSupport=true the only valid adapter is MultiContainerTaskAdapter (type 'multi-container'), because sidecars require multi-container pod manipulation.
Source
Thrown at extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesOverlordModule.java:312
TaskConfig taskConfig,
StartupLoggingConfig startupLoggingConfig,
@Self DruidNode druidNode,
@Smile ObjectMapper smileMapper,
TaskLogs taskLogs,
Supplier<KubernetesTaskRunnerDynamicConfig> dynamicConfigRef
)
{
String adapter = properties.getProperty(String.format(
Locale.ROOT,
"%s.%s.adapter.type",
IndexingServiceModuleHelper.INDEXER_RUNNER_PROPERTY_PREFIX,
"k8s"
));
if (adapter != null
&& !MultiContainerTaskAdapter.TYPE.equals(adapter)
&& kubernetesTaskRunnerConfig.isSidecarSupport()) {
throw new IAE(
"Invalid pod adapter [%s], only pod adapter [%s] can be specified when sidecarSupport is enabled",
adapter,
MultiContainerTaskAdapter.TYPE
);
}
if (MultiContainerTaskAdapter.TYPE.equals(adapter) || kubernetesTaskRunnerConfig.isSidecarSupport()) {
return new MultiContainerTaskAdapter(
client,
kubernetesTaskRunnerConfig,
taskConfig,
startupLoggingConfig,
druidNode,
smileMapper,
taskLogs
);
} else if (PodTemplateTaskAdapter.TYPE.equals(adapter)) {
return new PodTemplateTaskAdapter(View on GitHub (pinned to 9b90983fd2)
Solutions
- Set the adapter to 'multi-container' (MultiContainerTaskAdapter.TYPE) when sidecarSupport is enabled
- Or set sidecarSupport=false if single-container adapters must stay
- Remove the explicit adapter property so the module default for sidecar mode applies
- Restart the Overlord after correcting the runtime.properties config
Example fix
// before druid.indexer.runner.k8s.sidecarSupport=true druid.indexer.runner.k8s.peonAdapter=k8s // after druid.indexer.runner.k8s.sidecarSupport=true druid.indexer.runner.k8s.peonAdapter=multi-container
Defensive patterns
Strategy: validation
Validate before calling
boolean sidecar = runnerConfig.isSidecarSupport();
String adapter = props.getProperty("druid.indexer.runner.k8s.peonAdapter");
if (sidecar && adapter != null && !"multi-container".equals(adapter)) {
throw new IllegalArgumentException("adapter must be multi-container when sidecarSupport is enabled");
} Prevention
- Audit runtime.properties whenever toggling sidecarSupport
- Prefer omitting the adapter property and letting the module choose the default
- Document adapter/sidecar compatibility in your cluster config repo
When it happens
Trigger: Configuring druid.indexer.runner.k8s.peonAdapter (or equivalent adapter property) to a single-container adapter type like 'overlord' or 'k8s' while sidecarSupport is enabled.
Common situations: Upgrading to sidecar support and leaving the old adapter setting in place; copy-pasting task-runner config between clusters; docs/examples showing adapter=k8s then enabling sidecars separately.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- At least one task runner must be enabled
- Failed to create K8s ApiClient instance
- Invalid pod adapter [%s], only pod adapter [%s] can be speci
- Pod adapter [%s] requires the local Overlord pod namespace f
- Pod template task adapter requires a base pod template to be
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/d3d849af393f921a.
Report an issue: GitHub.