#java #kubernetes #quarkus
Вопрос:
Когда я запускаю тесты для своего оператора K8S с помощью оператора quarkus, я получаю следующую трассировку стека:
2021-10-29 18:14:08,668 WARN [io.qua.ope.dep.OperatorSDKProcessor] (build-33) Use of deprecated check-crd-and-validate-local-model property. Use crd.validate instead. java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors [error]: Build step io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor#createConfigurationServiceAndOperator threw an exception: java.lang.NoSuchFieldError: _visitables at io.sundr.model.ClassRefFluentImpl.withArguments(ClassRefFluentImpl.java:318) at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:114) at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:76) at io.sundr.adapter.reflect.TypeToTypeRef.apply(TypeToTypeRef.java:41) at io.sundr.adapter.reflect.ClassToTypeDef.apply(ClassToTypeDef.java:92) at io.sundr.adapter.reflect.ClassToTypeDef.apply(ClassToTypeDef.java:55) at io.sundr.adapter.api.Adapter.adaptType(Adapter.java:38) at io.sundr.adapter.api.Adapters.lambda$adaptType$0(Adapters.java:35) at java.base/java.util.Optional.map(Optional.java:265) at io.sundr.adapter.api.Adapters.adaptType(Adapters.java:35) at io.fabric8.crd.generator.utils.Types.typeDefFrom(Types.java:53) at io.fabric8.crd.generator.CustomResourceInfo.fromClass(CustomResourceInfo.java:137) at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.createControllerConfiguration(OperatorSDKProcessor.java:281) at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.lambda$createConfigurationServiceAndOperator$0(OperatorSDKProcessor.java:133) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1603) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at io.quarkiverse.operatorsdk.deployment.OperatorSDKProcessor.createConfigurationServiceAndOperator(OperatorSDKProcessor.java:137) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:820) at io.quarkus.builder.BuildContext.run(BuildContext.java:277) at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478) at java.base/java.lang.Thread.run(Thread.java:829) at org.jboss.threads.JBossThread.run(JBossThread.java:501) ...
Я действительно не знаю, где искать решение этой проблемы.
Когда я запускаю оператор как автономный, он работает нормально, проблема возникает только при выполнении тестов.
Комментарии:
1. Репост «ответа» @Christophe Лапруна в качестве комментария: Какую версию расширения вы используете? Можете ли вы опубликовать результат запуска расширения, где он выводит версию расширения / версию fabric8 / версию sdk оператора, пожалуйста?
2. Это больше похоже на ошибку, чем на вопрос — не могли бы вы, пожалуйста, открыть проблему?
3. Версия sdk оператора quarkus: 1.9.4, kubernetes-клиент: 5.3.0 Я не на работе, поэтому у меня нет полного журнала, я отредактирую свой пост во вторник @MaxRydahlAndersen: конечно, я сделаю это и во вторник на github, когда смогу опубликовать полную информацию. У меня также есть другое исключение NoSuchFieldException, но с TYPEDEF вместо переменных. Просто интересно, может ли это быть из-за структуры моего проекта: у меня есть 3 оператора, каждый в разных проектах, и у меня есть зависимости между 2 из них (не циркуляры), хотя я не понимаю, почему это повлияет только на тесты
Ответ №1:
Похоже, вы используете слишком старую версию клиента fabric8. Вы используете fabric8 5.3.0, в то время как quarkus-operator-sdk версии 1.9.4 использует fabric8 5.4.0. Использование той же версии клиента fabric8 должно решить вашу проблему.
Комментарии:
1. Я обновил обе свои версии, но проблема была не в этом, проблема заключалась в том, что в моей среде IDE я использовал неправильную версию maven (в комплекте с версией v3.6.3 вместо той, которую я использую в версии v3.8.1)
Ответ №2:
Проблема возникла из-за моей версии maven: я использовал mvn в комплекте с моей IDE в версии v3.6.3 вместо того, который я использую во всей системе v3.8.1.
Очень странно то, что у меня была та же ошибка при запуске mvn clean install
с терминала (поэтому я использовал версию v3.8.1)
Во всяком случае, сейчас это работает.
Комментарии:
1. Наконец, я понял настоящую причину сбоя, и это был макет сервера kubernetes из fabric8 в версии 4.10.3, который вызвал проблему.