我正在尝试在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>
答案 0 :(得分:-1)
其实我觉得你的问题是你想在容器内执行命令“cat readme”对吗?
为此,容器内应该存在该文件的副本
为此,您可以使用主机路径,以便将包含该文件的部分挂载到特定目录中的节点
你可以参考https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
但是这个问题是你必须复制该目录以及存在于所有节点的文件