quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.35k stars 2.55k forks source link

Unable to publish app to OpenShift: `field is immutable` #39989

Open gsmet opened 2 months ago

gsmet commented 2 months ago

I tried to publish the Quarkus GitHub Bot (updated to Quarkus 3.9.2) to our OpenShift cluster and I ended up with the following error:

[ERROR]     [error]: Build step io.quarkus.kubernetes.deployment.KubernetesDeployer#deploy threw an exception: io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: PUT at: https://host-name/apis/apps/v1/namespaces/prod-quarkus-bot/deployments/quarkus-bot. Message: Deployment.apps "quarkus-bot" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/name":"quarkus-bot", "app.kubernetes.io/version":"2fc6454"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable. Received status: Status(apiVersion=v1, code=422, details=StatusDetails(causes=[StatusCause(field=spec.selector, message=Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/name":"quarkus-bot", "app.kubernetes.io/version":"2fc6454"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable, reason=FieldValueInvalid, additionalProperties={})], group=apps, kind=Deployment, name=quarkus-bot, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=Deployment.apps "quarkus-bot" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/name":"quarkus-bot", "app.kubernetes.io/version":"2fc6454"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Invalid, status=Failure, additionalProperties={}).
[ERROR]     at io.fabric8.kubernetes.client.KubernetesClientException.copyAsCause(KubernetesClientException.java:238)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.waitForResult(OperationSupport.java:507)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.handleResponse(OperationSupport.java:524)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.handleUpdate(OperationSupport.java:358)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.handleUpdate(BaseOperation.java:758)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation.lambda$handleReplace$0(HasMetadataOperation.java:185)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation.handleReplace(HasMetadataOperation.java:190)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation.replace(HasMetadataOperation.java:101)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperation.replace(HasMetadataOperation.java:45)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.replace(BaseOperation.java:1118)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.replace(BaseOperation.java:97)
[ERROR]     at io.fabric8.kubernetes.client.utils.internal.CreateOrReplaceHelper.replace(CreateOrReplaceHelper.java:74)
[ERROR]     at io.fabric8.kubernetes.client.utils.internal.CreateOrReplaceHelper.createOrReplace(CreateOrReplaceHelper.java:66)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.createOrReplace(BaseOperation.java:313)
[ERROR]     at io.fabric8.kubernetes.client.dsl.internal.BaseOperation.createOrReplace(BaseOperation.java:97)
[ERROR]     at io.fabric8.kubernetes.client.extension.ResourceAdapter.createOrReplace(ResourceAdapter.java:125)
[ERROR]     at io.quarkus.kubernetes.deployment.KubernetesDeployer.deployResource(KubernetesDeployer.java:258)
[ERROR]     at io.quarkus.kubernetes.deployment.KubernetesDeployer.lambda$deploy$4(KubernetesDeployer.java:216)
[ERROR]     at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
[ERROR]     at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
[ERROR]     at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
[ERROR]     at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
[ERROR]     at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
[ERROR]     at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
[ERROR]     at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
[ERROR]     at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[ERROR]     at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
[ERROR]     at io.quarkus.kubernetes.deployment.KubernetesDeployer.deploy(KubernetesDeployer.java:215)
[ERROR]     at io.quarkus.kubernetes.deployment.KubernetesDeployer.deploy(KubernetesDeployer.java:143)
[ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[ERROR]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]     at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[ERROR]     at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
[ERROR]     at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
[ERROR]     at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
[ERROR]     at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
[ERROR]     at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
[ERROR]     at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
[ERROR]     at java.base/java.lang.Thread.run(Thread.java:840)
[ERROR]     at org.jboss.threads.JBossThread.run(JBossThread.java:483)

The deployment fails and the application is not deployed.

App is here: https://github.com/quarkusio/quarkus-github-bot There is some OpenShift config in src/main/resources/application.properties. Removing the label in there didn't help.

I tried to downgrade to 3.8.3 but same behavior.

gsmet commented 2 months ago

And the good news is that it put the app in a weird state and it is not reachable anymore :/

gsmet commented 2 months ago

I was able to fix things by dropping the Deployment entirely and deploying my app again.

gsmet commented 2 months ago

FTR, I switched from DeploymentConfig to Deployment the last time I deployed and it was my first deployment since this switch.

gsmet commented 2 months ago

We discussed with Ioannis on Zulip and the plan is the following:

maxandersen commented 2 months ago

related to https://github.com/quarkusio/quarkus/pull/39228