Forum Navigation
You need to log in to create posts and topics.

BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4


Deploying Kubernetes with baremetal hardware and VM as a master / control plane results errors in networking  and calico nodes not in ready state

running the following command

kubectl describe pod calico-kube-controllers-*************  -n kube-system

kubectl describe pod  calico-node-****** -n kube-system

Results the following error

Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused

Number of node(s) with BGP peering established = 0 calico/node is not ready: BIRD is not ready: BGP not established with 

A Solution found on unixcloud ( noted in the link below ) suggests the problem occurs quote:

The issue occurs because the calico was not able to identify the Ethernet card property , it was configured to detect the eth but on aws it was configured as ens so placing the regex helps it to identify the ethernet card and associated ip properly. Since ip is not correctly processed the pod network is not properly deployed due to which the communication issue occurs and fix by the above solution.

Also the apiversion v1beta1 has been upgraded to the v1 now thats why it throws a WARNING for the same.

but its only the case when you can use the same hardware ( networking ) on all your baremetal / vms

if you using mixed environment without identical hardware you cannot apply the solution suggested.

My setup was 3 Baremetal server where network interface configured as bond0 on the worker node and 1 master installed on a VM where interface card was ens192

for now the fastest solution was to move from calico to flannel network provider and delete all calico installations




Following modifications are required to make the calico.yaml work with the latest version of the kubernetes and solve the container access issue across multiple nodes.

Remove the current calico networking applied to your kubernetes cluster

[centos@kubemaster ~]$ kubectl delete -f
Download the calico.yaml on your machine dont apply it directly as

[centos@kubemaster ~]$ wget
Modify the calico.yaml by searching for autodetect
– name: IP
value: “autodetect”

Add the following lines after it

value: “interface=ens*”

So it will look like

# Auto-detect the BGP IP address.
– name: IP
value: “autodetect”
value: “interface=ens*”

Search for the v1beta1 and remove the beta1 from it
So when you search in the file you will get it like

apiVersion: policy/v1beta1
kind: PodDisruptionBudget

Replace it as

apiVersion: policy/v1
kind: PodDisruptionBudget

You are done now and you can apply the configuration to your kubernetes cluster now

[centos@kubemaster ~]$ kubectl apply -f
Verify the pods all the pods in kube-system should be ready now for the calico

[centos@kubemaster ~]$ kubectl get pods –all-namespaces
default pod1 0/1 ContainerCreating 0 13s
kube-system calico-kube-controllers-566dc76669-qvg6g 1/1 Running 0 5m14s

Download the calico.yaml on your machine dont apply it directly

If you have found my website, guides, articles or videos useful, please buy me a coffee