Скопируйте файл с модуля на хост с помощью клиента kubernetes python - PullRequest
0 голосов
/ 12 января 2020

Мне нужно скопировать файл из модуля на хост с помощью клиента kubernetes python. Это будет что-то вроде 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?

Всего наилучшего.

Спасибо.

1 Ответ

0 голосов
/ 12 января 2020

Есть ли у вас какой-либо другой способ сделать это с помощью клиента kubernetes python?

Если вам нужен только один файл из модуля Pod, не используйте tar скорее вместо этого /bin/cat, с дополнительным преимуществом, которое вы можете просто записывать непосредственно в локальный файл, не имея дело с форматом файла tar. Недостатком этого подхода является то, что вы будете нести ответственность за установку разрешений для локального файла в соответствии с тем, что вы ожидали от них, и это то, что tar -xf сделает для вас. Но если вы копируете удаленный tar-файл или zip-файл, это ограничение в любом случае не будет применяться и может сделать код намного проще для рассуждений о

...