{"record":{"id":"d371b84ded77b91b","repo":"zhisheng17/flink-learning","slug":"kubernetes-cluster-id-must-not-be-blank","errorCode":null,"errorMessage":"kubernetes.cluster-id must not be blank.","messagePattern":"kubernetes\\.cluster-id must not be blank\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-learning-k8s/flink-k8s/src/main/java/org/apache/flink/kubernetes/kubeclient/parameters/AbstractKubernetesParameters.java","lineNumber":70,"sourceCode":"\tpublic Configuration getFlinkConfiguration() {\n\t\treturn flinkConfig;\n\t}\n\n\t@Override\n\tpublic String getConfigDirectory() {\n\t\tfinal String configDir = flinkConfig.getOptional(DeploymentOptionsInternal.CONF_DIR).orElse(\n\t\t\tflinkConfig.getString(KubernetesConfigOptions.FLINK_CONF_DIR));\n\n\t\tcheckNotNull(configDir);\n\t\treturn configDir;\n\t}\n\n\t@Override\n\tpublic String getClusterId() {\n\t\tfinal String clusterId = flinkConfig.getString(KubernetesConfigOptions.CLUSTER_ID);\n\n\t\tif (StringUtils.isBlank(clusterId)) {\n\t\t\tthrow new IllegalArgumentException(KubernetesConfigOptions.CLUSTER_ID.key() + \" must not be blank.\");\n\t\t} else if (clusterId.length() > Constants.MAXIMUM_CHARACTERS_OF_CLUSTER_ID) {\n\t\t\tthrow new IllegalArgumentException(KubernetesConfigOptions.CLUSTER_ID.key() + \" must be no more than \" +\n\t\t\t\tConstants.MAXIMUM_CHARACTERS_OF_CLUSTER_ID + \" characters.\");\n\t\t}\n\n\t\treturn clusterId;\n\t}\n\n\t@Override\n\tpublic String getNamespace() {\n\t\tfinal String namespace = flinkConfig.getString(KubernetesConfigOptions.NAMESPACE);\n\t\tcheckArgument(!namespace.trim().isEmpty(), \"Invalid \" + KubernetesConfigOptions.NAMESPACE + \".\");\n\n\t\treturn namespace;\n\t}\n\n\t@Override\n\tpublic String getImage() {","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/zhisheng17/flink-learning/blob/d731cee7618021be56d132cc925102ffff8d75e6/flink-learning-k8s/flink-k8s/src/main/java/org/apache/flink/kubernetes/kubeclient/parameters/AbstractKubernetesParameters.java#L52-L88","documentation":"AbstractKubernetesParameters.getClusterId reads kubernetes.cluster-id from the Flink configuration and throws IllegalArgumentException when it is blank (null, empty, or whitespace). A cluster-id is mandatory for every Kubernetes operation since it names all Kubernetes resources the Flink cluster creates.","triggerScenarios":"Calling any Kubernetes parameters method (directly or via getCommonLabels) when kubernetes.cluster-id was never set, set to an empty string, or set to whitespace only.","commonSituations":"Submitting to Kubernetes without -Dkubernetes.cluster-id=..., a script with an unexpanded $CLUSTER_ID variable resolving to empty, or loading a flink-conf.yaml missing the key.","solutions":["Set kubernetes.cluster-id in flink-conf.yaml or pass -Dkubernetes.cluster-id=<name> on the command line.","Fix shell quoting/expansion so the variable actually contains a value (e.g. \"${CLUSTER_ID:?unset}\").","Validate the config before submission (KubernetesUtils.checkAndUpdateOrCreateClusterId or your own check)."],"exampleFix":"// before\n./bin/flink run -t kubernetes-application ...\n// after\n./bin/flink run -t kubernetes-application -Dkubernetes.cluster-id=my-flink-cluster ...","handlingStrategy":"validation","validationCode":"String clusterId = flinkConfig.get(KubernetesConfigOptions.CLUSTER_ID);\nif (clusterId == null || clusterId.trim().isEmpty()) {\n    throw new IllegalArgumentException(\"kubernetes.cluster-id must be set before Kubernetes submission\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    String id = parameters.getClusterId();\n} catch (IllegalArgumentException e) {\n    LOG.error(\"Missing kubernetes.cluster-id: pass -Dkubernetes.cluster-id=<name>\");\n    return;\n}","preventionTips":["Always pass -Dkubernetes.cluster-id on every Kubernetes submission.","Use ${CLUSTER_ID:?unset} in shell scripts to fail on unexpanded variables.","Keep the key present in committed flink-conf.yaml files."],"tags":["kubernetes","configuration","validation"],"backgroundTag":"missing-required-config","analyzedSha":"d731cee7618021be56d132cc925102ffff8d75e6","analyzedAt":"2026-09-06T05:35:08.496Z","contentChangedAt":"2026-09-06T05:35:08.496Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}