🐥
Vagrant+flannel環境でkubectl logs をするとエラーになる
エラー
kubectl logsとすると、以下のようなエラーが出てログが見れない。
Error from server (NotFound): the server could not find the requested resource
logsも見れない他、そもそもネットワークが正しく構成されていないため、ノード間で通信をすることが前提となっているコンテナはスタックしてしまう
原因
Vagrantの場合、eth0が外部接続のためのNatネットワーク、eth1をプライベートネットワークで構築していることが多いと思われる。
eth0には、固定で10.0.2.15/24が割り当てられており、このインターフェース同士での通信は想定されていない。
デフォでeth0に対し設定されるようで、eth1を明示的に指定してflannelを起動してあげる必要がある。
https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml のkube-flannelコンテナのargsに--iface=eth1
を追加してあげるとよい
containers:
- name: kube-flannel
#image: flannelcni/flannel:v0.20.1 for ppc64le and mips64le (dockerhub limitations may apply)
image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.1
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=eth1 # ←追加する
flannelのサイト
公式サイトにまさにその対応方法が載っている
それでもうまくいかない場合
kubeadmでクラスタ作成時の--apiserver-advertise-address
に指定しているIPをhostsに書きホスト名と一致させておく
kubeadm init --apiserver-advertise-address=192.168.56.120 --pod-network-cidr=10.244.0.0/16
このような感じ
[root@master ~]# cat /etc/hosts
# Loopback entries; do not change.
# For historical reasons, localhost precedes localhost.localdomain:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# See hosts(5) for proper format and other examples:
# 192.168.1.10 foo.mydomain.org foo
# 192.168.1.13 bar.mydomain.org bar
127.0.1.1 master master
192.168.56.120 master
192.168.56.121 node1
192.168.56.122 node2
192.168.56.123 node3
Discussion