k8s

calico-node报错Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket

问题:

在我安装了nerdctl后,发现calico-node没有ready。报错信息如下:
file

解决:

使用nerdctl会在本机上添加一个nerdctl0的网卡。
file
而calico的配置文件中,IP_AUTODETECTION_METHOD(IP识别策略)为默认的 first-found,这会导致一个网络异常的ip作为nodeIP被注册。

方法1:

修改calico-node的ds。

kubectl edit ds calico-node -n calico-system

- name: IP_AUTODETECTION_METHOD
              value: "interface=eth0"  # eth 根据实际网卡开头配置

该方法命令虽然可以执行,但是我这里ds么没有生效。k8s 1.22,通过operator生成的calico,不是calico.yaml,如果是calico.yaml,直接修改文件中的参数即可。

更新

如果想修改的话,需要添加annotations:

unsupported.operator.tigera.io/ignore: "true"

查看官方文档:https://github.com/tigera/operator
file

添加annotations,再次修改ds成功。

方法2:

安装calicoctl,注意calico版本与calicoctl版本要相同。

cd /usr/local/bin
wget https://github.com/projectcalico/calicoctl/releases/download/v3.21.2/calicoctl-linux-amd64
mv calicoctl-linux-amd64 calicoctl
chmod +x calicoctl

编辑配置文件/etc/calico/calicoctl.cfg。

mkdir /etc/calico

cat > /etc/calico/calicoctl.cfg << EOF
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/root/.kube/config"
EOF

calico常用命令

# 获取节点
calicoctl get node --allow-version-mismatch
# 获取节点网络状态
calicoctl node status 
状态“up”为正常,状态为“start”为还在启动状态,未就绪。

file

使用calicoctl对calico进行更改

查看问题节点的yaml文件

calicoctl get node master -o yaml

这里使用了nerdctl0网卡的地址。10.4.0.1/24。
file

file

修改IP

calicoctl get node master -o yaml --allow-version-mismatch > calico_master.yaml

spec:
  addresses:
  - address: 192.168.0.6/24
    type: CalicoNodeIP
  - address: 192.168.0.6
    type: InternalIP
  bgp:
    ipv4Address: 192.168.0.6/24
  ipv4VXLANTunnelAddr: 10.100.219.64

file

重启calico-node

calicoctl apply -f calico_master.yaml --allow-version-mismatch

file
这里会报错无法执行,kubectl apply也不行。
参考官网的文档,修改calico-custom-resources.yaml文件
file
apply后calico-apiserver会crashloopback,calico-node也没有恢复正常。回滚文件,重新apply。
参考这篇文章:
https://serverfault.com/questions/1078703/how-to-fix-failed-to-apply-node-resource-update-conflict-node-while
使用这个命令:

kubectl set env ds/calico-node -n calico-system IP_AUTODETECTION_METHOD=interface=eth0
kubectl get pod -n calico-system

可以看到calico-node的节点都正常启动的。
file

方法3:

直接使用calicoctl命令进行修改,这种方法最为方便,推荐使用。

calicoctl patch node master --patch='{"spec":{"bgp": {"ipv4Address": "192.168.0.6/24"}}}' --allow-version-mismatch
calicoctl patch node master --patch='{"spec":{"addresses": {"address": "192.168.0.6/24"}}}' --allow-version-mismatch
分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

3 评论
最旧
最新 最多投票
内联反馈
查看所有评论
cbd oil brands
2 年 前

We’re a group of volunteers and opening a new scheme in our community.
Your web site provided us with valuable info to work on. You’ve done a formidable job and our entire community will be thankful to you.

sfgate.com
2 年 前

I couldn’t refrain from commenting. Very well written!

best cbd oil
2 年 前

Hi there, yes this paragraph is in fact pleasant and I
have learned lot of things from it regarding blogging.
thanks.

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x