Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes kube apiserver无法创建存储后端_Kubernetes - Fatal编程技术网

Kubernetes kube apiserver无法创建存储后端

Kubernetes kube apiserver无法创建存储后端,kubernetes,Kubernetes,我按照官方指南建立了一个高可用性Kubernetes集群。它是一个实验性集群,用于探索内部部署高可用性的可行性,因此,我在托管在VMware Workstation上的六美分OS 7虚拟机上创建了该集群—三个主节点和三个工作节点 在初始设置之后,它运行良好,但在我昨晚关闭所有东西并在今天早上重新启动所有虚拟机之后,kube apiserver不再在任何主节点上启动。它在所有节点上都失败,并显示一条消息,说明它“无法创建存储后端(超出了上下文截止日期)”: 尽管昨晚所有这些都很好地协同工作,为了排

我按照官方指南建立了一个高可用性Kubernetes集群。它是一个实验性集群,用于探索内部部署高可用性的可行性,因此,我在托管在VMware Workstation上的六美分OS 7虚拟机上创建了该集群—三个主节点和三个工作节点

在初始设置之后,它运行良好,但在我昨晚关闭所有东西并在今天早上重新启动所有虚拟机之后,kube apiserver不再在任何主节点上启动。它在所有节点上都失败,并显示一条消息,说明它“无法创建存储后端(超出了上下文截止日期)”:

尽管昨晚所有这些都很好地协同工作,为了排除版本冲突,我尝试将
--storage backend=etcd3
添加到kube-apiserver.yaml清单文件中,并将Docker降级到17.03.2-ce。两者都没有帮助

我还禁用了firewalld,以确保它不会阻塞任何etcd流量。同样,这没有帮助(我也没有看到任何断开连接的证据)


我不知道如何深入挖掘kube apiserver无法创建其存储后端的原因。到目前为止,我的高可用性实验是失败的。

错误消息末尾的详细信息(
上下文截止日期已过期
),表明超时(Go’s用于处理超时)。但是,当我通过etcdctl直接访问etcd集群时,我没有看到任何缓慢,所以我设置了一个tcpdump捕获,看看它是否能告诉我更多关于kube apiserver和etcd之间发生的事情。我在端口2379上进行了筛选,该端口是etcd的客户端请求端口:

tcpdump -i any port 2379
起初我并没有看到任何活动,所以我通过etcdctl直接查询etcd来强制活动。这起作用了,它显示了到2379港的预期流量

在这一点上,我仍然被卡住了,因为kube apiserver似乎根本没有调用etcd。但随后tcpdump的输出中出现了一些神秘的条目:

18:04:30.912541 IP master0.34480 > unallocated.barefruit.co.uk.2379: Flags [S], seq 1974036339, win 29200, options [mss 1460,sackOK,TS val 4294906938 ecr 0,nop,wscale 7], length 0
18:04:32.902298 IP master0.34476 > unallocated.barefruit.co.uk.2379: Flags [S], seq 3960458101, win 29200, options [mss 1460,sackOK,TS val 4294908928 ecr 0,nop,wscale 7], length 0
18:04:32.910289 IP master0.34478 > unallocated.barefruit.co.uk.2379: Flags [S], seq 2100196833, win 29200, options [mss 1460,sackOK,TS val 4294908936 ecr 0,nop,wscale 7], length 0
什么是unallocated.barefruit.co.uk?为什么主节点上的进程试图向其发出etcd客户端请求

谷歌快速搜索发现unallocated.barefruit.co.uk是一个DNS“增强”服务,可以重定向错误的DNS查询

我的节点没有在DNS中注册,因为这只是一个实验集群。我在/etc/hosts中有它们的条目,但仅此而已。显然,kube apiserver中有东西试图解析我的etcd节点名(例如master0.localdomain),并在/etc/hosts之前查询DNS(我一直认为/etc/hosts优先)。我的ISP(Verizon FIOS)没有拒绝无效的名称,而是使用这种“增强”DNS服务,重定向到unallocated.barefruit.co.uk,令人惊讶的是,它没有为我运行etcd群集

我编辑了主节点上的网络配置以证明我的假设,添加了指向谷歌服务器8.8.8.8和8.8.4.4的显式DNS设置,这些服务器没有“增强”。然后我重新启动了,集群立即启动

那么从昨晚到今天到底发生了什么变化?我的实验集群在我的笔记本电脑上运行,昨天我在办公室工作(没有FIOS),而今天我在家工作(连接到FIOS)。啊。谢谢Verizon


我仍然不确定为什么kube apiserver似乎优先考虑DNS而不是/etc/hosts。但我想教训是,要么确保节点名称具有有效的DNS条目,要么通过IP地址指定所有内容。有人认为哪种做法是最佳做法吗?

我遇到了这个问题,通过删除主机操作系统上的/etc/kubernetes目录并重新安装k8s解决了这个问题。(使用Rancher)

要查看证书上的DNS条目,您可以使用:
openssl x509-in/etc/kubernetes/ssl/kube etcd-$IP.pem-noout-text | grep DNS
tcpdump -i any port 2379
18:04:30.912541 IP master0.34480 > unallocated.barefruit.co.uk.2379: Flags [S], seq 1974036339, win 29200, options [mss 1460,sackOK,TS val 4294906938 ecr 0,nop,wscale 7], length 0
18:04:32.902298 IP master0.34476 > unallocated.barefruit.co.uk.2379: Flags [S], seq 3960458101, win 29200, options [mss 1460,sackOK,TS val 4294908928 ecr 0,nop,wscale 7], length 0
18:04:32.910289 IP master0.34478 > unallocated.barefruit.co.uk.2379: Flags [S], seq 2100196833, win 29200, options [mss 1460,sackOK,TS val 4294908936 ecr 0,nop,wscale 7], length 0