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