Ошибка ChildProcessError: превышена максимальная длина буфера stdout

#javascript #node.js #kubernetes

Вопрос:

У нас есть следующий код (не спрашивайте меня, почему…даже если он не является разработчиком javascript, он мне не нравится), который выдает ошибку после обновления Kubernetes:

 module.exports.getReplicationControllers = async function getReplicationControllers(namespace) {
  const kubeConfig = (await getNamespacesByCluster()).get(namespace);
  if (!kubeConfig) throw new Error(`No clusters contain the namespace ${namespace}`)
  const kubeConfigEscaped = shellEscape([kubeConfig]);

  const namespaceEscaped = shellEscape([namespace]);
  const result = await cpp(`kubectl --kubeconfig ${kubeConfigEscaped} get replicationcontrollers -o json -n ${namespaceEscaped}`);
  console.error(result.stderr);
  /** @type {{items: any[]}} */
  const resultParsed = JSON.parse(result.stdout);
  const serviceNames = resultParsed.items.map((item) => item.metadata.name);
  return serviceNames;
}
 

Ошибка ChildProcessError: длина stdout maxBuffer превышена kubectl —kubeconfig /kubeconfig-промежуточные контроллеры репликации-o json -n xxx (выведено с кодом ошибки ERR_CHILD_PROCESS_STDIO_MAXBUFFER)

То, что я пробовал до сих пор, это:

   const result = await cpp(`kubectl --kubeconfig ${kubeConfigEscaped} get replicationcontrollers -o=jsonpath='{.items[*].metadata.name}' -n ${namespaceEscaped}`);
  console.error(result.stderr);
  const serviceNames = result.split(' ');
  return serviceNames;
 

Который возвращает

Ошибка типа: результат.разделение не является функцией

Я не очень разбираюсь в JavaScript, любая помощь приветствуется.

Комментарии:

1. Существует официальный клиент Javascript Kubernetes ; можете ли вы использовать его вместо того, чтобы выкладывать kubectl ? (Вероятно, это будет проще и безопаснее; в самом первом примере на странице GitHub перечислены модули, и было бы просто адаптировать их к контроллерам репликации списков или другим типам объектов.)

Ответ №1:

Отвечая на вопрос в целом (вместо того, чтобы заставлять вас переключаться на другой инструмент), для людей, у которых есть этот вопрос и которые могут использовать другие приложения:

Ошибка диапазона [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]: превышена максимальная длина буфера stdout

Проблема вызвана тем, что ваша команда отправляет много данных (более 1 МБ) в stdout или stderr.

Увеличьте maxBuffer параметр в exec() для документов узла для process.exec

 exec(someCommand, {
  maxBuffer: 5 * 1024 * 1024,
})