kubernetes 新加了個node,狀態Ready,但調度過去的任務,都執行異常node
查看異常節點日誌運維
`Error adding net work: open run/flannel/subnet.env no such file or directory`ide
flannel 有問題oop
環境裏flannel也是在容器裏啓動的,查看flannel,果真新節點的flannel服務沒有起來日誌
kbs get pods
kube-flannel-ds-28rh8 0/1 CrashLoopBackOff 7 1hip
追查flannel啓動日誌get
kbs logs --tail 10 -f kube-flannel-ds-28rh8
I1213 07:44:58.471264 1 main.go:201] Could not find valid interface matching en1: failed to find IPv4 address for interface en1
E1213 07:44:58.471366 1 main.go:225] Failed to find interface to use that matches the interfaces and/or regexes providedkubernetes
interface en1 網卡問題集羣
ifcofing 查看容器
原來這個節點的ip綁在en2上
再看其餘節點運行正常的flannel,也是指向的en1
/opt/bin/flanneld --ip-masq --kube-subnet-mgr --iface=en1
問題已經定位到
k8s集羣原來機器的ip都在en1上,flannel節點啓動設置的網卡都在en1,新加的這臺節點ip卻在en2上,以en1啓動則失敗
查看flannel的配置
kubectl -n kube-system get ds kube-flannel-ds -o yaml
...
containers:
- args:
- --ip-masq
- --kube-subnet-mgr
- --iface=en1
...
果真這裏也是en1
運維比較給力,10分就換好了網卡,服務正常恢復
若是沒法更換網卡則需改個iface=en1這個參數
flannel若是在宿主機上,改宿主機的設置便可,但這裏的flannel都是在容器內啓動的
爲了通用把
--iface=en1
改成(192.168.1.255是子網綁定的ip)
--iface=$(ip add |grep 192.168.1.255 |awk '{print $7}')
須要改的地方就是如何把有效的網卡拿出來
但這個方式通用性仍是不太好
更復雜的通用辦法就是寫個複雜的sh,加入sh打成鏡象或把sh映射到容器裏,用sh替換啓動容器的命令