guifesquet
03/04/2026, 12:48 PMkapa.ai
03/04/2026, 12:49 PMairbyte-config-secrets secret, and they’re missing in your cluster.
From the error:
> couldn't find key DATABASE_USER in Secret airbyte-abctl/airbyte-config-secrets
you need to ensure that the secret in the airbyte-abctl namespace contains the expected database keys.
For 2.x, the recommended pattern is:
1. Create/update the airbyte-config-secrets secret in the same namespace where you’re deploying (here: airbyte-abctl):
apiVersion: v1
kind: Secret
metadata:
name: airbyte-config-secrets
namespace: airbyte-abctl
type: Opaque
stringData:
# Database Secrets
database-host: <your-db-host>
database-port: "5432"
database-name: <your-db-name>
database-user: <your-db-user>
database-password: <your-db-password>
You can also create it via kubectl create secret generic airbyte-config-secrets ... --namespace airbyte-abctl. [K8s secret]
2. In your values.yaml, configure the external database to read from that secret (Helm v2 style):
postgresql:
enabled: false
global:
database:
type: external
secretName: airbyte-config-secrets
host: "<your-db-host>"
port: "5432"
name: "<your-db-name>"
userSecretKey: "database-user"
passwordSecretKey: "database-password"
[External DB 2.0]
3. Re‑apply the secret (if changed) and then re‑run abctl / Helm so the bootloader pod is recreated.
If after this you still see DATABASE_USER missing, double‑check:
• The namespace of the secret matches the namespace in the error (airbyte-abctl).
• The secret name is exactly airbyte-config-secrets (or, if you changed it, that global.database.secretName matches).
• The keys are spelled exactly as expected (database-user, database-password, etc.). [External DB] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:19 PMkapa.ai
03/04/2026, 1:19 PMpre-upgrade hooks failed: * pod airbyte-abctl-bootloader failed) is a generic symptom: it only tells us the bootloader pod failed, not why. The Airbyte docs explicitly say that the root cause is usually that the bootloader cannot connect to airbyte-db or is missing required config, and that you must inspect the bootloader pod logs to see the real error. [Troubleshoot abctl]
From the docs:
> The airbyte-bootloader is the first to start during the installation. Version >0.15.0 of abctl prints the service logs to make simpler to understand what is causing the issue. Failures reasons are generally related to problem of airbyte-bootloader not able to connect to the airbyte-db service. [Troubleshoot abctl]
Given you just fixed a missing secret key (DATABASE_USER), it’s very likely the bootloader is now failing on a different missing key or DB connectivity.
Please do this and paste the result:
1. Get the bootloader pod name (if you don’t already have it):
kubectl get pods -n airbyte-abctl | grep bootloader
2. Show its logs:
kubectl logs -n airbyte-abctl <bootloader-pod-name>
abctl v0.15.0+ should also print these logs automatically during install; look for lines like:
DEBUG looking at airbyte-abctl-airbyte-bootloader
Failed()
DEBUG found logs: ...
Those log lines (the text after found logs:) will contain the real error (for example, another missing secret key like DATABASE_PASSWORD, or a DB connection error), similar to what’s shown in several GitHub issues where the same pre-upgrade hooks failed message appears. [Issue 54199; Troubleshoot abctl]
Once you share that bootloader log snippet, we can pinpoint the exact next fix. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:21 PMkapa.ai
03/04/2026, 1:21 PMvalues.yaml is still using Helm chart V1 keys for the external DB, but you’re deploying with chart V2 / 2.0.0.
In V2:
1. The DB name key changed from database → name.
2. The recommended pattern is to use either `user`/`password` or `userSecretKey`/`passwordSecretKey`, not a mix.
3. The old externalDatabase: block is no longer used; configuration is done via global.database only. [External DB 2.0; Upgrade values.yaml]
For Helm chart V2 / 2.0.0, your values.yaml should look like this (for external Postgres):
postgresql:
enabled: false
global:
database:
type: external
# Secret with DB credentials
secretName: "airbyte-config-secrets"
# External Postgres connection
host: "{{ airbyte_database_host|lower }}"
port: "{{ airbyte_database_port }}"
name: "{{ airbyte_database }}" # <-- was `database` in V1
# Use EITHER user or userSecretKey, not both
user: "{{ airbyte_database_user }}"
# userSecretKey: "database-user"
# Use EITHER password or passwordSecretKey, not both
# password: "<plain-password-if-you-want-it-here>"
passwordSecretKey: "database-password"
And you can remove the whole externalDatabase: section; it’s a V1 construct and not needed in V2. [External DB 2.0; Upgrade values.yaml]
Also ensure your secret matches this:
apiVersion: v1
kind: Secret
metadata:
name: airbyte-config-secrets
namespace: airbyte-abctl
type: Opaque
stringData:
database-password: "<your-db-password>"
# (optional if you use userSecretKey)
database-user: "<your-db-user>"
After updating:
1. Apply/update the secret.
2. Re-run abctl local install --values values.yaml (or your Helm install).
3. If it still fails, grab the bootloader pod logs again; but with the corrected global.database block and no externalDatabase: section, it should pass the pre-upgrade hook. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:25 PMkapa.ai
03/04/2026, 1:25 PMhelm repo add airbyte https://airbytehq.github.io/helm-charts
helm install airbyte airbyte/airbyte ...
◦ V2 uses the new /charts repo and airbyte-v2/airbyte chart:
helm repo add airbyte-v2 https://airbytehq.github.io/charts
helm search repo airbyte-v2 --versions
helm install airbyte airbyte-v2/airbyte ...
[Chart v2 community; Install 2.0]
If your helm install/upgrade command uses airbyte-v2/airbyte, you’re on *Helm chart V2*; if it uses airbyte/airbyte from the old repo, you’re on V1.
2. Check existing release
Run:
helm list -n <NAMESPACE>
Then inspect the chart for that release:
helm get all airbyte -n <NAMESPACE> | grep 'chart='
◦ If it shows airbyte-v2/airbyte-2.x.x, that’s V2.
◦ If it shows `airbyte-`version from repo airbyte, that’s V1. [Upgrading Airbyte]
3. abctl hint
abctl 0.30.0+ uses Helm chart V2 by default for Core. If you installed with a recent abctl and didn’t override the chart, you’re likely on V2. [Chart v2 community]
If you paste your exact helm install / abctl command or helm list output, I can tell you definitively which one you’re using. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:30 PMkapa.ai
03/04/2026, 1:31 PMkind itself; it’s a known issue when upgrading an existing `abctl`/Helm deployment where the Deployment label selectors changed, and Kubernetes does not allow changing spec.selector on an existing Deployment (it’s immutable). The exact error you see matches an open GitHub issue. [Helm abctl issue]
Because the chart is trying to patch existing Deployments (airbyte-abctl-connector-builder-server, airbyte-abctl-cron, etc.), the upgrade fails.
The knowledge sources do not provide an official step‑by‑step fix for this specific selector‑immutability problem. They only state:
• abctl 0.30.0+ uses Helm chart V2 by default. [Chart v2 upgrade]
• For Helm chart V2, the recommended path is a fresh install in a new namespace when possible, to avoid exactly these kinds of upgrade edge cases. [How to upgrade]
Given that, the documented and supported workaround is:
1. Prefer a fresh install in a new namespace (recommended in the docs for V2):
◦ Create a new namespace, e.g.:
kubectl create namespace airbyte-v2
◦ Configure your external DB and secrets as you already did.
◦ Install Airbyte into this new namespace using the V2 chart / abctl. [How to upgrade]
2. If you must stay in the same namespace, the docs do not describe a supported way to mutate those existing Deployments’ selectors in place. Because spec.selector is immutable, Helm cannot patch them, which is exactly what your error shows. [Helm abctl issue]
So, based on the available information:
• This is a known upgrade problem with abctl + Helm chart changes.
• The documented, supported path is to:
◦ Use an external DB (which you already do),
◦ Then perform a fresh Helm V2 / abctl install in a new namespace, and point it at the same external DB and storage. [Chart v2 upgrade]
The knowledge sources do not contain more granular remediation steps (like specific kubectl commands to delete or recreate those Deployments), so I can’t provide an official in‑place fix beyond recommending the fresh‑namespace approach. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:33 PMkapa.ai
03/04/2026, 1:33 PMguifesquet
03/04/2026, 1:34 PMkapa.ai
03/04/2026, 1:34 PMhelm repo add airbyte https://airbytehq.github.io/helm-charts
helm repo update
Then install/upgrade using the V1 chart:
helm install airbyte airbyte/airbyte \
--namespace airbyte \
--values ./values.yaml \
--version <V1_HELM_CHART_VERSION>
or, for upgrade:
helm upgrade --install airbyte airbyte/airbyte \
--namespace airbyte \
--values ./values.yaml \
--version <V1_HELM_CHART_VERSION>
[Add V1 repo; Upgrade with V1]
2. Avoid the V2 repo/chart
Do not use:
helm repo add airbyte-v2 https://airbytehq.github.io/charts
helm install airbyte airbyte-v2/airbyte ...
Those commands explicitly select Helm chart V2. [Add V2 repo]
3. Stay on an Airbyte version that still supports V1
Airbyte *2.0 is the final version that supports Helm chart V1*; 2.1+ require V2. So if you want to keep using V1, you must stay on ≤ 2.0 and pick a matching V1 chart version from the airbyte/airbyte repo. [Final V1 support]
If you share your current helm list -n namespace output, I can suggest an exact --version value for the V1 chart. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:35 PMkapa.ai
03/04/2026, 1:36 PMabctl you can force Helm chart V1 by pinning the chart version via --chart-version.
From the maintainer’s comment:
> abctl versions 0.30.0 and later support deploying Airbyte version 1.8+ using helm chart v2. However, you should still be fine to deploy with chart V1. Use the --chart-version flag to specify the chart you want to use.
> For example:
> abctl local install --chart-version 1.9.1 for Airbyte 2.0. [abctl chart flag]
So, to force V1 with `abctl`:
abctl local uninstall # optional, if you want a clean reinstall
abctl local install --chart-version 1.9.1 --values values.yaml
(or another specific V1 chart version you want to stay on).
Key points:
• abctl is just wrapping Helm; --chart-version tells it exactly which Helm chart (V1) to use. [abctl reference]
• Airbyte 2.0 is the last Airbyte version that supports Helm chart V1. [Final V1 support]
If you share the Airbyte version you’re targeting, you can pick a matching V1 chart version and pass it via --chart-version. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:38 PMabctl local install --chart-version 2.0.0 and helm v2 is used, how to force v1kapa.ai
03/04/2026, 1:38 PM--chart-version 2.0.0 is a V2 Helm chart version, so abctl is correctly using Helm chart V2 in that case. To force Helm chart V1 with abctl, you must pass a V1 chart version to --chart-version.
From the maintainer’s guidance:
> abctl versions 0.30.0 and later support deploying Airbyte version 1.8+ using helm chart v2. However, you should still be fine to deploy with chart V1. Use the --chart-version flag to specify the chart you want to use.
> For example, abctl local install --chart-version 1.9.1 for Airbyte 2.0. [Issue 68136]
So, to force V1, use a 1.x.y chart version, e.g.:
# Example: force Helm chart V1 for Airbyte 2.0
abctl local install --chart-version 1.9.1
Any 1.* chart version is from the V1 repo; 2.* chart versions are V2. The knowledge sources don’t list all valid V1 versions, but they explicitly show 1.9.1 as a V1 chart version usable for Airbyte 2.0. [Issue 68136] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 1:48 PMkapa.ai
03/04/2026, 1:48 PMService ... is invalid: spec.ports[1].name: Duplicate value: "http"
• failed to create patch: The order in patch list ... doesn't match $setElementOrder list [Patch order error; Issue 60918]
In your log, you can see the duplicates clearly:
• POSTGRES_SEEDS appears twice (literal value + valueFrom).
• DB_PORT appears twice.
• POSTGRES_USER appears twice.
• POSTGRES_PWD appears twice.
• SQL_TLS_ENABLED appears twice with conflicting values (false and true).
This is the same pattern as the open GitHub issue where abctl local install fails because the generated patch’s env var list doesn’t match the expected $setElementOrder list. [Issue 60918]
Unfortunately, the provided docs and issues:
• Acknowledge the bug (failed to create patch: The order in patch list) and mark it as “Status: Fixing”. [Patch order error]
• Do not document a reliable workaround for when you hit it during `abctl local install`/upgrade, beyond indicating it happens when re‑running installs with different modes or configurations (e.g. low‑resource mode, env changes). [Patch order error; Issue 60918]
Given that limitation, the only actions that are clearly supported in the knowledge sources are:
1. Avoid repeated, conflicting installs in the same local cluster/namespace.
The docs note this error can occur when you install with one set of options and then re‑run abctl local install with different options (e.g. --low-resource-mode), which leads to incompatible patches. [Patch order error]
2. Start from a clean local environment (new kind cluster / namespace) and reinstall.
While not spelled out step‑by‑step for this exact error, the troubleshooting guidance for similar Helm/patch issues with abctl implies that a fresh install (no existing Airbyte resources to patch) avoids the patch‑order and immutability problems. [Patch order error; Issue 60918]
Because the sources do not provide a documented way to “fix” the duplicate env vars / port names inside the generated patch or to safely mutate those existing resources in place, I can’t give you an official in‑place remediation. Based on the docs and issues we have:
• This is a known abctl + Helm patch bug.
• The supported path to get past it is to:
◦ Tear down the existing local deployment (or create a new kind cluster / namespace), and
◦ Re‑run abctl local install with your desired chart version and values, so Helm does a clean install instead of trying to patch existing Services/Deployments. [Patch order error; Issue 60918]
If you need to keep the current cluster, the knowledge sources don’t describe a safe, supported sequence of kubectl operations to resolve this, so I can’t recommend one based on the available documentation. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 2:43 PMkapa.ai
03/04/2026, 2:43 PMguifesquet
03/04/2026, 3:16 PMkapa.ai
03/04/2026, 3:16 PMworkload-launcher is up but failing on:
> ERROR ... AccessTokenInterceptor(intercept):120 - Failed to obtain or add access token
This is a known class of issues in 2.x where components cannot get a token for the workload API / data plane, often due to missing or misconfigured auth secrets or env vars. [Dataplane token 500; Workload auth 401; Queued/workload never claimed]
However, the knowledge sources do not provide a complete, 2.0.19‑specific, abctl‑based fix for this exact AccessTokenInterceptor error. They only show related patterns:
• For older 1.x “Failed to obtain or add dataplane access token”, some users deleted dataplane_* DB rows or removed airbyte-auth-secrets, but that’s not documented as a 2.0 solution. [Dataplane token 500]
• For workload API auth, users had to ensure:
◦ API_AUTHORIZATION_ENABLED=true in the airbyte-airbyte-env ConfigMap.
◦ Matching WORKLOAD_API_AUTH_HEADER and WORKLOAD_API_BEARER_TOKEN on the workload API server and worker. [Workload auth 401; HTTP 502 connectors; Local abctl bearer token; HTTP 500 workaround note]
Given that, the only concrete, source‑backed steps I can suggest are:
1. Check if this is workload API auth related
Look at the workload-launcher logs a bit further down for an HTTP status (401/500) or messages about “workload API” or “data-plane”. The issues above show that AccessTokenInterceptor failures often wrap a 401/500 from the internal API. [Queued/workload never claimed]
2. Verify workload API auth env vars (if applicable)
For Kubernetes/abctl deployments, users who hit 401/502 errors on connector setup had to align these env vars across components:
◦ WORKLOAD_API_AUTH_HEADER
◦ WORKLOAD_API_BEARER_TOKEN
For example, in abctl local installs, they manually set the same token on worker and workload API server and restarted them. [HTTP 502 connectors; Local abctl bearer token]
You can inspect what workload-launcher has:
kubectl -n airbyte-abctl get deployment airbyte-workload-launcher -o json \
| jq -r '.spec.template.spec.containers[0].env[] | select(.name | contains("WORKLOAD"))'
If WORKLOAD_API_BEARER_TOKEN is missing or doesn’t match the workload API server, that could explain token failures, but the sources don’t show a 2.0.19‑specific fix path for workload-launcher itself.
3. Acknowledge limitation
The knowledge sources do not explicitly document how workload-launcher in 2.0.19 is supposed to obtain its access token (e.g., which secret or endpoint), nor a step‑by‑step remediation for this exact AccessTokenInterceptor error in 2.0.19. Because of that, I can’t confidently give you a precise fix beyond checking workload API auth configuration as above.
If you can share the full stack trace after Failed to obtain or add access token (especially any Caused by: ... HTTP 401/500 lines), I can try to match it more closely to one of the documented issues, but right now the sources don’t contain enough detail to give a definitive resolution. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 4:40 PMabctl local install --host HOST \
--insecure-cookies --no-browser \
--chart-version 2.0.19 \
--secret /secret.yaml \
--values /values.yaml \
--docker-username USERNAME --docker-password PASSWORD
my values.yaml
global:
# logging:
# level: INFO
auth:
cookieSecureSetting: "false"
database:
type: external
host: "{{ airbyte_database_host|lower }}"
port: "{{ airbyte_database_port }}"
database: "{{ airbyte_database }}"
user: "{{ airbyte_database_user }}"
secretName: "airbyte-config-secrets"
passwordSecretKey: "database-password"
worker:
maxNotifyWorkers: 1
postgresql:
enabled: false
temporal:
externalSSL: false
extraEnv:
- name: SKIP_DB_CREATE
value: "true"
- name: POSTGRES_SEEDS
value: "{{ airbyte_database_host|lower }}"
- name: DB_PORT
value: "{{ airbyte_database_port }}"
- name: POSTGRES_USER
value: "userairbyte"
- name: POSTGRES_PWD
value: "userairbyte"
- name: POSTGRES_TLS_ENABLED
value: "false"
- name: POSTGRES_TLS_DISABLE_HOST_VERIFICATION
value: "true"
- name: SQL_TLS_ENABLED
value: "false"
- name: SQL_TLS_DISABLE_HOST_VERIFICATION
value: "true"
WARNING Encountered an issue deploying Airbyte:
Pod: airbyte-abctl-server-67c74667bc-vlqr9.1899b082f26ca7c6
Reason: Unhealthy
Message: Readiness probe failed: Get "http://10.244.0.12:8001/api/v1/health": dial tcp 10.244.0.128001 connect: connection refused
Count: 6kapa.ai
03/04/2026, 4:40 PMserver readiness probe failing with connection refused, but they do show that:
• abctl will report exactly this kind of message when the airbyte-abctl-server pod is not becoming ready. [Issue 50430]
• The generic guidance is: when abctl says “Deployment is not ready” or a pod is Unhealthy, you must inspect that pod’s logs to see the real cause. [Troubleshoot abctl]
Given your command and values.yaml, there are two likely problem areas:
1. External DB config for chart V2
For Helm chart V2, the external DB block should use name: (not database:) for the DB name. The docs show both V1 and V2 syntaxes; for V2 it’s:
postgresql:
enabled: false
global:
database:
type: external
secretName: "airbyte-config-secrets"
host: "<your-db-host>"
port: "<your-db-port>"
name: "<your-db-name>" # <-- V2 key
userSecretKey: "database-user"
passwordSecretKey: "database-password"
[External DB 2.0]
Your values.yaml uses database: and user: directly under global.database, which matches the V1 example, not the V2 one. [External DB (V1 vs V2); External DB 2.0]
That mismatch can cause the server to fail on startup (e.g., can’t read DB config), which then surfaces only as a readiness probe connection refused.
Action (based on docs):
Adjust your DB block to the V2 form, for example:
postgresql:
enabled: false
global:
auth:
cookieSecureSetting: "false"
database:
type: external
secretName: "airbyte-config-secrets"
host: "{{ airbyte_database_host|lower }}"
port: "{{ airbyte_database_port }}"
name: "{{ airbyte_database }}" # was `database`
userSecretKey: "database-user" # use secret key instead of inline user
passwordSecretKey: "database-password"
And ensure your airbyte-config-secrets secret has at least:
stringData:
database-user: <user>
database-password: <password>
[External DB 2.0]
2. Temporal extra env duplication
Your temporal.extraEnv block hard‑codes POSTGRES_* and SQL_TLS_* values. The docs don’t show this pattern for external DB with chart V2; instead, they rely on the global.database config and secrets. [External DB 2.0]
In earlier errors you saw, duplicated/contradictory env vars caused Helm patch failures. [Patch order error] While your current error is at the server readiness level, it’s safer (per docs) to avoid overriding core DB env vars unless you have a specific, documented need.
Action (conservative, doc‑aligned):
Temporarily remove the temporal.extraEnv overrides and rely on the default chart behavior with global.database configured.
-------------------------
Because the readiness probe error is generic, the docs say the next step is to inspect the server pod logs to see the real cause. [Troubleshoot abctl]
After updating values.yaml as above, re‑run:
abctl local uninstall
abctl local install --host HOST \
--insecure-cookies --no-browser \
--chart-version 2.0.19 \
--secret /secret.yaml \
--values /values.yaml \
--docker-username USERNAME --docker-password PASSWORD
If it still fails, get the server logs:
kubectl -n airbyte-abctl logs deploy/airbyte-abctl-server
and look for explicit DB or config errors. The knowledge sources don’t include those logs for 2.0.19, so I can’t be more specific without seeing them, but aligning your global.database block with the documented V2 syntax is the main concrete correction the docs support. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 4:45 PMkapa.ai
03/04/2026, 4:46 PMtemporal.extraEnv if Temporal can’t connect without it. The remaining problem is that the server pod is still failing its readiness probe (connection refused), which is generic. The docs say that in this situation you must look at the server logs to see the real cause. [Troubleshoot abctl]
At this point, the knowledge sources don’t contain enough information to say exactly why your airbyte-abctl-server is refusing connections after fixing global.database.name. The next step is:
1. Get the server logs:
kubectl -n airbyte-abctl logs deploy/airbyte-abctl-server
(or the specific pod if needed):
kubectl -n airbyte-abctl get pods | grep server
kubectl -n airbyte-abctl logs <server-pod-name>
2. Look for (and ideally paste here) any stack traces or clear errors, especially around:
◦ Database connection (Hikari / Postgres)
◦ Config loading / secrets
◦ Workload API / auth
Without those logs, the docs only give general guidance (inspect bootloader/server logs; most failures are DB or config related) and don’t document a specific 2.0.19 failure mode that matches “server readiness probe connection refused” after fixing global.database.name. [Troubleshoot abctl]
If you can share the relevant error lines from airbyte-abctl-server logs, I can try to match them to the documented patterns; otherwise I can’t confidently say more based on the current knowledge sources. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.guifesquet
03/04/2026, 4:50 PM2026-03-04 16:44:25,381 [main] INFO i.t.s.WorkflowServiceStubsImpl(<init>):86 - Created WorkflowServiceStubs for channel: ManagedChannelOrphanWrapper{delegate=ManagedChannelImpl{logId=1, target=airbyte-abctl-temporal:7233}}
2026-03-04 16:44:25,879 [main] WARN i.a.c.t.TemporalUtils(getTemporalClientWhenConnected):184 - Ignoring exception while trying to request Temporal namespace:
io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:351)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:332)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:174)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.getSystemInfo(WorkflowServiceGrpc.java:6065)
at io.temporal.serviceclient.SystemInfoInterceptor.getServerCapabilitiesOrThrow(SystemInfoInterceptor.java:132)
at io.temporal.serviceclient.SystemInfoInterceptor$1.start(SystemInfoInterceptor.java:86)
at io.grpc.stub.ClientCalls.startCall(ClientCalls.java:418)
at io.grpc.stub.ClientCalls.asyncUnaryRequestCall(ClientCalls.java:394)
at io.grpc.stub.ClientCalls.futureUnaryCall(ClientCalls.java:307)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:163)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.describeNamespace(WorkflowServiceGrpc.java:5531)
at io.airbyte.commons.temporal.TemporalUtils.getNamespaceInfo(TemporalUtils.kt:202)
at io.airbyte.commons.temporal.TemporalUtils.getTemporalClientWhenConnected(TemporalUtils.kt:180)
at io.airbyte.commons.temporal.TemporalUtils.createTemporalService(TemporalUtils.kt:77)
at io.airbyte.commons.temporal.TemporalUtils.createTemporalService(TemporalUtils.kt:103)
at io.airbyte.commons.temporal.config.TemporalBeanFactory.temporalService(TemporalBeanFactory.kt:30)
at io.airbyte.commons.temporal.config.$TemporalBeanFactory$TemporalService0$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.commons.temporal.config.$TemporalBeanFactory$WorkflowClient2$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.commons.temporal.config.$TemporalBeanFactory$WorkflowClientWrapped3$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.commons.temporal.$TemporalClient$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.server.config.$TemporalBeanFactory$SynchronousSchedulerClient0$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.commons.server.handlers.helpers.$ActorDefinitionHandlerHelper$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.commons.server.handlers.$SourceDefinitionsHandler$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:3000)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2762)
at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1781)
at io.micronaut.context.AbstractBeanResolutionContext.getBean(AbstractBeanResolutionContext.java:210)
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2130)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1360)
at io.airbyte.server.apis.controllers.$SourceDefinitionApiController$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2337)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3150)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.intializeEagerBean(DefaultBeanContext.java:3039)
at io.micronaut.context.DefaultBeanContext.initializeEagerBean(DefaultBeanContext.java:2708)
at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:2034)
at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:323)
at io.micronaut.context.DefaultBeanContext.configureAndStartContext(DefaultBeanContext.java:3350)
at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:353)
at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:225)
at io.micronaut.runtime.Micronaut.start(Micronaut.java:75)
at io.airbyte.server.ApplicationKt.main(Application.kt:17)
Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: airbyte-abctl-temporal/10.96.243.202:7233
Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
at io.grpc.netty.shaded.io.netty.channel.unix.Errors.newConnectException0(Errors.java:166)
at io.grpc.netty.shaded.io.netty.channel.unix.Errors.handleConnectErrno(Errors.java:131)
at io.grpc.netty.shaded.io.netty.channel.unix.Socket.finishConnect(Socket.java:359)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:715)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:692)
at io.grpc.netty.shaded.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:567)
at io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:491)
at io.grpc.netty.shaded.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)
at io.grpc.netty.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)
at io.grpc.netty.shaded.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)kapa.ai
03/04/2026, 4:50 PMfinishConnect(..) failed: Connection refused: airbyte-abctl-temporal/10.96.243.202:7233
This is the same pattern as the open issue where airbyte-server fails during Helm install because it can’t reach Temporal (Connection refused on temporal-service`:7233`). [Server–Temporal error]
So the problem is not the DB anymore; it’s that Temporal itself is not up/ready or not reachable at airbyte-abctl-temporal:7233.
From the knowledge sources, the concrete checks you can do:
1. Check Temporal pod and service status
kubectl -n airbyte-abctl get pods | grep temporal
kubectl -n airbyte-abctl get svc | grep temporal
◦ If the Temporal pod is CrashLoopBackOff or Error, you need its logs:
kubectl -n airbyte-abctl logs deploy/airbyte-abctl-temporal
◦ If the service is missing or has no endpoints, the server won’t be able to connect.
The same Connection refused stack trace appears when Temporal is not actually listening on 7233. [Server–Temporal error; Temporal connect refused]
2. Verify Temporal DB connectivity / SSL
In a similar case with external Postgres on Azure, Temporal failed because it couldn’t connect to the DB until SSL was configured correctly. [Azure Temporal DB]
Since you’re using an external DB and overriding Temporal env vars, double‑check:
◦ POSTGRES_SEEDS and DB_PORT point to the correct host/port.
◦ POSTGRES_USER / POSTGRES_PWD match a user that can access the Temporal DB(s).
◦ If your Postgres requires SSL, you may need POSTGRES_TLS_ENABLED=true and proper certs; in the Azure case, adding the SSL cert fixed Temporal. [Azure Temporal DB]
3. Be aware of Temporal + networking quirks
There is also an issue where Temporal fails to bind/connect correctly in some Kubernetes networking setups (dual‑stack GKE), leading to the same Connection refused on the Temporal service IP/port. [Temporal bind issue]
The knowledge sources don’t provide a generic fix for that, only the symptom.
-------------------------
The key point from the stack trace is: Airbyte server is failing startup because it cannot reach Temporal at airbyte-abctl-temporal:7233. [Server–Temporal error]
To move forward, you’ll need to:
1. Confirm that the Temporal pod is running and ready.
2. If it isn’t, inspect the Temporal pod logs to see why it can’t start (likely DB/SSL or env misconfig).
3. Fix Temporal so it can start and listen on 7233; once Temporal is healthy, the server readiness probe should pass.
The knowledge sources do not include your Temporal pod logs, so I can’t say exactly why Temporal is failing in your environment, only that the server error is a direct consequence of Temporal not being reachable. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.