Kubernetes用于Kubectl copy命令的Java API

Kubernetes用于Kubectl copy命令的Java API,kubernetes,kubectl,google-kubernetes-engine,Kubernetes,Kubectl,Google Kubernetes Engine,我有一个容器在Kubernetes集群(POD内)中运行,同时还有许多其他容器(在它们自己的POD内),我的容器是一个普通容器。现在,我想将文件从其他容器拉(复制)到我的公共容器中。我调查了一些选项,发现可以使用kubectl副本。但是,为此,我需要在我的公共容器中包含kubectl命令行工具。我不确定这是否是正确的方法。因此,我想到了使用JavaKubernetesAPI来做同样的事情。 Kubectl copy命令是否有等效的Kubernetes REST API?我浏览了kubernete

我有一个容器在Kubernetes集群(POD内)中运行,同时还有许多其他容器(在它们自己的POD内),我的容器是一个普通容器。现在,我想将文件从其他容器拉(复制)到我的公共容器中。我调查了一些选项,发现可以使用kubectl副本。但是,为此,我需要在我的公共容器中包含kubectl命令行工具。我不确定这是否是正确的方法。因此,我想到了使用JavaKubernetesAPI来做同样的事情。 Kubectl copy命令是否有等效的Kubernetes REST API?我浏览了kubernetes API,但找不到任何这样的API

谢谢

这是因为,实际上发生的是
kubectl exec$pod--tar-cf-/container/file | tar-xf-
,这也是我希望您的Java API需要做的

然而,根据您的需要,您可能能够摆脱我在
kubectl cp
到来之前的做法:
kubectl exec$pod--/bin/cat/the/container/file>local file
,在您的情况下,这可能要容易得多,因为我希望API将这些字节具体化为
输入流,为您节省了进入tar格式解析业务的需要

这是因为,实际发生的是
kubectl exec$pod--tar-cf-/the/container/file | tar-xf-
,这也是我期望您的Java API需要做的


然而,根据您的需要,您可能能够摆脱我在
kubectl cp
到来之前的做法:
kubectl exec$pod--/bin/cat/the/container/file>local file
,在您的情况下,这可能要容易得多,因为我希望API将这些字节具体化为
输入流,省去了您进入tar格式解析业务的需要

我认为您应该能够使用。我将把这分为两项任务:

  • 将指定的文件从容器(
    c1
    )复制到本地系统
  • 将保存到本地系统的文件复制到其他容器(例如
    c2
  • 假设你有一个吊舱在Kubernetes内运行,有两个容器
    c1
    c2
    。以此为例:

    apiVersion:v1 种类:豆荚 元数据: 名称:多集装箱吊舱 规格: 容器: -姓名:c1 图片:nginx:1.19.2 端口: -集装箱港口:80 -姓名:c2 图片:阿尔卑斯山:3.12 命令:[“watch”、“wget”、“-qO-”、“localhost”]
    现在我想将
    c1
    中的文件
    /docker entrypoint.sh
    传输到
    c2
    中的
    /tmp/docker entrypoint.sh
    。提供流畅的DSL,用于从Kubernetes吊舱上载/下载文件。正如@mndanial在他的回答中已经指出的,复制操作涉及编码/解码,Fabric8依赖于和。这些是可选的依赖项,需要包含在类路径中才能使用复制操作。对于maven来说,将其添加到
    pom.xml
    ,如下所示:

    
    通用编解码器
    还允许您以
    InputStream
    的形式直接读取文件,而不是将其存储。以下是一个例子:

    try(KubernetesClient=newdefaultkubernetesclient()){
    try(InputStream=client.pods()
    .inNamespace(“默认”)
    .带名称(“quarkus-84dc4885b-tsck6”)
    .inContainer(“quarkus”)
    .file(“/tmp/jobExample.yml”).read(){
    字符串结果=new BufferedReader(new InputStreamReader(is)).lines().collect(Collector.joining(“\n”));
    系统输出打印项次(结果);
    }
    }
    
    我认为您应该可以使用。我将把这分为两项任务:

  • 将指定的文件从容器(
    c1
    )复制到本地系统
  • 将保存到本地系统的文件复制到其他容器(例如
    c2
  • 假设你有一个吊舱在Kubernetes内运行,有两个容器
    c1
    c2
    。以此为例:

    apiVersion:v1 种类:豆荚 元数据: 名称:多集装箱吊舱 规格: 容器: -姓名:c1 图片:nginx:1.19.2 端口: -集装箱港口:80 -姓名:c2 图片:阿尔卑斯山:3.12 命令:[“watch”、“wget”、“-qO-”、“localhost”]
    现在我想将
    c1
    中的文件
    /docker entrypoint.sh
    传输到
    c2
    中的
    /tmp/docker entrypoint.sh
    。提供流畅的DSL,用于从Kubernetes吊舱上载/下载文件。正如@mndanial在他的回答中已经指出的,复制操作涉及编码/解码,Fabric8依赖于和。这些是可选的依赖项,需要包含在类路径中才能使用复制操作。对于maven来说,将其添加到
    pom.xml
    ,如下所示:

    
    通用编解码器
    还允许您以
    InputStream
    的形式直接读取文件,而不是将其存储。以下是一个例子:

    try(KubernetesClient=newdefaultkubernetesclient()){
    try(InputStream=client.pods()
    .inNamespace(“默认”)
    .带名称(“quarkus-84dc4885b-tsck6”)
    .inContainer(“quarkus”)
    .file(“/tmp/jobExample.yml”).read(){
    字符串结果=new BufferedReader(new InputStreamReader(is)).lines().collect(Collector.joining(“\n”));
    系统输出打印项次(结果);
    }
    }