我最近在VMware上安装了kubernetes,还配置了一些pod,在配置这些pod时,它会自动使用VMware的IP并进行配置。在此期间,我能够访问应用程序,但最近我重新启动了VM和托管VM的计算机,在此期间,我猜VM的IP发生了更改,现在,我在使用命令kubectl get pod -n <namspaceName>
时遇到以下错误:
userX@ubuntu:~$ kubectl get pod -n NameSpaceX
Unable to connect to the server: dial tcp 192.168.214.136:6443: connect: no route to host
userX@ubuntu:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Unable to connect to the server: dial tcp 192.168.214.136:6443: connect: no route to host
kubectl cluster-info
以及其他相关命令会给出相同的输出。在VMware Workstation设置中,我们使用的是共享主机IP地址设置的网络适配器。我们不确定它是否会产生任何影响。
我们还尝试在/etc/hosts中添加以下条目,但它不起作用。
127.0.0.1 localhost \n
192.168.214.136 localhost \n
127.0.1.1 ubuntu
我希望再次运行pod以访问应用程序。而不是重新安装所有pod,这是耗时的-我们正在寻找快速的变通办法,使pod将回到运行状态。
9条答案
按热度按时间lpwwtiir1#
如果你使用minikube有时你需要的只是重新启动minikube。
运行:
minikube start
ykejflvf2#
我 遇到 了 同样 的 问题 - 问题 是 主 节点 没有 将 端口 6443 暴露 在 外部 。
下面 是 我 修复 它 的 步骤 。
这 可以 通过
.kube/config
文件 ( 在 * server * 字段 下 ) 或 使用 以下 命令 进行 验证 :kubectl describe pod/kube-apiserver-<master-node-name> -n kube-system
.curl https://<kube-apiserver-IP>:6443
, 查看 端口6443
是否 打开 。6443
, 则 应 获得 与 证书 相关 的 内容 , 如 :中 的 每 一 个
6443
未 打开 :4.A ) 通过 SSH 连接 到 主 节点 。
4.B ) 运行
sudo firewall-cmd --add-port=6443/tcp --permanent
( 我 假设 已经 安装 了firewalld
) 。4.C ) 执行
sudo firewall-cmd --reload
。4.D ) 运行
sudo firewall-cmd --list-all
, 您 应该 看到 端口 6443 已 更新 :格式
eivnm1vs3#
通常 的 做法 是 将 配置 文件 复制 到 主 目录
中 的 每 一 个
此外 , 请 确保 api-server 地址 有效 。
格式
如果 没有 , 您 可以 使用 任何 文本 编辑 器 手动 编辑 它 。
brqmpdu14#
在运行kubectl命令之前,需要将admin.conf文件导出为kubeconfig。
在这之后,你应该能够运行kubectl命令。我希望你的K8S集群的设置是正确的。
yh2wf1be5#
昨天晚上,我在使用这个puppet模块安装Kubernetes时遇到了完全相同的错误:https://forge.puppet.com/puppetlabs/kubernetes
原来是主服务器中的iptables设置不正确,导致所有非本地请求都被阻止发送到api。
我的解决方法(蛮力解决方案)是
1.完全删除所有已安装的k8s相关软件(以及所有配置文件、etcd数据、docker映像、已安装的tmpfs文件系统等)
1.彻底清除iptables
1.重新安装
这就是解决我案例中问题的方法。
可能有一个更好更干净的方法来做到这一点(即简单地更改iptables规则以允许访问)。
rwqw0loc6#
如果 你 得到 下面 的 错误 , 那么 你 也 检查 一 次 令牌 的 有效 性 。
中 的 每 一 个
使用 命令
kubeadm token list
检查 令牌 有效 性 。 如果 令牌 已 过期 , 则 必须 使用kubeadm reset
重置 群集 , 然后 使用 命令kubeadm init --token-ttl 0
再次 初始 化 。然后 再次 使用
kubeadm token list
检查 令牌 的 状态 。 注意 , 此处 TTL 值 将 为<forever>
, Expire 值 将 为<never>
。范例 : -
格式
kq4fsx7k7#
Ubuntu 22.04 LTS截图
选择docker-desktop并再次运行命令,例如
kubectl apply -f <myimage.yaml>
qxgroojn8#
运行minikube start命令这背后的原因是当您关闭系统时,带有驱动程序停靠器的minikube群集停止
w9apscun9#
对于所有尝试在Oracle VM上使用Ubuntu学习和体验Kubernetes的用户:
IP地址是根据网络适配器选择分配给访客OS/VM的。根据您的网络适配器选择,您需要配置Oracle VM网络部分中的设置或路由器设置。
有关最常用的Oracle VM网络适配器,请参见链接。
https://www.nakivo.com/blog/virtualbox-network-setting-guide/
我使用的是桥适配器,它将VM和主机OS并行。所以我的路由器在每次重新启动后随机分配IP给我的VM,我的集群停止工作,并得到问题中发布的相同错误信息。
在路由器设置中为我的VM保留静态IP地址后,群集再次开始工作。(如果您正在使用NAT适配器,则应在VM网络设置中进行配置)
为VM保留IP地址时,请确保分配的IP地址与配置Kubelet时使用的IP地址相同。