我需要使用 kubernetes python 客户端将文件从 pod 复制到主机。这将是类似的东西kubectl cp pod:file file
。
我正在测试来自:https ://github.com/prafull01/Kubernetes-Utilities/blob/master/kubectl_cp_as_python_client.py 的代码。
特别是这段代码:
command_copy = ['tar', 'cf', '-', source_path]
with TemporaryFile() as tar_buffer:
exec_stream = stream(self.coreClient.connect_get_namespaced_pod_exec, pod_name, name_space,
command=command_copy, stderr=True, stdin=True, stdout=True, tty=False,
_preload_content=False)
# Copy file to stream
try:
while exec_stream.is_open():
exec_stream.update(timeout=1)
if exec_stream.peek_stdout():
out = exec_stream.read_stdout()
tar_buffer.write(out.encode('utf-8'))
if exec_stream.peek_stderr():
logger.debug("STDERR: %s" % exec_stream.read_stderr())
exec_stream.close()
tar_buffer.flush()
tar_buffer.seek(0)
with tarfile.open(fileobj=tar_buffer, mode='r:') as tar:
member = tar.getmember(source_path)
tar.makefile(member, destination_path)
return True
except Exception as e:
raise manage_kubernetes_exception(e)
我正在使用官方的 Kubernetes Python 库版本 10.0.1 和 Python 3.6.8 稳定
但它不能正常工作:
- 当我复制小文本文件时它正在工作
- 但它不适用于其他文件,例如 tar 或 zip 文件。它会复制与原始文件大小相同的损坏文件。
代码中是否有任何错误?你有没有其他方法可以通过使用 kubernetes python 客户端来做到这一点?
一切顺利。
谢谢。