Myuu’s Trashcan  

kubelet-resolv

systemd-resolvedを使わない場合のkubeletでのおまじない

KubernetesLinux

Create2024-04-28 11:58:53
Last Update2024-04-28 11:58:53


kubeletはホストのDNS情報を得るため,resolv.confを参照する.デフォルトでは,systemd-resolvedの生成するものを参照するが,これを使っていない場合,ファイルに到達できずpodが立ち上がらなくなる.

エラーとしては以下が発生.

"Failed to generate sandbox config for pod" err="open /run/systemd/resolve/resolv.conf: no such file or directory"

対処法として,/etc/resolv.confのsymlinkを/run/systemd/resolve/resolv.confに張る方法をよく見るが,リブートごとに張らなきゃいけない(/run以下はtmpfsなので消える)ので根本解決にはならない.

参照するresolv.confkubeletで設定される./var/lib/kubelet/config.yamlの以下の箇所.

resolvConf: /run/systemd/resolve/resolv.conf

これを変更することで参照先を変えることが可能.以下に変更する.

- resolvConf: /run/systemd/resolve/resolv.conf
+ resolvConf: /etc/resolv.conf

変更後はkubeletを再起動

sudo systemctl restart kubelet

これでリブート時に変更は維持される.ただし,k8sのバージョンアップデートを行うと消失するのでその際には再度変更の必要あり.