测试环境 删除TF-job时报错,Namespace mismatch ,Item namespace xxxxx1,Operation namespace: xxxxxx2
代码如下:
public AIPRet<String> deleteTFJob(String projectName, String tfJobName) {
try (final KubernetesClient client = AIClusterQuery.connectToCluster("")) {
CustomResourceDefinitionContext customResourceDefinition =
new CustomResourceDefinitionContext.Builder().withGroup("kubeflow.org")
.withScope("Namespaced")
.withVersion("v1")
.withKind("TFJob")
.build();
MixedOperation<GenericKubernetesResource, GenericKubernetesResourceList, Resource<GenericKubernetesResource>>
tfJob = client.genericKubernetesResources(customResourceDefinition);
GenericKubernetesResource created = tfJob.inNamespace(projectName)
.withName(tfJobName)
.get();
if (created != null) {
tfJob.delete(created);
log.info("删除TFJob:" + tfJobName + "成功");
} else {
log.error("没有待删除的TFJob:" + tfJobName);
}
} catch (Exception e) {
log.error("Could not delete TFJob resource: {}", e.getMessage(), e);
return AIPRet.<String>builder()
.success(false)
.message("删除TFJob失败")
.build();
}
return AIPRet.<String>builder()
.success(true)
.data("项目:" + projectName + " TFJob:" + tfJobName)
.message("删除TFJob成功")
.build();
}
其中client获取代码 大概如下:
config = new ConfigBuilder()
.withTrustCerts(true)
.withMasterUrl(masterUrl)
.withOauthToken(base64Token)
.build();
KubernetesClient client = new DefaultKubernetesClient(config);
return client ;
解决办法
方法一:
修改client ,增加namespace指定
config = new ConfigBuilder()
.withTrustCerts(true)
.withMasterUrl(masterUrl)
.withOauthToken(base64Token)
.withNamespace(nameSpace)
.build();
KubernetesClient client = new DefaultKubernetesClient(config);
return client ;
方法二:
修改删除方法,在operation(job)上使用 inNamespace,返回NonNamespaceOperation