2

我在 NodeJS 类中创建 Kubernetes 作业 导入库后@kubernetes/client-node,我创建了一个对象以使用BatchV1Api函数内的模块,我将其导出到其他类,在该类中我定义了 Kubernetes 作业的主体,如下所示:

//listJobs.js

import { post } from '../kubeClient.js';

const kubeRoute = async (ctx) => {
    const newJob = {
        metadata: {
            name: 'countdown',
        },
        spec: {
            template: {
                metadata: {
                    name: 'countdown',
                },
            },
            spec: {
                containers: [
                    {
                        name: 'counter',
                        image: 'centos:7',
                        command: 'bin/bash, -c, for i in 9 8 7 6 5 4 3 2 1 ; do echo $i ; done',
                    }],
                restartPolicy: 'Never',
            },
        },
    };

    const kubeClient = post();
    kubeClient.createNamespacedJob('default', newJob);
    ctx.body = {
        // listConfigMap: (await kubeClient.listConfigMapForAllNamespaces()).body,
        listJobs: (await kubeClient.listJobForAllNamespaces()).body,
        // listService: (await kubeClient.listServiceForAllNamespaces()).body,
    };
};

export default kubeRoute;

然后我创建了一个路由器类来请求 post 方法,例如:

import post from './listJobs.js';

const apiRouter = new Router();
apiRouter.post('/api/v1/newJob', post);

当在 postman 中执行应用程序并请求路由localhost:3000/api/v1/newJob作为 post 请求时,它422在 vs code 终端中显示状态代码(有一些很长的输出,如屏幕截图所示)和 postman 正文中的一些 Kubernetes 信息,但它没有创建任何工作或吊舱。

KubeJobTerminalError

有谁知道,为什么422最后有代码?

4

1 回答 1

1

状态码 422 Unprocessable Entity表示服务器理解内容类型,并且请求的语法正确,但无法处理包含的指令。

但是,在您的情况下,作业清单看起来不正确。

我不是 JavaScript kubernetes 客户端的专家,但newJobbody 看起来很奇怪。生成的 yaml 应如下所示

apiVersion: batch/v1
kind: Job
metadata:
  name: countdown
spec:
  template:
    spec:
      containers:
      - name: counter
        image: centos:7
        command: 'bin/bash, -c, for i in {9..1} ; do echo $i ; done' #fixed this one for you
      restartPolicy: Never

在您的情况下,第二个specspec. 它应该是 的孩子template,所以:

{
  "metadata": {
    "name": "countdown"
  },
  "spec": {
    "template": {
      "spec": {
        "containers": [
          {
            "name": "counter",
            "image": "centos:7",
            "command": "bin/bash, -c, for i in {9..1} ; do echo $i ; done"
          }
        ],
        "restartPolicy": "Never"
      }
    }
  }
}
于 2021-08-20T06:56:48.990 回答