Este contenido no está disponible en el idioma seleccionado.

Chapter 200. Kubernetes Job Component


Available as of Camel version 2.23

The Kubernetes Job component is one of Kubernetes Components which provides a producer to execute kubernetes job operations.

200.1. Component Options

The Kubernetes Job component has no options.

200.2. Endpoint Options

The Kubernetes Job endpoint is configured using URI syntax:

kubernetes-job:masterUrl

with the following path and query parameters:

200.2.1. Path Parameters (1 parameters):

NameDescriptionDefaultType

masterUrl

Required Kubernetes API server URL

 

String

200.2.2. Query Parameters (28 parameters):

NameDescriptionDefaultType

apiVersion (common)

The Kubernetes API Version to use

 

String

dnsDomain (common)

The dns domain, used for ServiceCall EIP

 

String

kubernetesClient (common)

Default KubernetesClient to use if provided

 

KubernetesClient

portName (common)

The port name, used for ServiceCall EIP

 

String

portProtocol (common)

The port protocol, used for ServiceCall EIP

tcp

String

bridgeErrorHandler (consumer)

Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored.

false

boolean

labelKey (consumer)

The Consumer Label key when watching at some resources

 

String

labelValue (consumer)

The Consumer Label value when watching at some resources

 

String

namespace (consumer)

The namespace

 

String

poolSize (consumer)

The Consumer pool size

1

int

resourceName (consumer)

The Consumer Resource Name we would like to watch

 

String

exceptionHandler (consumer)

To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored.

 

ExceptionHandler

exchangePattern (consumer)

Sets the exchange pattern when the consumer creates an exchange.

 

ExchangePattern

operation (producer)

Producer operation to do on Kubernetes

 

String

connectionTimeout (advanced)

Connection timeout in milliseconds to use when making requests to the Kubernetes API server.

 

Integer

synchronous (advanced)

Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported).

false

boolean

caCertData (security)

The CA Cert Data

 

String

caCertFile (security)

The CA Cert File

 

String

clientCertData (security)

The Client Cert Data

 

String

clientCertFile (security)

The Client Cert File

 

String

clientKeyAlgo (security)

The Key Algorithm used by the client

 

String

clientKeyData (security)

The Client Key data

 

String

clientKeyFile (security)

The Client Key file

 

String

clientKeyPassphrase (security)

The Client Key Passphrase

 

String

oauthToken (security)

The Auth Token

 

String

password (security)

Password to connect to Kubernetes

 

String

trustCerts (security)

Define if the certs we used are trusted anyway or not

 

Boolean

username (security)

Username to connect to Kubernetes

 

String

200.3. Supported Producer Operation

The Kubernetes Job component supports following producer operations:

  • listJob
  • listJobByLabels
  • getJob
  • createJob
  • replaceJob
  • deleteJob

200.4. Kubernetes Job Producer Examples

  • listJob: this operation list the jobs on a kubernetes cluster

    from("direct:list").
        toF("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJob").
        to("mock:result");

    This operation return a List of Job from your cluster

  • listJobByLabels: this operation list the jobs by labels on a kubernetes cluster

    from("direct:listByLabels").process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    Map<String, String> labels = new HashMap<>();
                    labels.put("key1", "value1");
                    labels.put("key2", "value2");
                    exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, labels);
                }
            });
        toF("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJobByLabels").
        to("mock:result");

    This operation return a List of Jobs from your cluster, using a label selector (with key1 and key2, with value value1 and value2)

  • createJob: This operation create a job on a Kubernetes Cluster

    We have a wonderful example of this operation thanks to Emmerson Miranda from this Java test

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.inject.Inject;
    
    import org.apache.camel.Endpoint;
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.cdi.Uri;
    import org.apache.camel.component.kubernetes.KubernetesConstants;
    import org.apache.camel.component.kubernetes.KubernetesOperations;
    
    import io.fabric8.kubernetes.api.model.Container;
    import io.fabric8.kubernetes.api.model.ObjectMeta;
    import io.fabric8.kubernetes.api.model.PodSpec;
    import io.fabric8.kubernetes.api.model.PodTemplateSpec;
    import io.fabric8.kubernetes.api.model.batch.JobSpec;
    
    public class KubernetesCreateJob extends RouteBuilder {
    
        @Inject
        @Uri("timer:foo?delay=1000&repeatCount=1")
        private Endpoint inputEndpoint;
    
        @Inject
        @Uri("log:output")
        private Endpoint resultEndpoint;
    
        @Override
        public void configure() {
            // you can configure the route rule with Java DSL here
    
            from(inputEndpoint)
            	.routeId("kubernetes-jobcreate-client")
            	.process(exchange -> {
            		exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_NAME, "camel-job"); //DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
                    exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default");
    
                    Map<String, String> joblabels = new HashMap<String, String>();
                    joblabels.put("jobLabelKey1", "value1");
                    joblabels.put("jobLabelKey2", "value2");
                    joblabels.put("app", "jobFromCamelApp");
                    exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, joblabels);
    
                    exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, generateJobSpec());
            	})
            	.toF("kubernetes-job:///{{kubernetes-master-url}}?oauthToken={{kubernetes-oauth-token:}}&operation=" + KubernetesOperations.CREATE_JOB_OPERATION)
            	.log("Job created:")
            	.process(exchange -> {
            		System.out.println(exchange.getIn().getBody());
            	})
                .to(resultEndpoint);
        }
    
    	private JobSpec generateJobSpec() {
    		JobSpec js = new JobSpec();
    
    		PodTemplateSpec pts = new PodTemplateSpec();
    
    		PodSpec ps = new PodSpec();
    		ps.setRestartPolicy("Never");
    		ps.setContainers(generateContainers());
    		pts.setSpec(ps);
    
    		ObjectMeta metadata = new ObjectMeta();
    		Map<String, String> annotations = new HashMap<String, String>();
    		annotations.put("jobMetadataAnnotation1", "random value");
    		metadata.setAnnotations(annotations);
    
    		Map<String, String> podlabels = new HashMap<String, String>();
    		podlabels.put("podLabelKey1", "value1");
    		podlabels.put("podLabelKey2", "value2");
    		podlabels.put("app", "podFromCamelApp");
    		metadata.setLabels(podlabels);
    
    		pts.setMetadata(metadata);
    		js.setTemplate(pts);
    		return js;
    	}
    
    	private List<Container> generateContainers() {
    		Container container = new Container();
    		container.setName("pi");
    		container.setImage("perl");
    		List<String> command = new ArrayList<String>();
    		command.add("echo");
    		command.add("Job created from Apache Camel code at " + (new Date()));
    		container.setCommand(command);
    		List<Container> containers = new ArrayList<Container>();
    		containers.add(container);
    		return containers;
    	}
    }

200.5. Spring Boot Auto-Configuration

The component supports 2 options, which are listed below.

NameDescriptionDefaultType

camel.component.kubernetes-job.enabled

Whether to enable auto configuration of the kubernetes-job component. This is enabled by default.

 

Boolean

camel.component.kubernetes-job.resolve-property-placeholders

Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders.

true

Boolean

Red Hat logoGithubRedditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

© 2024 Red Hat, Inc.