Skip to main content

Troubleshoot Platform Base

Rendering fails​

Errors come from two places. The first is your jsonnet command, or the bootstrap Application when Argo CD renders cluster/main.jsonnet. Argo CD shows the message in the conditions of the Application. The second is the Application of a single component, which fails when it renders its own manifests.

Errors in the bootstrap render​

Message containsCause and fix
baseDomains not setSet baseDomains in your configuration.
observability.storage.enabled requires observability.storage.metrics.enabledThe storage role needs Mimir. Enable the option or turn the storage role off.
observability.storage.enabled requires observability.storage.logs.enabledThe storage role needs Loki. Enable the option or turn the storage role off.
argocd.configMaps: unknown ConfigMap(s)Only argocd-cm, argocd-cmd-params-cm, argocd-rbac-cm and argocd-tls-certs-cm are supported.
observability.storage.backend.s3.endpoint not setSet s3.endpoint when the backend type is s3.
observability.storage.backend.s3.accessKeyID not setSet s3.accessKeyID when the backend type is s3.
neither secretRef.name nor value is setA credential has neither. The message starts with the environment variable, for example LOKI_S3_SECRET_ACCESS_KEY or ALLOY_SMTP_AUTH_PASSWORD. Set one of them.
secretRef.key is not setA secretRef has a name but no key. Add the key.
url not setAn external target is enabled without url. Set it.
argocd.configManagementPlugins.helmfile.config.image not setPin an image when you enable the plugin.
Field does not existYou replaced an object with a plain field and dropped its defaults. Use +:, for example backend+: { ... }.

Errors in a component Application​

ApplicationMessage containsCause and fix
tlssolver not supportedWith tls.issuer.type: 'acme', set acme.solver to route53, cloudflare, cloudDNS or webhook.
tlstype not supportedtls.issuer.type is selfSigned or acme.
iamUnexpected type nullAn identity provider most likely has no id. Set id and displayName on every provider.
argocd-config, argo-cd-coremust be stringsValues in argocd.configMaps.<name>.data must be strings. Use null to remove a key.
argo-cd-coreinvalid plugin name(s)A plugin name has to be a valid Kubernetes name: lowercase letters, digits and hyphens.
argo-cd-corespec is requiredAn enabled Config Management Plugin has no spec.
argo-cd-coreconfig.image must be a non-empty image referenceAn enabled Config Management Plugin has no config.image.

Warnings during rendering​

Some configurations render, but print a warning on the standard error of the renderer. The messages contain:

WarningMeaning
this Git credential (password/PAT or SSH private key)Repository credentials are base64-encoded into a Secret manifest.
oidc.clientSecret.value is base64-encodedThe client secret of an identity provider is put into a Secret manifest. Prefer secretRef.
tls.issuer.acme.route53.secretAccessKey.valueThe credential is put into a Secret manifest. The Cloudflare token and the CloudDNS key warn alike. Prefer secretRef.
argocd sso.clientSecret.value is inlined as PLAINTEXTLeave argocd.sso.clientSecret unset to use the secret of the Keycloak operator.
configMaps.argocd-cm.data:dex.config or oidc.config has no $<secret>:<key> reference.
server.insecure is not enabledThe Argo CD UI is unreachable through the ingress.
uses a mutableThe image of a Config Management Plugin has the tag :latest. Pin it.

Only the bootstrap Application appears​

Argo CD cannot read your repository. On a private repository, enable argocd.platformRepoCreds when you render the bootstrap, see Install Platform Base. Run kubectl -n argocd describe application bootstrap for the exact error. Also check that revision exists and that pathPrefix is the directory of main.jsonnet.

Ingress is not reachable​

  • Check that the Traefik Service has an external address: kubectl -n traefik get service. Without a LoadBalancer implementation it stays pending.
  • Check that the DNS records point to that address, see Requirements.
  • Check that a single default IngressClass exists. The Ingresses of Platform Base do not name a class.
  • A certificate warning is expected until you configure TLS.
  • If only the Argo CD UI fails, check that server.insecure is TRUE in argocd-cmd-params-cm.

Applications take long to become healthy​

There are no sync waves. An Application whose dependencies are not ready can fail a sync and is retried on the next reconciliation, about every three minutes. The end-to-end test allows each Application up to 20 minutes on a fresh cluster. See Architecture for the dependencies.

If Mimir or Loki pods stay Pending or are killed for lack of memory, the nodes are too small for the profile. Choose singleNode or add capacity, and raise the resources of one component through mimir.values or loki.values, for example mimir.values.ingester.resources.

Keycloak client creation fails on a fresh install​

The admission webhooks of the EDP Keycloak operator use failurePolicy: Fail and need cert-manager. Creating a KeycloakClient fails until the webhook certificate is issued, and Argo CD retries until the cluster converges. See the EDP section of the upgrade notes.

Keycloak changes disappear​

Keycloak does not persist its state. After a restart, the operators apply the configuration from Git again, and anything you changed in the Keycloak UI is lost. Make the change in your configuration instead, see Identity and access.

No pod logs in Grafana​

Pod logs are only collected when you set observability.collector.logs.allPods to true, see Configure observability.

A removed ConfigMap key stays in the cluster​

Platform Base applies the Argo CD ConfigMaps with server-side apply. Leaving a key out, or setting it to null, does not delete a key that already exists in the live ConfigMap. Set an explicit value to change it, see Customize Argo CD.