问题描述
某个/某几个 节点上的 Flannel Pod 一直无法启动(kube-flannel 命名空间下的一个 ds)
no such file or directory
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "5 │ 4b27e80cc6741f64956519501e1d955a3f39eecdeefdbe25548902d72ac2a74" network for pod "iaas-agent-m2l7w": networkPlugin cni failed to set up pod "iaas-agent-m2l7w_kubeiaas" network: loadFlannelSubnetEnv fail │ ed: open /run/flannel/subnet.env: no such file or directory
表示没有 /run/flannel/subnet.env
需要创建这个文件,并填入相关内容(具体内容参考集群配置):
vi /run/flannel/subnet.env
# ---------
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.4.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
删除 pod 让它自动重启
i/o timeout
Failed to create SubnetManager: error retrieving pod spec for 'kube-flannel/kube-flannel-ds-bvf6k': Get "https://10.96.0.1:443/api/v1/namespaces/k │ ube-flannel/pods/kube-flannel-ds-bvf6k": dial tcp 10.96.0.1:443: i/o timeout
这是说明 flannel 无法与 api-server 所在 master 节点通信,需要删除 ds 并修改 kube-flannel.yml 再重新部署:
在 POD_NAMESPACE
这一环境变量下再补充两项,
- name: KUBERNETES_SERVICE_HOST
value: "192.168.1.107" # ip address of the host where kube-apiservice is running
- name: KUBERNETES_SERVICE_PORT
value: "6443"
ImagePullBackOff
拉不下来 flannel 的镜像,可以直接使用国内镜像源。在此提供 free4lab 的镜像源:
registry.cn-beijing.aliyuncs.com/free4lab/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
registry.cn-beijing.aliyuncs.com/free4lab/mirrored-flannelcni-flannel:v0.19.0
“cni0” already has an IP address different from
问题出现在给 Pod 分配 IP 上,意思是 cni0
的 IP 不同于 10.244.X.1/24
,
查看各个 IP,一般
flannel.X
是10.244.X.0/24
cni0
是10.244.X.1/24
可以使用 IP 命令直接修改
sudo ip address flush dev cni0
sudo ip address change 10.244.X.1/24 dev cni0
或是删除 cni0 让 K8S 自动重建
sudo ip link set cni0 down
sudo ip link delete cni0
kube-flannel.yml
提供一版规避了上面问题的由 “自邮之翼 / free4inno” 提供的 flannel.yml
由 “自邮之翼 / free4inno” 提供的 flannel.yml:
- 增加了KUBERNETES_SERVICE_HOST & KUBERNETES_SERVICE_PORT 字段,请手动修改配置!
- 修改了镜像源,由 free4inno 团队提供的国内阿里镜像源