This guide provides solutions to common issues encountered while using the Fawkes Internal Developer Platform. It is organized by category to help you quickly identify and resolve problems.
- General Issues
- Infrastructure Issues
- Kubernetes Issues
- CI/CD Issues
- Azure-Specific Issues
- Testing Issues
- Getting Help
- Symptom: Commands fail due to missing environment variables.
- Solution:
- Ensure you have a
.envfile in the root directory. - Load the environment variables:
source .env
- Ensure you have a
- Symptom: You encounter
Permission Deniederrors when running scripts. - Solution:
- Ensure the script has executable permissions:
chmod +x <script-name>.sh
- Run the script with appropriate privileges (e.g.,
sudoif required).
- Ensure the script has executable permissions:
- Symptom: Terraform fails with errors like "resource already exists" or "authentication failed."
- Solution:
- Run
terraform planto identify conflicting resources. - Ensure your cloud provider credentials are valid and loaded:
export AWS_ACCESS_KEY_ID=your-access-key export AWS_SECRET_ACCESS_KEY=your-secret-key
- Run
- Symptom: Resources remain after running the destroy script.
- Solution:
- Manually inspect the resources in your cloud provider's console.
- Run
terraform destroydirectly in the affected directory:terraform destroy
- Symptom:
kubectlcommands fail with "Unable to connect to the server." - Solution:
- Ensure your
kubeconfigis set correctly:export KUBECONFIG=/path/to/kubeconfig - Verify the cluster status:
kubectl cluster-info
- Ensure your
- Symptom: Pods remain in the
Pendingstate. - Solution:
- Check for insufficient resources:
kubectl describe pod <pod-name>
- Scale up your cluster or free up resources.
- Check for insufficient resources:
- Symptom: Jenkins pipelines fail with errors related to missing credentials or tools.
- Solution:
- Verify that the required credentials are configured in Jenkins.
- Ensure the Jenkins agent has the necessary tools installed.
- Symptom: GitHub Actions fail with errors like "command not found" or "authentication failed."
- Solution:
- Check the workflow logs for detailed error messages.
- Ensure secrets are configured correctly in the repository settings.
- Symptom: Azure CLI commands fail with "not logged in" or "authentication failed."
- Solution:
- Log in to Azure CLI:
az login
- Set the correct subscription:
az account set --subscription <subscription-id>
- Log in to Azure CLI:
- Symptom: Terraform or Azure CLI commands fail with "resource group not found."
- Solution:
- Verify the resource group exists:
az group list --query "[].name" - Create the resource group if necessary:
az group create --name <resource-group> --location <location>
- Verify the resource group exists:
- Symptom: Tests fail with errors like "module not found" or "dependency missing."
- Solution:
- Install the required dependencies:
mvn clean install
- Install the required dependencies:
- Symptom: Performance tests fail with timeout or resource errors.
- Solution:
- Ensure the test environment has sufficient resources.
- Adjust the test parameters (e.g., reduce load or increase timeouts).
- Symptom: ArgoCD application shows
OutOfSyncstatus and won't sync. - Solution:
- Check application details:
argocd app get <app-name> argocd app diff <app-name>
- Force sync if needed:
argocd app sync <app-name> --force
- Check ArgoCD logs:
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=100
- Check application details:
- Symptom: Cannot access ArgoCD dashboard.
- Solution:
- Check ArgoCD pods are running:
kubectl get pods -n argocd
- Port-forward to access UI:
kubectl port-forward svc/argocd-server -n argocd 8080:443
- Check ingress configuration:
kubectl get ingress -n argocd
- Check ArgoCD pods are running:
- Symptom: Backstage pods in
CrashLoopBackOfforErrorstate. - Solution:
- Check pod logs:
kubectl logs -n backstage -l app=backstage --tail=100
- Verify PostgreSQL database is running:
kubectl get pods -n backstage -l cnpg.io/cluster=db-backstage-dev
- Check database connection:
kubectl exec -n backstage db-backstage-dev-1 -- psql -U postgres -c "SELECT 1"
- Check pod logs:
- Symptom: Service catalog shows no entities or fails to load.
- Solution:
- Check Backstage logs for catalog errors:
kubectl logs -n backstage -l app=backstage | grep -i catalog - Verify GitHub token is valid:
kubectl get secret -n backstage backstage-secrets -o yaml
- Manually trigger catalog refresh from Backstage UI
- Check Backstage logs for catalog errors:
- Symptom: Builds queue but never start.
- Solution:
- Check if Jenkins agents can be created:
kubectl get pods -n jenkins -l jenkins/label
- Check Jenkins controller logs:
kubectl logs -n jenkins -l app.kubernetes.io/component=jenkins-controller --tail=200
- Verify Jenkins has permissions to create pods:
kubectl auth can-i create pods -n jenkins --as=system:serviceaccount:jenkins:jenkins
- Check if Jenkins agents can be created:
- Symptom: Builds fail at SonarQube quality gate stage.
- Solution:
- Check SonarQube analysis results:
# Access SonarQube UI kubectl port-forward svc/sonarqube-sonarqube -n sonarqube 9000:9000 - Review quality gate conditions in SonarQube dashboard
- Check if issues are legitimate or need quality gate adjustment
- See Quality Gates Configuration Guide
- Check SonarQube analysis results:
- Symptom: Vault pods show "Sealed" status.
- Solution:
- Check vault status:
kubectl exec -n vault vault-0 -- vault status - Unseal vault (requires unseal keys):
kubectl exec -n vault vault-0 -- vault operator unseal <key-1> kubectl exec -n vault vault-0 -- vault operator unseal <key-2> kubectl exec -n vault vault-0 -- vault operator unseal <key-3>
- Repeat for each vault pod (vault-0, vault-1, vault-2)
- Check vault status:
- Symptom: Application pods fail to start with secret-related errors.
- Solution:
- Verify Vault is unsealed:
kubectl exec -n vault vault-0 -- vault status - Check External Secrets Operator:
kubectl get externalsecrets -n <namespace> kubectl describe externalsecret <name> -n <namespace>
- Check service account has proper Vault role:
kubectl exec -n vault vault-0 -- vault read auth/kubernetes/role/<role-name>
- Verify Vault is unsealed:
- Symptom: Dashboards show "No data" or empty graphs.
- Solution:
- Check Prometheus is scraping targets:
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n prometheus 9090:9090 # Navigate to http://localhost:9090/targets - Verify ServiceMonitor exists:
kubectl get servicemonitors -n <namespace>
- Check Prometheus logs:
kubectl logs -n prometheus prometheus-kube-prometheus-prometheus-0
- Verify Grafana data source configuration
- Check Prometheus is scraping targets:
- Symptom: Prometheus pod fails with storage errors.
- Solution:
- Check PVC usage:
kubectl exec -n prometheus prometheus-kube-prometheus-prometheus-0 -- df -h - Increase PVC size:
kubectl patch pvc prometheus-kube-prometheus-prometheus-db-prometheus-kube-prometheus-prometheus-0 -n prometheus -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}' - Or reduce retention period in Prometheus configuration
- Check PVC usage:
- Symptom: Docker push fails with authentication or permission errors.
- Solution:
- Verify Harbor is accessible:
curl -k https://harbor.fawkes.local
- Login to Harbor:
docker login harbor.fawkes.local
- Check Harbor project permissions in UI
- Verify TLS certificate is trusted
- Verify Harbor is accessible:
- Symptom: Vulnerability scanning fails or shows errors.
- Solution:
- Check Trivy scanner logs:
kubectl logs -n harbor -l component=trivy --tail=100
- Verify Trivy database is updated:
kubectl exec -n harbor <trivy-pod> -- trivy --version
- Check network connectivity to vulnerability database
- Check Trivy scanner logs:
- Symptom: DevLake dashboards show stale or missing data.
- Solution:
- Check DevLake pods:
kubectl get pods -n devlake
- Check data collection logs:
kubectl logs -n devlake -l app.kubernetes.io/name=devlake --tail=100
- Verify connections to data sources (GitHub, ArgoCD, Jenkins):
# Access DevLake UI kubectl port-forward svc/devlake-ui -n devlake 4000:4000 # Navigate to http://localhost:4000 and check connections
- Manually trigger data collection if needed
- Check DevLake pods:
- Symptom: Pods fail to create with policy violation errors.
- Solution:
- Check policy reports:
kubectl get policyreports -n <namespace> kubectl describe policyreport <report-name> -n <namespace>
- Review specific violation:
kubectl get events -n <namespace> | grep -i policy
- Fix pod manifest to comply with policy or request policy exception
- See Troubleshoot Kyverno Violations
- Check policy reports:
- Symptom: Services show certificate errors or invalid certificates.
- Solution:
- Check certificate status:
kubectl get certificates -A kubectl describe certificate <cert-name> -n <namespace>
- Check cert-manager logs:
kubectl logs -n cert-manager -l app=cert-manager --tail=100
- Force certificate renewal:
kubectl delete secret <tls-secret-name> -n <namespace>
- Check ACME challenge (for Let's Encrypt):
kubectl get challenges -A
- Check certificate status:
- Symptom: Pods stuck in
Pendingstate, nodes showing high CPU/memory. - Solution:
- Check node resource usage:
kubectl top nodes kubectl describe nodes | grep -A 5 "Allocated resources"
- Identify resource-hungry pods:
kubectl top pods -A | sort -k 3 -rn | head -20
- Scale down non-critical workloads:
kubectl scale deployment <deployment-name> -n <namespace> --replicas=1
- Delete completed/failed pods:
kubectl delete pod --field-selector status.phase=Succeeded -A kubectl delete pod --field-selector status.phase=Failed -A
- Consider adding nodes or increasing node resources
- Check node resource usage:
If you are unable to resolve an issue, you can:
- Check the Epic 1 Platform Operations Runbook for detailed procedures
- Check the FAQ for additional guidance
- Open an issue on GitHub with detailed information about the problem
- Reach out to the community for support