记一次使用Flannel插件排错历程

摘要:
请记住,在使用Flannel插件的故障排除过程中使用了最初的Calico插件。这不是关于学习K8s网络的问题,所以我们已经准备好切换到Flannel。然后噩梦开始了……然后使用cat/run/lanel/subnet Env检查子网环境:问题在这里很清楚。我们使用的Overlaynetwork是Flannel,这意味着Pod的IP地址段应该在Flannel的子网下。现在我们看到,cni0的IP地址段与Flanelsubnet的子网地址段不同,因此存在问题。接下来,直接删除CNi0错误网卡。删除后,它将自动重新生成$Ifconfigcni0down$纪律删除ni0最终在主机上验证。问题解决了。

记一次使用Flannel插件排错历程

原来使用的是Calico插件,这不准备学习K8s的网络,就准备换成Flannel了,然后噩梦就开始了。。。

直接使用kubectl apply -f 安装了flannel插件,使用kubectl get pod -n kube-system查看pod的运行状态,一切都能美好,接着就准备直接运行个Pod看是否正常,结果等了半天还是在创建,这肯定不正常了,就使用kubectl describe pod命令查看,结果发现报下面类型的错误:

Warning FailedCreatePodSandBox 7m48s kubelet, node1 Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "c71c64ed91ac3f408b7809a4a98117714a15fc45282efb136affc2469a9f9b61" network for pod "coredns-7ff77c879f-544jh": networkPlugin cni failed to set up pod "coredns-7ff77c879f-544jh_kube-system" network: error getting ClusterInformation: Get https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes"), failed to clean up sandbox container "c71c64ed91ac3f408b7809a4a98117714a15fc45282efb136affc2469a9f9b61" network for pod "coredns-7ff77c879f-544jh": networkPlugin cni failed to teardown pod "coredns-7ff77c879f-544jh_kube-system" network: error getting ClusterInformation: Get https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")]

嗯,看来是网络插件的问题,初步分析应该是Calico没有卸载干净。当初只是执行了kubeadm reset命令,接着就分别执行了下面的几个命令:

$ ipvsadm --clear
$ rm -rf /etc/cni/net.d/
$  rm -rf $HOME/.kube/config

接着重新安装flannel插件,安装完成后,执行kubectl get pod -n kube-system查看,结果发现coredns一直起不来。使用describe命令查看,发现报错信息和上面的类似。

继续翻,原来kubelet会从默认目录读取配置文件,如果有多个配置文件,那么它会应用按字母顺序首先出现的配置文件中的 CNI 插件,CNI的配置文件默认在/etc/cni/net.d/目录。

详细可以参考官方文档:https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

这时候感觉有些眉目了,前面我们一直在操作master,而没有管node节点,进入node节点的/etc/cni/net.d/目,果然发现有calico的遗留。

image

删除后进行kubeadm reset,然后重新加入master,在master上执行kubectl get pod -n kube-system,发现终于正常了。

接着呢,就有开始验证是否能正常拉取镜像,就执行了下面的命令:

kubectl create deployment nginx --image=nginx:1.14-alpine

查看pod,结果发现还是不正常,这次报下面这种错误:

Warning FailedCreatePodSandBox 5m28s (x4 over 5m34s) kubelet, node1 (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "48c46e7e0d9198ff94721fba330cc9370f166c6d1c4181fb3543ef99461c4e8d" network for pod "nginx-55f8fd7cfc-4zbvl": networkPlugin cni failed to set up pod "nginx-55f8fd7cfc-4zbvl_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.3.1/24

从报错信息中看出,cni的ip地址不在10.244.3.1/24这个段。在node1上使用ip address查看IP信息。

image

从上图中可以看到flannel.1的网关是10.244.3.9/32。接着使用cat /run/flannel/subnet.env查看子网环境:

image

到这里问题就明确了,我们使用的Overlay network为Flannel,也就是说Pod的IP地址段应该在Flannel的subnet下,而现在我们看到cni0的IP地址段与flannel subnet地址段不同,所以就出现了问题。

接下来直接删除这个cni0这个错误网卡,删除后会自动重建。

$ ifconfig cni0 down
$ ip link delete cni0

image

最后在master上进行验证,问题解决。

image

免责声明:文章转载自《记一次使用Flannel插件排错历程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇报错:Exception: org.apache.sqoop.common.SqoopException Message: DRIVER_0002:Given job is already runningiOS 项目调试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

metrics-server 安装和报错 Kubernetes metrics-server: kubectl top nodes Error from server (ServiceUnavailable)

安装过程参考https://blog.csdn.net/qq_40460909/article/details/93321945 git clone https://github.com/kubernetes-incubator/metrics-server.git cd metrics-server/deploy/1.8+/ sed -i 's#k8s....

prometheus-数据展示之grafana部署和数据源配置

1、监控pods 。   prometheus再部署以后,会自带cAdvisor。结果如下: 2、K8S集群状态监控。需要使用kube-state-metrics插件。部署以后 kubernetes.io/cluster-service: "true" 会自动启用监控对象,无需配置 [root@VM_0_48_centos prometheus]#...

kubectl 常规命令

一.kubectl输出格式 kubectl命令可以用多种格式对结果进行显示,输出格式通过-o参数指定$ kubectl [command] [TYPE] [NAME] -o=<output_format>(1)-o=custom-columns=<spec> :根据自定义列名进行输出,以逗号分隔(2)-o=custom-column...

K8S(二)-创建一个pod应用

 Pod是可以创建和管理Kubernetes计算的最小可部署单元。pod可以理解为容器的外壳,给容器做了一层抽象封装。一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),这多个容器间共享IPC、Network和UTC,和存储卷,存储卷不再属于容器,而属于pod。 Pod分...

k8s 之Job/CronJob

Job 我们可以用job来创建一个任务 用kubectl get jobs 进行查看 kubectl describe job kubectl get pod 查看对应的pod kubectl logs $podName 查看对应的pod 的日志 对于不需要的job 可以通过kubectl delete job $job_name 进行删除,这样job对...

mac cocoapod安装过程

cocoapod: 自动化管理第三方开发包的一个插件, 废话不多说, 一个新手只需做如下几个步骤 1-> 安装ruby环境(可忽略, 不是必要)  1.1 首先我们先看看当前你机器上ruby的版本 ruby -v ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16] 1.2 接下来我们来...