我正在try 在使用fabric.io时获取当前的命名空间和部署名称.

对于命名空间,我使用:k8sClient.getProfile(). getspace()

知道我应该使用什么来获取当前部署名称吗?

我正在部署具有特定部署名称的代码(使用pod),例如:"helm install myDeploymentName ."我需要获得名称:"myDeploymentName"

推荐答案

  • 通常pod名称写为/etc/hostname.
  • 您可以依靠Kubernetes Downward API将pod信息公开给环境变量或文件(请参阅示例here).

您可以通过使用上述任何一种方法中的此名称获取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);
    }

Java相关问答推荐

我想知道为什么我的控制器给出嵌套响应

Java应用程序RAC感知

表格栏上的事件过滤器在PFA中不起作用

Maven Google Sheets版本问题

具有默认分支的JUnit代码覆盖率切换声明

为什么一个Test的instance?& gt;在构造函数中接受非空对象?

OpenGL ES 3.0-纹理黑色

如何在EXCEL单元格中添加形状和文本

Java中将文本拆分为数字或十进制数字和字符串

匹配一组字符或另一组字符

在添加AdMob时无法为Google Play构建应用程序包:JVM垃圾收集器崩溃和JVM内存耗尽

Spring-Boot Kafka应用程序到GraalVM本机映像-找不到org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier

Domino中不同的java.Protocol.handler.pkgs设置在XPages Java中导致错误

如何使这两种方法合二为一?

JOLT根据值删除并保留其余的json键

Java.time.OffsetDateTime的SQL Server数据库列类型是什么?

如何调整JButton的大小以适应图标?

在Java中将对象&转换为&q;HashMap(&Q)

如何使用Java ZoneID的区域设置?

简化每个元素本身都是 map 列表的列表