17

I'm running Kubernetes in virtual machines and going through the basic tutorials, currently Add logging and metrics to the PHP / Redis Guestbook example. I'm trying to install kube-state-metrics:

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

but it fails.

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 refused

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

I0514 17:29:26.980707 1 main.go:85] Using default collectors
I0514 17:29:26.980774 1 main.go:93] Using all namespace
I0514 17:29:26.980780 1 main.go:129] metric white-blacklisting: blacklisting the following items:
W0514 17:29:26.980800 1 client_config.go:549] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.
I0514 17:29:26.983504 1 main.go:169] Testing communication with server
F0514 17:29:56.984025 1 main.go:137] Failed to create client: ERROR communicating with apiserver: Get https://10.96.0.1:443/version?timeout=32s: dial tcp 10.96.0.1:443: i/o timeout

I'm unsure if this 10.96.0.1 IP is correct. My virtual machines are in a bridged network 10.10.10.0/24 and a host-only network 192.168.59.0/24. When initializing Kubernetes I used the argument --pod-network-cidr=192.168.0.0/16 so that's one more IP range that I'd expect. But 10.96.0.1 looks unfamiliar.

I'm new to Kubernetes, just doing the basic tutorials, so I don't know what to do now. How to fix it or investigate further?


EDIT - additonal info:

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

The command I used to initialize the cluster:

sudo kubeadm init --apiserver-advertise-address=192.168.59.20 --pod-network-cidr=192.168.0.0/16
Rafał G.
  • 1,529
  • 22
  • 35
  • 1
    please provide results of `kubectl get nodes -o wide` Are you using virtualbox, if yes is it bridged or host adapter mode? Did you use `--apiserver-advertise-address=` flag on kubeadm init? I will try to recreate as with 2 ubuntu machines and kubeadm I was able to run this and it works well. – aurelius May 15 '19 at 16:15
  • @aurelius I've added more details above, and to answer your questions: in Virtualbox I'm using both a bridged network (for internet access) and a host adapter network (because some tutorial said the nodes should be in such a network when experimenting in Virtualbox). I used --apiserver-advertise-address, more info in the post. – Rafał G. May 15 '19 at 16:46
  • I've also just tried creating a cluster with NAT networking instead of a bridge (with no changes in the host-only network except for a fresh subnet). The results were the same. – Rafał G. May 15 '19 at 20:49
  • Hi Rafał, if this solves the problem please accept the answer. If you have more questions related to the case feel free to ask. – aurelius Jun 13 '19 at 17:31
  • 1
    @aurelius Will do, I'm looking forward to trying your solution, I just need to find some time to try it out. – Rafał G. Jun 13 '19 at 18:31

1 Answers1

1

The reason for this is probably overlapping of Pod network with Node network - you set Pod network CIDR to 192.168.0.0/16 which your host-only network will be included into as its address is 192.168.59.0/24.

To solve this you can either change the pod network CIDR to 192.168.0.0/24 (it is not recommended as this will give you only 255 addresses for your pod networking)

You can also use different range for your Calico. If you want to do it on a running cluster here is an instruction.

Also other way I tried:

edit Calico manifest to different range (for example 10.0.0.0/8) - sudo kubeadm init --apiserver-advertise-address=192.168.59.20 --pod-network-cidr=10.0.0.0/8) and apply it after the init.

Another way would be using different CNI like Flannel (which uses 10.244.0.0/16).

You can find more information about ranges of CNI plugins here.

aurelius
  • 3,433
  • 1
  • 13
  • 22
  • 1
    This worked, thank you! For simplicity I used 192.168.0.0/24. I can set up something better later, the most important thing is that it worked and the problem must have been the IP range overlap. – Rafał G. Jun 16 '19 at 17:41