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.confはkubeletで設定される./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のバージョンアップデートを行うと消失するのでその際には再度変更の必要あり.