apache / camel-k

Apache Camel K is a lightweight integration platform, born on Kubernetes, with serverless superpowers
https://camel.apache.org/camel-k
Apache License 2.0
861 stars 344 forks source link

java.lang.ClassNotFoundException: io.quarkus.bootstrap.runner.QuarkusEntryPoint #4955

Closed lsergio closed 9 months ago

lsergio commented 9 months ago

What happened?

I'm trying to run a basic integration with Camel K 2.1 and it fails to start.

Steps to reproduce

  1. Setup a gcr repository as described in https://camel.apache.org/camel-k/2.1.x/installation/registry/gcr.html.

  2. Install kamel using the following command: kamel install --olm=false --build-publish-strategy=Kaniko --registry gcr.io --organization yourprojectid --registry-secret kaniko-secret

  3. Create a secret for pulling the images from GCR and configure the pull-secret trait in the IntegrationPlatform object:

    traits:
      pull-secret:
        secretName: gcr-json-key
  4. Create an Integration. In my case I used one like this:

    apiVersion: camel.apache.org/v1
    kind: Integration
    metadata:
    name: test
    spec:
    sources:
    - name: main.groovy
    content: |-
      rest("/test-mode")
          .post()
          .to("direct:start")
    
      from("direct:start").to("log:info")
  5. Wait for the builder to finish and create the integration pod.

  6. Check the Integration pod log.

There will be this error:

Error: Could not find or load main class io.quarkus.bootstrap.runner.QuarkusEntryPoint
Caused by: java.lang.ClassNotFoundException: io.quarkus.bootstrap.runner.QuarkusEntryPoint

The full log is added to the log output field.

Relevant log output

exec java -cp ./resources:/etc/camel/application.properties:/etc/camel/conf.d/_resources:/etc/camel/resources:/etc/camel/sources/main.groovy:dependencies/app/camel-k-integration-2.1.0.jar:dependencies/lib/boot/io.github.crac.org-crac-0.1.3.jar:dependencies/lib/boot/io.quarkus.quarkus-bootstrap-runner-3.2.6.Final.jar:dependencies/lib/boot/io.quarkus.quarkus-development-mode-spi-3.2.6.Final.jar:dependencies/lib/boot/io.quarkus.quarkus-vertx-latebound-mdc-provider-3.2.6.Final.jar:dependencies/lib/boot/io.smallrye.common.smallrye-common-io-2.1.0.jar:dependencies/lib/boot/jakarta.json.jakarta.json-api-2.1.2.jar:dependencies/lib/boot/org.eclipse.parsson.parsson-1.1.2.jar:dependencies/lib/boot/org.graalvm.sdk.graal-sdk-23.0.1.jar:dependencies/lib/boot/org.jboss.logging.jboss-logging-3.5.1.Final.jar:dependencies/lib/boot/org.jboss.logmanager.jboss-logmanager-embedded-1.1.1.jar:dependencies/lib/boot/org.wildfly.common.wildfly-common-1.5.4.Final-format-001.jar:dependencies/lib/main/com.aayushatharva.brotli4j.brotli4j-1.12.0.jar:dependencies/lib/main/com.aayushatharva.brotli4j.native-linux-x86_64-1.12.0.jar:dependencies/lib/main/com.aayushatharva.brotli4j.service-1.12.0.jar:dependencies/lib/main/com.fasterxml.jackson.core.jackson-annotations-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.core.jackson-core-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.core.jackson-databind-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.dataformat.jackson-dataformat-yaml-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.15.2.jar:dependencies/lib/main/com.fasterxml.jackson.module.jackson-module-parameter-names-2.15.2.jar:dependencies/lib/main/com.github.mifmif.generex-1.0.2.jar:dependencies/lib/main/dk.brics.automaton.automaton-1.11-8.jar:dependencies/lib/main/io.fabric8.kubernetes-client-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-client-api-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-httpclient-vertx-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-admissionregistration-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-apiextensions-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-apps-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-autoscaling-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-batch-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-certificates-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-common-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-coordination-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-core-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-discovery-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-events-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-extensions-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-flowcontrol-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-gatewayapi-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-metrics-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-networking-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-node-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-policy-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-rbac-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-resource-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-scheduling-6.7.2.jar:dependencies/lib/main/io.fabric8.kubernetes-model-storageclass-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-client-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-client-api-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-clusterautoscaling-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-config-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-console-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-hive-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-installer-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-machine-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-machineconfig-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-miscellaneous-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-monitoring-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-operator-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-operatorhub-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-storageversionmigrator-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-tuned-6.7.2.jar:dependencies/lib/main/io.fabric8.openshift-model-whereabouts-6.7.2.jar:dependencies/lib/main/io.fabric8.zjsonpatch-0.3.0.jar:dependencies/lib/main/io.netty.netty-buffer-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-dns-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-haproxy-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-http-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-http2-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-codec-socks-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-common-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-handler-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-handler-proxy-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-resolver-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-resolver-dns-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-transport-4.1.94.Final.jar:dependencies/lib/main/io.netty.netty-transport-native-unix-common-4.1.94.Final.jar:dependencies/lib/main/io.quarkiverse.groovy.quarkus-groovy-3.2.2.jar:dependencies/lib/main/io.quarkus.arc.arc-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-arc-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-core-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-credentials-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-fs-util-0.0.9.jar:dependencies/lib/main/io.quarkus.quarkus-jackson-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-jsonp-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-kubernetes-client-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-kubernetes-client-internal-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-logging-json-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-mutiny-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-netty-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-security-runtime-spi-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-smallrye-context-propagation-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-vertx-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-vertx-http-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.quarkus-vertx-http-dev-console-runtime-spi-3.2.6.Final.jar:dependencies/lib/main/io.quarkus.security.quarkus-security-2.0.2.Final.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-annotation-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-classloader-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-constraint-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-expression-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-function-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-os-2.1.0.jar:dependencies/lib/main/io.smallrye.common.smallrye-common-vertx-context-2.1.0.jar:dependencies/lib/main/io.smallrye.config.smallrye-config-3.3.2.jar:dependencies/lib/main/io.smallrye.config.smallrye-config-common-3.3.2.jar:dependencies/lib/main/io.smallrye.config.smallrye-config-core-3.3.2.jar:dependencies/lib/main/io.smallrye.config.smallrye-config-source-yaml-3.3.2.jar:dependencies/lib/main/io.smallrye.reactive.mutiny-2.3.1.jar:dependencies/lib/main/io.smallrye.reactive.mutiny-smallrye-context-propagation-2.3.1.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-auth-common-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-bridge-common-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-core-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-runtime-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-uri-template-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-web-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.smallrye-mutiny-vertx-web-common-3.5.0.jar:dependencies/lib/main/io.smallrye.reactive.vertx-mutiny-generator-3.5.0.jar:dependencies/lib/main/io.smallrye.smallrye-context-propagation-2.1.0.jar:dependencies/lib/main/io.smallrye.smallrye-context-propagation-api-2.1.0.jar:dependencies/lib/main/io.smallrye.smallrye-context-propagation-storage-2.1.0.jar:dependencies/lib/main/io.smallrye.smallrye-fault-tolerance-vertx-6.2.6.jar:dependencies/lib/main/io.vertx.vertx-auth-common-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-bridge-common-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-codegen-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-core-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-uri-template-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-web-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-web-client-4.4.4.jar:dependencies/lib/main/io.vertx.vertx-web-common-4.4.4.jar:dependencies/lib/main/jakarta.activation.jakarta.activation-api-2.1.2.jar:dependencies/lib/main/jakarta.annotation.jakarta.annotation-api-2.1.1.jar:dependencies/lib/main/jakarta.el.jakarta.el-api-5.0.1.jar:dependencies/lib/main/jakarta.enterprise.jakarta.enterprise.cdi-api-4.0.1.jar:dependencies/lib/main/jakarta.enterprise.jakarta.enterprise.lang-model-4.0.1.jar:dependencies/lib/main/jakarta.inject.jakarta.inject-api-2.0.1.jar:dependencies/lib/main/jakarta.interceptor.jakarta.interceptor-api-2.1.0.jar:dependencies/lib/main/jakarta.transaction.jakarta.transaction-api-2.0.1.jar:dependencies/lib/main/jakarta.xml.bind.jakarta.xml.bind-api-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-api-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-attachments-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-base-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-base-engine-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-bean-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-cloud-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-cluster-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-componentdsl-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-catalog-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-engine-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-languages-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-model-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-processor-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-core-reifier-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-direct-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-dsl-support-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-endpointdsl-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-endpointdsl-support-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-groovy-dsl-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-groovy-dsl-common-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-kubernetes-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-log-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-main-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-management-api-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-microprofile-config-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-platform-http-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-platform-http-vertx-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-rest-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-support-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-tooling-model-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-util-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-util-json-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-vertx-common-4.0.0.jar:dependencies/lib/main/org.apache.camel.camel-xml-jaxp-util-4.0.0.jar:dependencies/lib/main/org.apache.camel.k.camel-k-core-3.2.0.jar:dependencies/lib/main/org.apache.camel.k.camel-k-core-api-3.2.0.jar:dependencies/lib/main/org.apache.camel.k.camel-k-core-support-3.2.0.jar:dependencies/lib/main/org.apache.camel.k.camel-k-runtime-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-attachments-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-bean-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-core-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-core-cloud-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-direct-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-groovy-dsl-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-kubernetes-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-log-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-platform-http-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-rest-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-support-commons-logging-3.2.0.jar:dependencies/lib/main/org.apache.camel.quarkus.camel-quarkus-support-dsl-3.2.0.jar:dependencies/lib/main/org.apache.commons.commons-compress-1.23.0.jar:dependencies/lib/main/org.apache.groovy.groovy-4.0.13.jar:dependencies/lib/main/org.eclipse.angus.angus-activation-2.0.1.jar:dependencies/lib/main/org.eclipse.microprofile.config.microprofile-config-api-3.0.3.jar:dependencies/lib/main/org.eclipse.microprofile.context-propagation.microprofile-context-propagation-api-1.3.jar:dependencies/lib/main/org.jboss.logging.commons-logging-jboss-logging-1.0.0.Final.jar:dependencies/lib/main/org.jboss.logging.jboss-logging-annotations-2.2.1.Final.jar:dependencies/lib/main/org.jboss.slf4j.slf4j-jboss-logmanager-2.0.0.Final.jar:dependencies/lib/main/org.jboss.threads.jboss-threads-3.5.0.Final.jar:dependencies/lib/main/org.slf4j.slf4j-api-2.0.6.jar:dependencies/lib/main/org.snakeyaml.snakeyaml-engine-2.6.jar:dependencies/lib/main/org.yaml.snakeyaml-2.0.jar:dependencies/quarkus-app-dependencies.txt:dependencies/quarkus-run.jar:dependencies/quarkus/generated-bytecode.jar:dependencies/quarkus/quarkus-application.dat:dependencies/quarkus/transformed-bytecode.jar io.quarkus.bootstrap.runner.QuarkusEntryPoint
Error: Could not find or load main class io.quarkus.bootstrap.runner.QuarkusEntryPoint
Caused by: java.lang.ClassNotFoundException: io.quarkus.bootstrap.runner.QuarkusEntryPoint

Camel K version

2.1.0

squakez commented 9 months ago

It seems to be a problem with the container, like the application was not really pushed. Can you verify if the generated container has the required artifacts? Please check the image which is running the Pod. Also, consider we've deprecated Kaniko [1], so, if there is some problem there we won't be able to fix. Try to use default Spectrum or Jib strategy [2].

[1] https://camel.apache.org/blog/2023/10/camel-k-2-1/ [2] https://camel.apache.org/camel-k/next/installation/advanced/build-config.html#publish-strategy

lsergio commented 9 months ago

@squakez I checked the container and the artifacts are there. However, to be able to see them, I had to edit the generated deployment and change the securityContext from:

securityContext: {}

to

securityContext:
  runAsUser: 0

And the list of files shows me:

./dependencies/app:
total 4
-rw-r--r-- 1 root root 2658 Dec  1 16:48 camel-k-integration-2.1.0.jar

./dependencies/lib:
total 24
drwxr-sr-x 2 root root  4096 Dec  1 16:48 boot
drwxr-sr-x 2 root root 16384 Dec  1 16:48 main

./dependencies/lib/boot:
total 1708
-rw-r--r-- 1 root root   9341 Dec  1 16:48 io.github.crac.org-crac-0.1.3.jar
-rw-r--r-- 1 root root  43387 Dec  1 16:48 io.quarkus.quarkus-bootstrap-runner-3.2.6.Final.jar
-rw-r--r-- 1 root root  45294 Dec  1 16:48 io.quarkus.quarkus-development-mode-spi-3.2.6.Final.jar

(the list was truncated, as it was too long)

And after this change the integration also starts successfully.

squakez commented 9 months ago

What Kubernetes version/distribution are you using?

lsergio commented 9 months ago

I'm running on Kubernetes 1.25 on EKS: v1.25.15-eks-4f4795d, more precisely

claudio4j commented 9 months ago

Create an Integration. In my case I used one like this:

Are you creating the Integration CR yourself or using kamel run <integration> ?

lsergio commented 9 months ago

I'm running kubectl apply -f test.yamlwhere test.yaml is:

apiVersion: camel.apache.org/v1
kind: Integration
metadata:
  name: test
spec:
  sources:
  - name: main.groovy
    content: |-
      rest("/test-mode")
          .post()
          .to("direct:start")

      from("direct:start").to("log:info")
squakez commented 9 months ago

I think the problem is the fact that Kaniko (and Buildah) needs root privileges in order to work. When it creates the container, since it is with root privileges, then, the artifact has root visibility only. By default, the securityContext will run with the USER 1000 privileges, reason why it cannot find that artifact. The only way to have this running is, as you did, run with a privileged root.

We have deprecated Kaniko and Buildah also for this reason in version 2.1.0, so, the suggestion from us is to move to a supported (and more secure) publishing strategy [1].

[1] https://camel.apache.org/camel-k/next/installation/advanced/build-config.html#publish-strategy

lsergio commented 9 months ago

Thanks. I'll have a look at the other publish strategies.