【问题标题】:Kube-state-metrics error: Failed to create client: ... i/o timeoutKube-state-metrics 错误:无法创建客户端:... i/o 超时
【发布时间】:2019-05-14 17:47:10
【问题描述】:

我正在虚拟机中运行 Kubernetes 并学习基本教程,目前是Add logging and metrics to the PHP / Redis Guestbook example。我正在尝试安装 kube-state-metrics:

git clone https://github.com/kubernetes/kube-state-metrics.git kube-state-metrics
kubectl create -f kube-state-metrics/kubernetes

但它失败了。

kubectl describe pod --namespace kube-system kube-state-metrics-7d84474f4d-d5dg7

...

Warning Unhealthy 28m (x8 over 30m) kubelet, kubernetes-node1 Readiness probe failed: Get http://192.168.129.102:8080/healthz: dial tcp 192.168.129.102:8080: connect: connection denied

kubectl logs --namespace kube-system kube-state-metrics-7d84474f4d-d5dg7 -c kube-state-metrics

I0514 17:29:26.980707 1 main.go:85] 使用默认收集器
I0514 17:29:26.980774 1 main.go:93] 使用所有命名空间
I0514 17:29:26.980780 1 main.go:129] metric white-blacklisting:将以下项目列入黑名单:
W0514 17:29:26.980800 1 client_config.go:549] 既没有指定 --kubeconfig 也没有指定 --master。使用 inClusterConfig。这可能行不通。
I0514 17:29:26.983504 1 main.go:169] 测试与服务器的通信
F0514 17:29:56.984025 1 main.go:137] 无法创建客户端:与 apiserver 通信时出错:获取https://10.96.0.1:443/version?timeout=32s:拨打 tcp 10.96.0.1:443:i/o 超时

我不确定这个 10.96.0.1 IP 是否正确。我的虚拟机位于桥接网络 10.10.10.0/24 和仅主机网络 192.168.59.0/24 中。在初始化 Kubernetes 时,我使用了参数 --pod-network-cidr=192.168.0.0/16,所以这是我期望的另一个 IP 范围。但是 10.96.0.1 看起来很陌生。

我是 Kubernetes 新手,只是在做基础教程,所以我现在不知道该做什么。如何修复或进一步调查?


编辑 - 附加信息:

kubectl get nodes -o wide

NAME                STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
kubernetes-master   Ready    master   15d   v1.14.1   10.10.10.11   <none>        Ubuntu 18.04.2 LTS   4.15.0-48-generic   docker://18.9.2
kubernetes-node1    Ready    <none>   15d   v1.14.1   10.10.10.5    <none>        Ubuntu 18.04.2 LTS   4.15.0-48-generic   docker://18.9.2
kubernetes-node2    Ready    <none>   15d   v1.14.1   10.10.10.98   <none>        Ubuntu 18.04.2 LTS   4.15.0-48-generic   docker://18.9.2

我用来初始化集群的命令:

sudo kubeadm init --apiserver-advertise-address=192.168.59.20 --pod-network-cidr=192.168.0.0/16

【问题讨论】:

  • 请提供kubectl get nodes -o wide的结果您是否使用virtualbox,如果是,是桥接模式还是主机适配器模式?您是否在 kubeadm init 上使用了 --apiserver-advertise-address= 标志?我将尝试使用 2 台 ubuntu 机器和 kubeadm 重新创建我能够运行它并且它运行良好。
  • @aurelius 我在上面添加了更多详细信息,并回答您的问题:在 Virtualbox 中,我同时使用桥接网络(用于互联网访问)和主机适配器网络(因为一些教程说在 Virtualbox 中进行实验时,节点应该在这样的网络中)。我使用了--apiserver-advertise-address,更多信息在帖子中。
  • 我也刚刚尝试使用 NAT 网络而不是网桥创建集群(除了新子网之外,仅主机网络没有任何变化)。结果是一样的。
  • 嗨 Rafał,如果这解决了问题,请接受答案。如果您有更多与案例相关的问题,请随时提问。
  • @aurelius 会的,我期待着尝试您的解决方案,我只需要找点时间尝试一下。

标签: kubernetes kube-state-metrics


【解决方案1】:

原因可能是 Pod 网络与 Node 网络重叠 - 您将 Pod 网络 CIDR 设置为 192.168.0.0/16,因为它的地址是 192.168.59.0/24,所以您的仅主机网络将包含在其中。

要解决此问题,您可以将 pod 网络 CIDR 更改为 192.168.0.0/24(不建议这样做,因为这只会为您的 pod 网络提供 255 个地址

您还可以为 Calico 使用不同的范围。如果您想在正在运行的集群上执行此操作,请使用instruction

我也尝试过其他方法:

编辑 Calico manifest 到不同的范围(例如 10.0.0.0/8) - sudo kubeadm init --apiserver-advertise-address=192.168.59.20 --pod-network-cidr=10.0.0.0/8) 并在初始化后应用它。

另一种方法是使用不同的 CNI,例如 Flannel(使用 10.244.0.0/16)。

您可以找到有关 CNI 插件范围here 的更多信息。

【讨论】:

  • 这行得通,谢谢!为简单起见,我使用了 192.168.0.0/24。我以后可以设置更好的东西,最重要的是它可以工作,问题一定是IP范围重叠。
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多