🐥

Vagrant+flannel環境でkubectl logs をするとエラーになる

2022/11/24に公開

エラー

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のサイト
https://github.com/flannel-io/flannel

公式サイトにまさにその対応方法が載っている
https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/

それでもうまくいかない場合

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