Unable to add connector to the UI in Kubernetes deployment: Get Spec Job Failed

Based on discussions in the Slack community, many others are having similar issues.

I’m running AirByte on Kubernetes if it matters. If you need logs, let me know which ones.

Docker repository name: http://us-central1-docker.pkg.dev/genuine-flight-317411/devel/natan_orbit_love_airbyte_test

Tag: v1

Did you check Airbyte docs about using custom connectors? Using custom connectors | Airbyte Documentation

Yes I followed the instructions there and got this error message

If you run the spec command locally it works? Another way is open the dev tools → network tab and see the call to the API requesting to create the connector and see the response error.

Here is the exception:

{"message":"Internal Server Error: Get Spec job failed.",
"exceptionClassName":"java.lang.IllegalStateException","exceptionStack":
["java.lang.IllegalStateException: Get Spec job failed.",
"\tat com.google.common.base.Preconditions.checkState(Preconditions.java:502)",
"\tat io.airbyte.server.converters.SpecFetcher.getSpecFromJob(SpecFetcher.java:14)",
"\tat io.airbyte.server.handlers.SourceDefinitionsHandler.getSpecForImage(SourceDefinitionsHandler.java:283)",
"\tat io.airbyte.server.handlers.SourceDefinitionsHandler.sourceDefinitionFromCreate(SourceDefinitionsHandler.java:192)",
"\tat io.airbyte.server.handlers.SourceDefinitionsHandler.createPrivateSourceDefinition(SourceDefinitionsHandler.java:172)",
"\tat io.airbyte.server.apis.ConfigurationApi.lambda$createSourceDefinition$12(ConfigurationApi.java:354)",
"\tat io.airbyte.server.apis.ConfigurationApi.execute(ConfigurationApi.java:871)",
"\tat io.airbyte.server.apis.ConfigurationApi.createSourceDefinition(ConfigurationApi.java:354)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)",
"\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)",
"\tat org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)","
\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)",
"\tat org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219)","\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)",
"\tat org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:292)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:274)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:244)",
"\tat org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)",
"\tat org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)",
"\tat org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)",
"\tat org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)","\tat org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)","\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)","\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)","\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)","\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)","\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)","\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)","\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1377)","\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)","\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)","\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)","\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)","\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)","\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)","\tat org.eclipse.jetty.server.Server.handle(Server.java:501)","\tat org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)","\tat org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)","\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)","\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)","\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)","\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)","\tat org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)","\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)","\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)","\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)","\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)","\tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)","\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)","\tat org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)","\tat java.base/java.lang.Thread.run(Thread.java:833)"],"rootCauseExceptionClassName":null,"rootCauseExceptionStack":[]}

Any idea what the problem is?

(Also replying in the github thread tracking this issue - not sure what the correct place is.)

I was able to use your connector.
Did you pull the container to your Airbyte server? Unfortunately for external images you need to pull from the external registry first.

No, it doesn’t say anywhere in the docs that you need to pull it first so I had no idea.

How would I do so on Kubernetes? Do I need to pull it on each node in the cluster first? Just on the node that contains the airbyte-server pod?

Note that I’m using Kubernetes because I’m on an M1 Macbook and airbyte doesn’t support that. So I don’t have the option of using the Docker setup.

Alright, I was able to get this working by replacing the “_” characters in the image name with “-”.

The “_” characters prevent the container from being created on Kubernetes due to the way Airbyte generates the Kubernetes resource.

Opened a PR to reflect this in the docs - see Update docs to reflect Kubernetes edge cases by aantn · Pull Request #12125 · airbytehq/airbyte · GitHub

1 Like

@marcosmarxm Thank you for the assistance

Thank you for solving the solution @aantn !!!