I have been stuck in deploying airbyte 2.0.1 with ...
# ask-community-for-troubleshooting
m
I have been stuck in deploying airbyte 2.0.1 with helm v2 on GKE with gcs for logging and facing issues with it, i have tried the solution from https://github.com/airbytehq/airbyte/issues/65153 adding
Copy code
global:
  workloads:
    containerOrchestrator:
      secretName: "airbyte-gcs-logs-creds"
      secretMountPath: "/secrets/gcs-log-creds"
and https://github.com/airbytehq/airbyte/commit/09ebba016695c3b15e06924bc43c019a430c83f1 for correct identifier but still unable to make it work, and this is the output from the container
Copy code
kubectl exec -it airbyte-workload-api-server-594597677d-pf4jz -n airbytev2 -- bash
[airbyte@airbyte-workload-api-server-594597677d-pf4jz app]$ ls -l /secrets/gcs-log-creds
total 0
drwxrwsrwt 3 root airbyte 100 Oct 30 08:00 gcp.json
[airbyte@airbyte-workload-api-server-594597677d-pf4jz app]$ head -n 5 /secrets/gcs-log-creds/gcp.json
head: error reading '/secrets/gcs-log-creds/gcp.json': Is a directory
Could any one had or have the same issue or solved it, could guide on this :-)
k
Based on the information from your question and the provided knowledge sources, it appears you are encountering an issue where the GCS credentials secret is being mounted as a directory instead of a file in your Airbyte 2.0.1 deployment on GKE using Helm v2. This is evident from your output:
Copy code
ls -l /secrets/gcs-log-creds total 0 drwxrwsrwt 3 root airbyte 100 Oct 30 08:00 gcp.json head: error reading '/secrets/gcs-log-creds/gcp.json': Is a directory
### What’s Happening? This issue typically occurs when the Kubernetes secret is created incorrectly—specifically, if the key in the secret is named
gcp.json
but the value is not the actual JSON file content, or if the secret is structured such that
gcp.json
is a directory rather than a file. ### Key Points from Knowledge Sources - The Airbyte Helm chart expects the GCS credentials to be provided as a file named
gcp.json
inside a Kubernetes secret, and this file should contain the service account JSON key, not a directory or a base64-encoded directory structure [[source]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). - There have been several issues reported about secrets being double base64 encoded or misconfigured, leading to similar mounting problems [[source]](https://github.com/airbytehq/airbyte/issues/68178). - The correct way is to create a Kubernetes secret where the key is
gcp.json
and the value is the raw JSON content of your service account key (not base64-encoded, as kubectl will handle encoding) [[source]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### How to Fix 1. Check Your Secret Creation Command When creating the secret, use:
Copy code
sh    kubectl create secret generic airbyte-gcs-log-creds \      --from-file=gcp.json=/path/to/your/service-account.json \      -n airbytev2
This ensures that
/secrets/gcs-log-creds/gcp.json
is a file containing your credentials. 2. Verify the Secret in Kubernetes After creating the secret, check it:
Copy code
sh    kubectl get secret airbyte-gcs-log-creds -n airbytev2 -o yaml
You should see a
gcp.json
key with a base64-encoded value (the content of your JSON file). 3. Helm Values In your
values.yaml
, ensure you reference the secret correctly:
Copy code
yaml    global:      storage:        type: "GCS"        storageSecretName: airbyte-gcs-log-creds        bucket:          log: your-bucket          state: your-bucket          workloadOutput: your-bucket        gcs:          projectId: your-project-id          credentialsPath: /secrets/gcs-log-creds/gcp.json
(Use
storageSecretName
as the key, not
secretName
, as per recent chart versions and documentation [[source]](https://github.com/airbytehq/airbyte/issues/44525).) 4. Remove Double Encoding Do not manually base64-encode the JSON file before creating the secret with
--from-file
. Let
kubectl
handle the encoding. ### Additional Notes - If you previously created the secret with
--from-literal
or by manually encoding, delete and recreate it using
--from-file
. - If you are using a different secret name or mount path, ensure all references in your Helm values and environment variables are consistent. ### References - [Helm GCS Storage Configuration](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values) - [Github Issue: GCS secret mounting problems](https://github.com/airbytehq/airbyte/issues/68178) - [Github Issue: Correct secret key is storageSecretName](https://github.com/airbytehq/airbyte/issues/44525) If you follow these steps and still encounter issues, please share the output of your secret definition (
kubectl get secret ... -o yaml
) and your relevant
values.yaml
section for further troubleshooting.
m
@kapa.ai The secret yaml form is "kubectl get secret gcs-log-creds -n airbytev2 -o yaml apiVersion: v1 data: gcp.json: ewogI................." and the storage is "storage: storageSecretName: gcs-log-creds type: gcs # Change "GCS" to lowercase #secretName: airbyte-gcs-log-creds bucket: log: airbyte-bucket state: airbyte-bucket workloadOutput: airbyte-bucket activityPayload: airbyte-bucket gcs: projectId: brk-analytics #credentialsJson: "base64encodedjsonkey" credentialsJsonPath: /secrets/gcs-log-creds/gcp.json"
k
A message from kapa.ai
Your secret YAML and Helm values look mostly correct, but there are a few important details and common pitfalls to check, based on the knowledge sources: ### 1. Secret Format Your secret should look like this (as you posted):
Copy code
yaml apiVersion: v1 data:   gcp.json: <base64-encoded-json> kind: Secret metadata:   name: gcs-log-creds   namespace: airbytev2 type: Opaque
- The value for
gcp.json
should be the base64-encoded content of your GCP service account JSON file. - If you created the secret with
kubectl create secret generic gcs-log-creds --from-file=gcp.json=/path/to/your/service-account.json -n airbytev2
, this is correct and will work as expected [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### 2. Helm Values Your
values.yaml
should use:
Copy code
yaml storage:   storageSecretName: gcs-log-creds   type: gcs   bucket:     log: airbyte-bucket     state: airbyte-bucket     workloadOutput: airbyte-bucket     activityPayload: airbyte-bucket   gcs:     projectId: brk-analytics     credentialsJsonPath: /secrets/gcs-log-creds/gcp.json
- Use
storageSecretName
(not
secretName
) as the key. This is confirmed in both the documentation and user feedback on recent chart versions [[Github Issue: storageSecretName vs secretName]](https://github.com/airbytehq/airbyte/issues/44525). - The
type
should be lowercase:
gcs
. -
credentialsJsonPath
is the correct field to use if you are mounting the secret as a file [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### 3. Common Pitfalls - Do not set both
credentialsJson
and
credentialsJsonPath
at the same time. Use only one. - The secret must be mounted as a file, not a directory. If you see
/secrets/gcs-log-creds/gcp.json
as a directory, your secret was likely created incorrectly (e.g., with a directory as the source instead of a file). - The secret name in your Helm values (
storageSecretName
) must match the actual Kubernetes secret name. ### 4. Troubleshooting If you still see
/secrets/gcs-log-creds/gcp.json
as a directory, double-check how you created the secret. It should be:
Copy code
sh kubectl create secret generic gcs-log-creds --from-file=gcp.json=/path/to/your/service-account.json -n airbytev2
Do not use
--from-file=gcp.json=/path/to/directory
or
--from-file=/path/to/directory
as this will create a directory structure in the secret. ### 5. Documentation References - The official documentation and recent issues confirm this is the correct approach for Airbyte Helm v2 and GCS logging [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values), [[Github Issue: storageSecretName vs secretName]](https://github.com/airbytehq/airbyte/issues/44525). --- Summary: Your configuration is correct if the secret is created from a single file and referenced by
storageSecretName
in your Helm values. If you still encounter issues, re-create the secret using the exact command above and ensure the file path is correct. If
/secrets/gcs-log-creds/gcp.json
is still a directory, the secret was not created from a single file.