如何在Pod之间复制文件或在Pod中执行?

时间:2019-06-25 19:44:28

标签: javascript node.js kubernetes kubernetes-pod

我正在尝试在pod中执行终端命令以获取文件内容。 在本地运行正常:

const Client = require('kubernetes-client').Client;
const Config = require('kubernetes-client/backends/request').config;
const Request = require('kubernetes-client/backends/request');

const config = Config.fromKubeconfig();
const client = new Client({ config: config, version: '1.13' });

const podResponse = await client.api.v1.namespaces(config.namespace).pods(<pod name>).exec.get({
        qs: {
            command: ['cat', 'README.md'],
            container: <container name>,
            stdout: true,
            stderr: true,
        },
    });

console.log(podResponse.body);

当我在Cluster上运行Node.js应用并进行以下更改时:

const config = Request.config.getInCluster();
const backend = new Request(config);
const client = new Client({ backend });

它仍然可以正常工作。我可以获取Pod /服务信息(Node.js应用程序在同一群集/命名空间上运行)。 但是.exec.get不起作用。它失败并显示:

{ Error: Unexpected server response: 401
        at ClientRequest.req.on (/usr/local/app/node_modules/ws/lib/websocket.js:579:7)
        at ClientRequest.emit (events.js:182:13)
        at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:556:21)
        at HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)
        at TLSSocket.socketOnData (_http_client.js:442:20)
        at TLSSocket.emit (events.js:182:13)
        at addChunk (_stream_readable.js:283:12)
        at readableAddChunk (_stream_readable.js:264:11)
        at TLSSocket.Readable.push (_stream_readable.js:219:10)
        at TLSWrap.onStreamRead (internal/stream_base_commons.js:94:17) messages: [] }

同样,我不需要传递任何身份验证信息。它可以很好地获取pod /服务的详细信息。 似乎该问题将在新版本中得到解决: kubernetes-client repo

所以想知道是否还有其他方法可以通过JavaScript从吊舱中复制文件,例如:

kubectl cp <file-spec-src> <file-spec-dest>

1 个答案:

答案 0 :(得分:-1)

其实我觉得你的问题是你想在容器内执行命令“cat readme”对吗?

为此,容器内应该存在该文件的副本

为此,您可以使用主机路径,以便将包含该文件的部分挂载到特定目录中的节点

你可以参考https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

但是这个问题是你必须复制该目录以及存在于所有节点的文件