#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,
})