k8s network: stat /var/lib/calico/nodename: no such file or directory

(combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "0a454776e2cc2f4aebbdba9117a99e41aeca6edd417d77e99fb28b39719e63cf" network for pod "svc-sfaf-0": networkPlugin cni failed to set up pod "svc-sfaf-0_testmongo" network: stat /var/lib/calico/nodename: no such file or directory: check that the calico/node container is running and has mounted /var/lib/calico/

这个问题卡了好几天终于解决了,这个应该是之前安装k8s 的时候残留的文件导致的问题

解决思路:

这个问题一直没解决然后我就想到了要换个网络插件试试,然后我就开始安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkube-flannel.yml

如果flannel 镜像下载有问题可以下载国内的镜像

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x

然后再改名

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64 quay.io/coreos/flannel:v0.12.0-arm64

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm quay.io/coreos/flannel:v0.12.0-arm

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le quay.io/coreos/flannel:v0.12.0-ppc64le

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x quay.io/coreos/flannel:v0.12.0-s390x

这些处理好之后我发现还是出现network: stat /var/lib/calico/nodename: no such file or directory 这个错误,这个时候就发现了

是calico 配置残留的问题,然后找到相关的calico 文件删除掉问题就解决了

需要删除   /var/lib/calico 这个目录 和 /etc/cni/net.d/ 这个目录下的calico 文件就行了 

到这里问题就解决了

 

另外还有个问题就是calico/node is not ready: BIRD is not ready: BGP not established

这个问题在换成flannel 后就没有了,而且之前部署的数据库也能正常访问了

 

还有一个问题就是不知道为什么arm64  的节点如果跟主节点不在同一个网段内网络也会出问题,而且报错:

加载失败

Error: Request failed with status code 404

具体原因目前不清楚,但是暂时部署的时候尽量在一个网段内

<think>好的,我现在需要解决Calico节点启动时BIRD服务失败的问题,具体报错是无法找到/var/lib/calico/nodename文件。首先,我应该回忆一下Calico的组件结构。Calico每个节点上都会运行calico-node容器,负责网络配置,而BIRD是用于路由分发的守护进程。如果nodename文件缺失,可能导致节点无法正确识别自己,从而影响BIRD的启动。 根据引用[5]中的情况,用户之前安装过Calico但失败,残留文件导致后续问题。因此,我需要检查是否有残留的Calico配置文件。特别是/etc/cni/net.d/和/var/lib/cni/calico这些目录,如果有残留,可能需要删除它们。另外,nodename文件通常由calico-node生成,存放在/var/lib/calico/下,如果该文件不存在,可能是安装过程中断或权限问题。 接下来,步骤可能包括:首先确认calico-node是否正常运行,查看日志是否有生成nodename的迹象。如果calico-node没有正确启动,可能需要检查镜像是否下载成功,或者配置是否正确。如果calico-node已经运行但文件未生成,可能需要手动创建nodename文件,或者重新部署Calico。 另外,引用[4]提到节点已经处于Running状态,但BIRD连接问题可能仍然存在。需要检查BIRD的socket文件是否存在,比如/var/run/calico/bird.ctl,但当前问题不同,是nodename缺失。因此,重点应放在确保Calico正确安装,没有残留文件,并且相关服务有权限写入所需目录。 可能的解决步骤包括:清理残留文件、重新安装Calico、检查节点名称配置、确认服务权限等。此外,可能需要重启kubelet服务,确保配置生效。如果手动创建nodename文件,需要确保内容与节点名称一致,但最好让Calico自动生成,避免手动干预导致不一致。</think>### 解决Calico BIRD服务因缺失nodename文件无法启动的步骤 #### 1. 确认Calico安装完整性 首先检查`calico-node` Pod是否正常运行: ```bash kubectl get pods -n kube-system | grep calico-node ``` 若状态异常,查看日志定位问题: ```bash kubectl logs <calico-node-pod-name> -n kube-system ``` 若日志提示`nodename`文件缺失,进入下一步[^5]。 --- #### 2. 清理残留配置文件 **在故障节点执行以下操作:** - 删除CNI配置残留: ```bash rm -rf /etc/cni/net.d/* # 删除所有CNI配置文件(先备份) rm -rf /var/lib/cni/calico # 删除Calico的CNI数据 ``` - 清理Calico数据目录: ```bash rm -rf /var/lib/calico/* ``` - 重启kubelet服务: ```bash systemctl restart kubelet ``` --- #### 3. 重新部署Calico **方法一:通过清单文件重新安装** ```bash kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` **方法二:使用kubeadm重置网络** ```bash kubeadm reset phase addon all --config=kubeadm-config.yaml ``` --- #### 4. 验证节点名称配置 确保节点名称符合规范(无特殊字符且唯一): ```bash kubectl get nodes ``` 若节点名称异常,修改`/etc/hostname`后重启节点。 --- #### 5. 检查文件权限 确认`/var/lib/calico`目录权限: ```bash chown -R root:root /var/lib/calico chmod 755 /var/lib/calico ``` --- #### 6. 强制重建Pod 删除故障Pod触发重建: ```bash kubectl delete pod -n kube-system <calico-node-pod-name> ``` --- ### 关键原理 `/var/lib/calico/nodename`文件由`calico-node`启动时自动生成,内容为节点名称。该文件缺失通常由以下原因导致: 1. 安装过程被中断导致文件未生成 2. 残留配置文件与新安装冲突 3. 文件系统权限限制写入操作 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值