You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@kubernetes/client-node获取集群Job失败及loadFromFile加载配置问题咨询

一、loadFromFile 加载配置失败排查

  • 路径校验:你当前使用的相对路径./config/k8sConfig.yaml是相对于Node进程启动时的工作目录,而非代码文件所在目录,建议改为绝对路径规避问题,示例如下:
import path from 'path';
import { fileURLToPath } from 'url';
// CommonJS 环境直接用 __dirname,ESM 环境需要先获取当前文件路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

kc.loadFromFile(path.join(__dirname, './config/k8sConfig.yaml'));
  • 配置文件校验:
    1. 确认kubeconfig文件格式符合标准,且Node运行进程对该文件、以及kubeconfig中引用的所有证书密钥文件有可读权限
    2. kubeconfig中填写的证书/密钥路径如果为相对路径,是相对于kubeconfig文件本身的存放位置,而非Node进程工作目录,可统一改为绝对路径验证

二、获取集群内全部活跃Job及对应Pod实现

核心逻辑说明

  1. 活跃Job判定标准:Job的status.active值大于0,且未进入完成/失败终态
  2. Job与Pod关联规则:Job创建的Pod会自动携带job-name: <对应Job名称>的标签,可通过该标签过滤关联Pod
  3. 活跃Pod判定标准:Pod的status.phase为Running状态

完整实现代码

import path from 'path';
import { fileURLToPath } from 'url';
import { KubeConfig, CoreV1Api, BatchV1Api } from '@kubernetes/client-node';

// 初始化配置,使用绝对路径加载kubeconfig
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const kc = new KubeConfig();
kc.loadFromFile(path.join(__dirname, './config/k8sConfig.yaml'));

// 初始化CoreV1Api(操作Pod)和BatchV1Api(操作Job)
const coreApi = kc.makeApiClient(CoreV1Api);
const batchApi = kc.makeApiClient(BatchV1Api);

async function getActiveJobsAndPods() {
  // 1. 获取所有命名空间下的所有Job
  const jobRes = await batchApi.listJobForAllNamespaces();
  // 2. 过滤出活跃Job
  const activeJobs = jobRes.body.items.filter(job => (job.status?.active ?? 0) > 0);

  const result = [];
  // 3. 遍历活跃Job,查询对应的活跃Pod
  for (const job of activeJobs) {
    const jobName = job.metadata.name;
    const namespace = job.metadata.namespace;
    // 按job-name标签和运行状态过滤Pod
    const podRes = await coreApi.listNamespacedPod(
      namespace,
      undefined,
      undefined,
      undefined,
      'status.phase=Running',
      `job-name=${jobName}`
    );
    result.push({
      jobInfo: job,
      activePods: podRes.body.items
    });
  }
  return result;
}

// 调用方法输出结果
getActiveJobsAndPods().then(res => {
  console.log('活跃Job及对应Pod:', JSON.stringify(res, null, 2));
}).catch(err => {
  console.error('调用出错:', err);
});

内容的提问来源于stack exchange,提问作者shivam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 19:15:00