Troubleshooting
Common Issues
Calico/Flannel CrashLoopBackOff
Symptom
Network pods crash with error:
Failed to check br_netfilter: stat /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory
Solution
Load the kernel module on the affected node:
modprobe br_netfilter
Then restart the pods:
kubectl delete pod -n kube-system <pod-name> --force
Prevention
Add modprobe br_netfilter to your node provisioning steps.
MetalLB CRDs OutOfSync
Symptom
ArgoCD shows MetalLB CRDs as OutOfSync.
Cause
MetalLB v0.14+ uses CRDs with webhook conversions. The webhook CA bundle is dynamically generated.
Solution
The metallb.yaml template includes ignoreDifferences to ignore the caBundle field. This is already configured in the template.
ArgoCD Repo-Server OOM
Symptom
ArgoCD repo-server pods crash with OOM errors.
Solution
Resources are already configured in cluster/dev/argocd-values.yaml:
repoServer:
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi
If issues persist, increase memory limits.
Node Not Ready
Common Causes
-
Kubelet not running:
systemctl status kubelet
systemctl restart kubelet -
Certificates expired:
kubeadm certs check-expiration
kubeadm certs renew all
systemctl restart kubelet -
Network issues: Check that
br_netfiltermodule is loaded andsysctlsettings are applied.
Deploy Not Working
Check 1: ArgoCD Applications
kubectl get applications -n argocd
Check 2: Application Status
kubectl get application <app-name> -n argocd -o wide
Check 3: Sync Status
argocd app get <app-name>
Check 4: ArgoCD Logs
kubectl logs -n argocd deployment/argocd-application-controller
kubectl logs -n argocd deployment/argocd-repo-server
Certificate Issues
Check Certificate Status
kubectl get certificates -A
kubectl describe certificate <name> -n <namespace>
Check Challenge Status
kubectl get challenges -A
Common Causes
- Cloudflare API token invalid - Verify token permissions
- DNS propagation delay - Wait a few minutes
- Rate limiting - Let's Encrypt has rate limits
PVC Pending
Check Storage Class
kubectl get storageclass
kubectl describe storageclass local-path
Check Provisioner
kubectl get pods -n local-path-storage
kubectl logs -n local-path-storage -l app=local-path-provisioner
Common Causes
- No nodes available - Ensure nodes are Ready
- Insufficient disk space - Check node disk usage
- Wrong storage class - Use
storageClassName: local-path
Ingress Not Working
Check Ingress Status
kubectl get ingress -A
kubectl describe ingress <name> -n <namespace>
Check Controller
kubectl get pods -n ingress-nginx
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller
Check TLS Secret
kubectl get secrets -A | grep tls
kubectl describe secret <tls-secret> -n <namespace>
DNS Not Resolving
Check External-DNS
kubectl get pods -n external-dns
kubectl logs -n external-dns -l app.kubernetes.io/name=external-dns
Verify DNS Records
dig myapp.ssdk8s.xyz
nslookup myapp.ssdk8s.xyz
Check Cloudflare
Verify records in Cloudflare dashboard.
High Resource Usage
Check Pod Resource Usage
kubectl top pods -A
kubectl top nodes
Check Node Resources
kubectl describe node <node-name>
Common Solutions
- Increase node resources - Add more nodes
- Reduce retention - Lower Prometheus/Loki retention
- Scale down - Reduce replica counts