The errors you're encountering are primarily related to network issues that prevent your Kubernetes pods from pulling Docker images. The ImagePullBackOff
error indicates that Kubernetes is repeatedly trying and failing to download the required container images (wazuh/wazuh-dashboard:4.7.5
and busybox
). The root cause seems to be a network connectivity issue, as indicated by the dial tcp i/o timeout
and request canceled while waiting for connection
messages.
Here’s a step-by-step guide to troubleshoot and potentially fix these issues:
Ensure that your Minikube node has proper internet connectivity. You can verify this by running:
kubectl exec -it <pod_name> -- curl -I https://registry-1.docker.io/v2/
This command attempts to reach Docker Hub from inside one of your running pods (if any). If it fails, you likely have a network issue.
Sometimes, restarting Minikube can resolve transient network issues:
minikube stop
minikube start
Make sure that the DNS resolution inside your Minikube cluster is functioning correctly. You can test DNS resolution within a pod:
kubectl exec -it <pod_name> -- nslookup google.com
If DNS resolution fails, you might need to check Minikube's DNS settings or consider restarting the kube-dns
service.
If the issue is intermittent, you can try increasing the timeout settings to give the pod more time to pull the image:
minikube config set wait-timeout 10m
You can manually pull the required images on your Minikube node to check for any specific issues:
minikube ssh
sudo docker pull wazuh/wazuh-dashboard:4.7.5
sudo docker pull busybox
Modify your deployment YAML to set imagePullPolicy: IfNotPresent
for the containers, so Kubernetes doesn't attempt to pull the image if it’s already available on the node:
imagePullPolicy: IfNotPresent
Ensure you're not hitting Docker Hub rate limits. If you’re using Docker Hub anonymously, consider configuring Docker credentials in Kubernetes:
kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=<your-username> --docker-password=<your-password> --docker-email=<your-email>
Update your deployment to use this secret.
The wazuh-indexer
pod is also facing an issue with unbound PersistentVolumeClaims. Ensure that the PersistentVolume is correctly configured and bound to the claim.
Ensure your Minikube instance has sufficient resources (CPU and memory). Consider increasing resources if needed:
minikube config set memory 4096
minikube config set cpus 2
After applying these steps, redeploy your Wazuh components and check if the issues are resolved.
To allocate all available resources, including CPU, memory, and swap, to your Minikube cluster, follow these steps:
Step 1: Stop Minikube
If Minikube is currently running, stop it:
Step 2: Set Resource Allocation
To allocate all available resources, you'll need to specify the maximum number of CPUs, memory, and swap. You can determine your system's total resources and set Minikube to use all of them.
Check Available Resources:
Configure Minikube:
Replace
<total_cpus>
,<total_memory_in_mib>
, and<total_swap_in_mib>
with the values obtained from the above commands.If you don't have a large swap space, consider adjusting this to match your needs.
Step 3: Start Minikube with Maximum Resources
Now, start Minikube with these configurations:
minikube start --force --extra-config=kubelet.reserved-cpus= --extra-config=kubelet.system-reserved-memory= --extra-config=kubelet.eviction-hard=memory.available<200Mi
Step 4: Verify the Allocation
After starting Minikube, you can verify the resource allocation:
This setup will allocate the maximum possible resources to your Minikube environment, ensuring it has the highest priority on your system.
Note that allocating all resources may affect the performance of other applications on your system, so adjust as necessary.