Questo contenuto non è disponibile nella lingua selezionata.

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

Formazione

Prova, acquista e vendi

Community

Informazioni sulla documentazione di Red Hat

Aiutiamo gli utenti Red Hat a innovarsi e raggiungere i propri obiettivi con i nostri prodotti e servizi grazie a contenuti di cui possono fidarsi.

Rendiamo l’open source più inclusivo

Red Hat si impegna a sostituire il linguaggio problematico nel codice, nella documentazione e nelle proprietà web. Per maggiori dettagli, visita ilBlog di Red Hat.

Informazioni su Red Hat

Forniamo soluzioni consolidate che rendono più semplice per le aziende lavorare su piattaforme e ambienti diversi, dal datacenter centrale all'edge della rete.

© 2024 Red Hat, Inc.