Cuál será el equivalente a la creación de un puesto de trabajo:
kubectl -n my-ns create job --from=cronjob/my-cron-job my-jobusando javascript kubernetes-client ?
No, desafortunadamente no puedes.
Verifique mi respuesta anterior en Crear trabajo desde cronjob en la pregunta del archivo .yaml de kubernetes .
En resumen: puede hacer eso (crear trabajo desde cronjob) solo usando kubectl cli
Manera de crear un trabajo regular, sin --from=cronjob :
const k8s = require('@kubernetes/client-node'); const kc = new k8s.KubeConfig(); kc.loadFromCluster(); const k8sBatchV1Api = kc.makeApiClient(k8s.BatchV1Api); //creation of the job k8sBatchV1Api.createNamespacedJob('dev', { apiVersion: 'batch/v1', kind: 'Job', metadata: { ... } }, spec: { ... } } }}).catch(e => console.log(e))El ejemplo se tomó de la respuesta de @Popopame en Cómo crear un trabajo y un secreto de Kubernetes Javascript Client
Encontré la solución a mi pregunta, con la ayuda de este comentario .
Así es como se ve con javascript kubernetes-client , usado en un pod dentro del clúster (es posible que se necesite el permiso rbac, estoy ejecutando en k8s docker-desktop, así que no lo necesitaba):
const createJobFromCronJob = async ( cronJobNamespace: string, cronJobName: string, jobNamespace: string, jobName: string) => { // next 4 lines can be initialized somewhere else const kubeConfig = new k8s.KubeConfig(); kubeConfig.loadFromCluster(); const batchV1Api = kubeConfig.makeApiClient(k8s.BatchV1Api); const batchV1beta1Api = kubeConfig.makeApiClient(k8s.BatchV1beta1Api); try { const cronJob = await batchV1beta1Api.readNamespacedCronJob(cronJobName, cronJobNamespace); const cronJobSpec = cronJob.body.spec.jobTemplate.spec; const job = new k8s.V1Job(); const metadata = new k8s.V1ObjectMeta(); job.apiVersion = 'batch/v1'; job.kind = 'Job'; job.spec = cronJobSpec; metadata.name = jobName; metadata.annotations = { 'cronjob.kubernetes.io/instantiate': 'manual', }; job.metadata = metadata; const result = await batchV1Api.createNamespacedJob(jobNamespace, job); console.log('job created'); } catch (err) { console.error(`failed to create job: ${err.message}`); throw err; } }