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

AKS集群中Kubernetes Job未执行Node.js脚本问题排查求助

问题排查与修复方案

核心问题分析

  • Job命令参数错误:将脚本内容直接作为参数传给node命令,而非指定脚本路径
  • 文件挂载方式错误:使用hostPath无法访问Helm Chart包内的本地文件
  • 脚本核心逻辑未触发:数据导入函数被注释,未执行实际导入操作
  • 文件路径读取错误:脚本中未使用容器内的正确挂载路径读取catalog.json

分步修复

1. 修正Job的命令与挂载配置

原Job中args配置错误,且hostPath不适用于挂载Helm包内文件,改为使用ConfigMap挂载:

apiVersion: batch/v1
kind: Job
metadata:
  name: {{ .Release.Name }}-job
  labels:
    app: {{ .Release.Name }}
spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
        - name: {{ .Release.Name }}-job
          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
          command: ["node", "/app/files/sendRepairData.js"]  # 直接指定容器内脚本路径
          volumeMounts:
            - name: repair-catalog
              mountPath: /app/files
      volumes:
        - name: repair-catalog
          configMap:  # 替换hostPath为ConfigMap,挂载Chart内的文件
            name: {{ .Release.Name }}-repair-catalog

2. 新增ConfigMap模板挂载文件

在Helm Chart的templates目录下创建configmap.yaml,将脚本和数据文件打包为ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-repair-catalog
data:
  sendRepairData.js: |-
{{ .Files.Get "files/sendRepairData.js" | indent 4 }}
  catalog.json: |-
{{ .Files.Get "files/catalog.json" | indent 4 }}

3. 修复脚本逻辑与路径

  • 取消核心导入函数的注释,触发数据导入
  • 修改文件读取路径为容器内的挂载路径
  • 修正HTTP请求路径(缺少开头的/会导致请求地址错误)

修改后的sendRepairData.js关键片段:

// 取消注释,执行数据导入逻辑
uploadRepairCatalog();

// 读取挂载目录下的catalog.json
const catalogData = fs.readFileSync('/app/files/catalog.json'); 

// 修正HTTP请求路径(添加开头的/)
path: '/api/server/repairs',
// ...
path: `/api/server/repairs/${repair.id}`,

4. 验证与日志排查

重新安装Helm Chart:

helm upgrade --install fixit-repair-catalog ./your-chart-path

查看Pod日志:

kubectl logs -l job-name=fixit-repair-catalog-job

若仍无日志输出,可临时修改Job配置添加调试入口:

containers:
  - name: {{ .Release.Name }}-job
    # 保留原有配置
    tty: true
    stdin: true

通过kubectl exec -it <pod-name> -- /bin/bash进入容器,检查文件是否存在、脚本能否正常执行。

额外注意事项

  • AKS环境避免使用hostPath:hostPath依赖节点本地磁盘,容器调度到其他节点时会丢失文件,ConfigMap/Secret是管理配置文件的标准方案
  • 服务可达性检查:确保server-clusterip-service与Job在同一Namespace,或使用完整域名server-clusterip-service.<namespace>.svc.cluster.local
  • Node版本建议:node:14为老旧版本,建议升级至长期支持版本(如18/20)以避免兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:47:37