systemd-resolvedを使わない場合のkubeletでのおまじない
KubernetesLinux
Create | 2024-04-28 11:58:53 |
Last Update | 2024-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.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のバージョンアップデートを行うと消失するのでその際には再度変更の必要あり.