由于拨号tcp 127.0.0.1:10248:连接:连接被拒绝,Kubernetes kubeadm init失败

由于拨号tcp 127.0.0.1:10248:连接:连接被拒绝,Kubernetes kubeadm init失败,kubernetes,vsphere,kubeadm,Kubernetes,Vsphere,Kubeadm,我试图在vSphere私有云中设置一个非常简单的2节点K8S1.13.3集群。虚拟机运行的是Ubuntu 18.04。出于测试目的,防火墙已关闭。但是,由于连接被拒绝,初始化失败。除了端口被阻塞之外,是否还有其他原因导致此问题?我是k8s的新手,我正试着把所有这些都记在心里 我在/etc/kubernetes/中放置了一个vsphere.conf,如本文所示。 我还创建了一个配置文件,在运行kubeadm init时指向该文件。下面是它的内容示例。 当我跑的时候 sudo kubeadm i

我试图在vSphere私有云中设置一个非常简单的2节点K8S1.13.3集群。虚拟机运行的是Ubuntu 18.04。出于测试目的,防火墙已关闭。但是,由于连接被拒绝,初始化失败。除了端口被阻塞之外,是否还有其他原因导致此问题?我是k8s的新手,我正试着把所有这些都记在心里

我在/etc/kubernetes/中放置了一个vsphere.conf,如本文所示。

我还创建了一个配置文件,在运行
kubeadm init
时指向该文件。下面是它的内容示例。

当我跑的时候
sudo kubeadm init--config/etc/kubernetes/kubeadminitmaster.yaml
它超时并出现以下错误

[kubelet-check] Initial timeout of 40s passed.
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.
检查
sudo systemctl status kubelet
显示kubelet正在运行。我已经关闭了主虚拟机上的防火墙,以便测试pupose,以便验证集群是否会自动引导

   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Sat 2019-02-16 18:09:58 UTC; 24s ago
     Docs: https://kubernetes.io/docs/home/
 Main PID: 16471 (kubelet)
    Tasks: 18 (limit: 4704)
   CGroup: /system.slice/kubelet.service
           └─16471 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cloud-config=/etc/kubernetes/vsphere.conf --cloud-provider=vsphere --cgroup-driver=systemd --network-plugin=cni --pod-i
下面是一些额外的日志,显示到的连接被拒绝。所有这些似乎都导致kubelet失败,并阻止init进程完成

    Feb 16 18:10:22 k8s-master-1 kubelet[16471]: E0216 18:10:22.633721   16471 kubelet.go:2266] node "k8s-master-1" not found
    Feb 16 18:10:22 k8s-master-1 kubelet[16471]: E0216 18:10:22.668213   16471 reflector.go:134] k8s.io/kubernetes/pkg/kubelet/kubelet.go:453: Failed to list *v1.Node: Get https://192.168.0.12:6443/api/v1/nodes?fieldSelector=metadata.name%3Dk8s-master-1&limit=500&resourceVersion=0: dial tcp 192.168.0.1
Feb 16 18:10:22 k8s-master-1 kubelet[16471]: E0216 18:10:22.669283   16471 reflector.go:134] k8s.io/kubernetes/pkg/kubelet/kubelet.go:444: Failed to list *v1.Service: Get https://192.168.0.12:6443/api/v1/services?limit=500&resourceVersion=0: dial tcp 192.168.0.12:6443: connect: connection refused
    Feb 16 18:10:22 k8s-master-1 kubelet[16471]: E0216 18:10:22.670479   16471 reflector.go:134] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:47: Failed to list *v1.Pod: Get https://192.168.0.12:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dk8s-master-1&limit=500&resourceVersion=0: dial tcp 192.1
    Feb 16 18:10:22 k8s-master-1 kubelet[16471]: E0216 18:10:22.734005   16471 kubelet.go:2266] node "k8s-master-1" not found

您不能使用
bootstrap kubeconfig
初始化主机的kubelet,因为正如您所经历的那样,它没有api服务器可以联系以生成其私钥和证书。第二十二条军规。我大约80%确信,从kubelet参数中删除
--bootstrap kubeconfig
将有助于这种情况。我希望kubelet已经在
/var/lib/kubelet/pki
中有了它的密钥和证书,所以这也值得检查


另外,假设您正在使用
/etc/kubernetes/manifests
目录运行apiserver和controllermanager,请确保在
/var/lib/kubelet/config.yaml
中指向正确的目录。这不太可能是问题所在,但检查起来非常便宜。

感谢您的回答,我已验证kubelet的证书和密钥实际上在PKI文件夹中。老实说,我不知道你说我不能使用bootstrap kubeconfig是什么意思。此时,我所做的就是将我提到的配置文件放在它们的文件夹中,并在主机上运行kubeadm init命令。在那之前我还有什么要做的吗?我对k8s真的很陌生,并遵循了一个指南。接下来,我还检查了
/var/lib/kubelet/config.yaml
,发现它不包含
staticPodPath
属性。为什么我不能使用引导kubeconfig,因为该机制是为(加或减)裸机部署而设计的,例如,在AWS中使用自动缩放组(或其GCP等价物)——只需使用
kubelet
kubeadm
二进制文件,您就可以获取一台空机器并让它加入集群,方法是联系API获取集群配置,然后使用引导令牌进行足够长的身份验证,以从API请求证书对。这就是“bootstrap kubeconfig”部分:使用令牌进行身份验证,然后从中生成真正的
kubelet.conf
。但是,没有API服务器,没有引导进程,所以我应该从init命令中删除
--config/etc/kubernetes/kubeadminitmaster.yaml
?看起来kubelet无法启动它需要的任何容器。