A logo showing the text blog.marcnuri.com
English
Inicio»Java»Ejecutar Kubernetes CronJob manualmente desde Java usando YAKC

Entradas Recientes

  • Kubernetes MCP Server se une a la organización Containers
  • MCP Tool Annotations: Añadiendo Metadatos y Contexto a Tus Herramientas de IA
  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • julio 2025
  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • septiembre 2022
  • agosto 2022
  • julio 2022
  • junio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • enero 2021
  • diciembre 2020
  • octubre 2020
  • septiembre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Ejecutar Kubernetes CronJob manualmente desde Java usando YAKC

2021-01-04 en Java etiquetado Java / JBang / DevOps / Kubernetes / REST / YAKC por Marc Nuri | Última actualización: 2025-08-29
English version

Introducción

En este post, te mostraré cómo realizar el equivalente a kubectl --from=cronjob/<cronjob-name> <job-name> (ejecución manual) desde Java usando YAKC- Yet Another Kubernetes Client.

Esto realiza algo similar a lo que hace la acción de activación de CronJob del Dashboard oficial de Kubernetes.

Una captura de pantalla del Dashboard de Kubernetes: Ejecutar CronJob manualmente
Una captura de pantalla del Dashboard de Kubernetes: Ejecutar CronJob manualmente

Ejecución manual de CronJob

Una vez que has desplegado un CronJob en tu cluster, en la mayoría de los casos tiene sentido activar una ejecución de prueba. Probablemente, necesites verificar que todo funciona correctamente sin tener que esperar a la hora programada.

A partir de la versión 1.10, Kubernetes ofrece una forma de crear un Job desde un CronJob usando kubectl. Esto básicamente se traduce en ejecutar manualmente el CronJob.

A continuación te muestro la implementación del código en Kubectl:

func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *batchv1.Job {
  annotations := make(map[string]string)
  annotations["cronjob.kubernetes.io/instantiate"] = "manual"
  for k, v := range cronJob.Spec.JobTemplate.Annotations {
    annotations[k] = v
  }

  job := &batchv1.Job{
    // this is ok because we know exactly how we want to be serialized
    TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
    ObjectMeta: metav1.ObjectMeta{
      Name:        o.Name,
      Annotations: annotations,
      Labels:      cronJob.Spec.JobTemplate.Labels,
      OwnerReferences: []metav1.OwnerReference{
        {
          APIVersion: batchv1beta1.SchemeGroupVersion.String(),
          Kind:       cronJob.Kind,
          Name:       cronJob.GetName(),
          UID:        cronJob.GetUID(),
        },
      },
    },
    Spec: cronJob.Spec.JobTemplate.Spec,
  }
  if o.EnforceNamespace {
    job.Namespace = o.Namespace
  }
  return job
}

En el fragmento de código anterior, vemos cómo kubectl crea un nuevo Job usando el JobTemplate del CronJob y propaga las etiquetas.

Ejecutar CronJob desde Java

Ahora que hemos visto cómo kubectl crea un Job desde un CronJob, veamos cómo podemos lograr esto con YAKC.

final CronJob cronJob = kc.create(BatchV1beta1Api.class).readNamespacedCronJob(name, applicableNamespace).get();
final String jobName = String.format("%s-manual-%s",
  name.length() > 38 ? name.substring(0, 38) : name,
  new Random().nextInt(999999)
);
kc.create(BatchV1Api.class).createNamespacedJob(applicableNamespace, Job.builder()
  .metadata(ObjectMeta.builder()
    .name(jobName).namespace(applicableNamespace)
    .labels(new HashMap<>(Optional.ofNullable(cronJob.getMetadata().getLabels()).orElse(Collections.emptyMap())))
    .putInAnnotations("cronjob.kubernetes.io/instantiate", "manual")
    .addToOwnerReferences(OwnerReference.builder()
      .kind(cronJob.getKind())
      .apiVersion(cronJob.getApiVersion())
      .controller(false)
      .name(cronJob.getMetadata().getName())
      .uid(cronJob.getMetadata().getUid())
      .build())
    .build())
  .spec(cronJob.getSpec().getJobTemplate().getSpec())

El fragmento de código anterior es parte del quickstart de CronJobs jbang.

El primer paso es recuperar el CronJob actual del cluster. A continuación, generamos un nombre aleatorio para el job activado manualmente usando el nombre del CronJob como prefijo.

Finalmente, creamos un nuevo Job usando el JobTemplateSpec del CronJob recuperado y propagamos sus etiquetas. También agregamos una referencia de propietario al Job creado para que pueda ser asociado y listado al consultar el CronJob.

Dado que este ejemplo está alojado como un script de jbang, puedes probarlo directamente ejecutando el siguiente comando:

jbang https://github.com/manusa/yakc/blob/master/quickstarts/jbang/CronJobs.java trigger $cronJobName

A continuación puedes verificar el resultado de la operación en la interfaz de YAKC – Kubernetes Dashboard (puedes leer más sobre este proyecto aquí):

Demo de activación manual de CronJob en YAKC Kubernetes Dashboard
Demo de activación manual de CronJob en YAKC Kubernetes Dashboard

Conclusión

En este post, te he mostrado cómo activar manualmente CronJobs desde Java usando YAKC.

He extraído el código para este post de la sección de quickstarts jbang de YAKC. Puedes aprender más visitando el sitio del proyecto YAKC en GitHub. También puedes ver el código relacionado aquí.

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Cómo instalar Prometheus y Grafana en MinikubeKubernetes: Operador vs. Controller
© 2007 - 2025 Marc Nuri