ArgoCD Installation - Issues Encountered and Next Steps

Summary

We attempted to install ArgoCD via tofu apply on the OpenTofu configuration in this repository. The infrastructure (Proxmox VMs, router LXC, management LXC) was set up, but the Talos Kubernetes cluster bootstrap and ArgoCD Helm installation encountered several issues due to version mismatches and partial state.

What Has Been Done

Issues Encountered

1. Talos API Connectivity Constraints

2. Talos/Terraform Provider Version Mismatches

IssueResolution AttemptResult
Helm v3.x schema change (kubernetes block vs argument)Fixed in argocd.tfFixed - validation passes
Talos provider v0.12.0 generated config with types incompatible with older Talos ISODowngraded talos provider to v0.6.1 in main.tfImproved compatibility
Mismatched talos_version in secrets vs actual Talos ISOAdjusted talos_version in talos_machine_secrets (tried v1.10.0, settled on v1.7.0)Resolved “DiscoveryServiceConfig not registered” errors
Client (talosctl v1.14.2 on management) vs server API differencesUsed provider-generated configs via Terraform where possiblePartial success

3. Partial State and Bootstrap Complexity

Current State

Next Steps to Complete ArgoCD Installation

To complete the installation, work from the management CT (root@192.168.0.137 on eth0, or root@10.10.50.10 on LAN) since it has network access to the Talos nodes.

Step 1: SSH to Management CT

ssh -i ~/.ssh/id_ed25519 root@192.168.0.137
cd /usr/src/opentofu

Step 2: Assess Current Cluster State

# Check Talos API status on all nodes
TALOSCONFIG=/tmp/talosconfig_new  # or from terraform state
talosctl --talosconfig /tmp/talosconfig_new get members --nodes 10.10.50.10,10.10.50.21,10.10.50.22 2>&1 | tail -30

Or better, extract the current talosconfig from Terraform state if needed:

tofu state show talos_client_configuration.this 2>&1 | grep talos_config
# Or write it
tofu output -raw talosconfig > /root/talosconfig 2>/dev/null || echo "check state"

Step 3: Fix Control Plane (Node 0) Configuration

If the control plane node (10.10.50.10) is not responding properly:

  1. Check VM status via Proxmox API or from management network perspective
  2. If needed, reapply just the control plane config: tofu apply -target=talos_machine_configuration_apply.nodes[0] -lock=false
  3. Wait for the node to reboot and come up

Step 4: Bootstrap the Cluster (if not bootstrapped)

Once the control plane is accessible via Talos API with matching certs:

tofu apply -target=talos_machine_bootstrap.this -lock=false

Or manually: talosctl bootstrap --nodes 10.10.50.10

Step 5: Retrieve Kubeconfig

tofu apply -target=talos_cluster_kubeconfig.this -lock=false
# Kubeconfig will be stored in state; retrieve it with:
tofu output -raw kubeconfig > /root/kubeconfig
export KUBECONFIG=/root/kubeconfig
kubectl get nodes

Step 6: Install ArgoCD via Helm

With the cluster bootstrapped and kubeconfig available, install ArgoCD:

tofu apply -target=helm_release.argocd -lock=false

This will install ArgoCD into the argocd namespace as configured in argocd.tf.

Step 7: Verify ArgoCD Installation

export KUBECONFIG=/root/kubeconfig
kubectl get pods -n argocd
kubectl get svc -n argocd

Get the admin password:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d

Access via port-forward:

kubectl -n argocd port-forward svc/argocd-server 8080:443

Alternative: Clean Slate Approach (If State is Too Messy)

If reconciliation is problematic, you can reset the Talos nodes from management CT (using talosctl if certs match) and then run a clean tofu apply from the management CT with -lock=false. Be cautious as this will wipe cluster data.


Notes