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

  1. Set the adapter to 'multi-container' (MultiContainerTaskAdapter.TYPE) when sidecarSupport is enabled
  2. Or set sidecarSupport=false if single-container adapters must stay
  3. Remove the explicit adapter property so the module default for sidecar mode applies
  4. 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

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


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/d3d849af393f921a. Report an issue: GitHub.