由于拨号 tcp 127.0.0.1:10248: connect: connection refused,Kubernetes kubeadm init 失败
Kubernetes kubeadm init fails due to dial tcp 127.0.0.1:10248: connect: connection refused
我正在尝试在 vSphere 私有云中设置一个非常简单的 2 节点 k8s 1.13.3 集群。虚拟机是 运行ning Ubuntu 18.04。出于测试目的,防火墙已关闭。但由于连接被拒绝,初始化失败。除了端口被阻止之外,还有其他可能导致此问题的原因吗?我是 k8s 的新手,正在努力解决所有这些问题。
我在 /etc/kubernetes/ 中放置了一个 vsphere.conf,如本要点所示。
https://gist.github.com/spstratis/0395073ac3ba6dc24349582b43894a77
我还创建了一个配置文件来指向我 运行 kubeadm init
的时间。这是它的内容示例。
https://gist.github.com/spstratis/086f08a1a4033138a0c42f80aef5ab40
当我运行
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 正在 运行ning。我暂时关闭了我的主 VM 上的防火墙以进行测试,以便我可以验证集群将 bootstrap 本身。
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
下面是一些额外的日志,显示与 https://192.168.0.12:6443/ 的连接被拒绝。所有这些似乎都导致 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
来初始化 master 的 kubelet,因为 - 正如您所经历的那样 - 它没有 api 服务器可以联系以生成其私钥和证书。第 22 条军规。我大约 80% 确定从 kubelet args 中删除 --bootstrap-kubeconfig
将有助于这种情况。我 期望 kubelet 已经在 /var/lib/kubelet/pki
中拥有它的密钥和证书,所以这也可能值得检查。
此外,假设您正在使用 /etc/kubernetes/manifests
目录来 运行 api 服务器和控制器管理器,请确保 /var/lib/kubelet/config.yaml
中的 staticPodPath:
指向正确的目录。这不太可能是问题所在,但检查起来非常便宜。
为了解决错误(dial tcp 127.0.0.1:10248: connect: connection refused.),运行 如下:
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo kubeadm reset
sudo kubeadm init
如果在配置工作节点时出现相同的错误,请使用相同的命令。
尝试将以下内容添加到 vi /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"] }
然后 systemctl 重启 docker。
此外,是的,/etc/docker 中的 daemon.json 将是您创建的新内容,默认情况下它不存在......:)
我正在尝试在 vSphere 私有云中设置一个非常简单的 2 节点 k8s 1.13.3 集群。虚拟机是 运行ning Ubuntu 18.04。出于测试目的,防火墙已关闭。但由于连接被拒绝,初始化失败。除了端口被阻止之外,还有其他可能导致此问题的原因吗?我是 k8s 的新手,正在努力解决所有这些问题。
我在 /etc/kubernetes/ 中放置了一个 vsphere.conf,如本要点所示。 https://gist.github.com/spstratis/0395073ac3ba6dc24349582b43894a77
我还创建了一个配置文件来指向我 运行 kubeadm init
的时间。这是它的内容示例。
https://gist.github.com/spstratis/086f08a1a4033138a0c42f80aef5ab40
当我运行
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 正在 运行ning。我暂时关闭了我的主 VM 上的防火墙以进行测试,以便我可以验证集群将 bootstrap 本身。
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
下面是一些额外的日志,显示与 https://192.168.0.12:6443/ 的连接被拒绝。所有这些似乎都导致 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
来初始化 master 的 kubelet,因为 - 正如您所经历的那样 - 它没有 api 服务器可以联系以生成其私钥和证书。第 22 条军规。我大约 80% 确定从 kubelet args 中删除 --bootstrap-kubeconfig
将有助于这种情况。我 期望 kubelet 已经在 /var/lib/kubelet/pki
中拥有它的密钥和证书,所以这也可能值得检查。
此外,假设您正在使用 /etc/kubernetes/manifests
目录来 运行 api 服务器和控制器管理器,请确保 /var/lib/kubelet/config.yaml
中的 staticPodPath:
指向正确的目录。这不太可能是问题所在,但检查起来非常便宜。
为了解决错误(dial tcp 127.0.0.1:10248: connect: connection refused.),运行 如下:
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo kubeadm reset
sudo kubeadm init
如果在配置工作节点时出现相同的错误,请使用相同的命令。
尝试将以下内容添加到 vi /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"] }
然后 systemctl 重启 docker。
此外,是的,/etc/docker 中的 daemon.json 将是您创建的新内容,默认情况下它不存在......:)