Estoy creando un trabajo de Kubernetes dentro de la clase NodeJS Después de importar la biblioteca @kubernetes/client-node , creé un objeto para usar el módulo BatchV1Api dentro de la función que estoy exportando a otra clase en la que he definido el cuerpo del trabajo de Kubernetes como esto:
//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;Luego creé una clase de enrutador para solicitar el método de publicación como:
import post from './listJobs.js'; const apiRouter = new Router(); apiRouter.post('/api/v1/newJob', post); al ejecutar la aplicación y solicitar la ruta localhost:3000/api/v1/newJob como una solicitud posterior en cartero, muestra el código de estado 422 (con una salida muy larga, como en la captura de pantalla) en el terminal de código vs y algunos Kubernetes información en el cuerpo del cartero, pero no está creando ningún trabajo o pod.
¿Alguien tiene alguna idea de por qué hay un código 422 al final?
El código de estado 422 Entidad no procesable significa que el servidor comprende el tipo de contenido y la sintaxis de la solicitud es correcta, pero no pudo procesar las instrucciones contenidas.
Sin embargo, en su caso, el manifiesto de trabajo se ve mal.
No soy un experto en JavaScript kubernetes client, pero el cuerpo de newJob se ve extraño. El yaml resultante debería verse así
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 En su caso, la segunda spec es un elemento secundario de la spec . Debería ser un elemento secundario de la template , por lo que:
{ "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" } } } }