我正在try 在使用fabric.io时获取当前的命名空间和部署名称.
对于命名空间,我使用:k8sClient.getProfile(). getspace()
知道我应该使用什么来获取当前部署名称吗?
我正在部署具有特定部署名称的代码(使用pod),例如:"helm install myDeploymentName ."我需要获得名称:"myDeploymentName"
我正在try 在使用fabric.io时获取当前的命名空间和部署名称.
对于命名空间,我使用:k8sClient.getProfile(). getspace()
知道我应该使用什么来获取当前部署名称吗?
我正在部署具有特定部署名称的代码(使用pod),例如:"helm install myDeploymentName ."我需要获得名称:"myDeploymentName"
/etc/hostname
.您可以通过使用上述任何一种方法中的此名称获取pod,并从.metadata.ownerReferences
获取所有者Copy Set的名称.然后从Copy Set的.metadata.ownerReferences
中获取找到的Copy Set的所有者部署
以下是使用方法1获取部署名称的一些代码:
public String getDeploymentName() {
File hostName = new File("/etc/hostname");
try {
// Get Pod name either by reading the file or via environment variable exposed using Downward API
String podName = new String(Files.readAllBytes(hostName.toPath()));
Pod pod = client.pods().inNamespace("default").withName(podName).get();
OwnerReference replicaSetOwnerRef = getControllerOwnerReference(pod);
if (replicaSetOwnerRef != null) {
ReplicaSet replicaSet = client.apps().replicaSets().inNamespace("default").withName(replicaSetOwnerRef.getName()).get();
OwnerReference deploymentOwnerRef = getControllerOwnerReference(replicaSet);
if (deploymentOwnerRef != null) {
Deployment deployment = client.apps().deployments().inNamespace("default").withName(deploymentOwnerRef.getName()).get();
return deployment.getMetadata().getName();
}
}
} catch (IOException ioException) {
// Handle exception
}
return null;
}
private OwnerReference getControllerOwnerReference(HasMetadata resource) {
return resource.getMetadata().getOwnerReferences().stream()
.filter(o -> Boolean.TRUE.equals(o.getController()))
.findAny()
.orElse(null);
}