近くに取るなら /etc/kubernetes/minifests.bak
とか /etc/kubernetes.bak
みたいに取りましょう。
kubeadm で作った control plane では、/etc/kubernetes/manifests
に kube-apiserver 等のマニフェストが置かれていて、kubelet 起動時にそれを読むようになってる (static Pod)。
このファイル何らかの理由で編集する事になったとき (kubeadm の再設定 とか)に、同じディレクトリにバックアップファイルを置くとそのバックアップファイルまで kubelet が読んでしまう。
その結果新しい変更が何故か反映されない。死。となる。
理由はわりと単純で、ただ単に拡張子を見てないから:
pkg/kubelet/config/file.gokubernetes/file.go
func (s *sourceFile) extractFromDir(name string) ([]*v1.Pod, error) {
dirents, err := filepath.Glob(filepath.Join(name, "[^.]*"))
if err != nil {
return nil, fmt.Errorf("glob failed: %v", err)
}
...
staticPod の初期化まわりの実装をざっと追っただけなのと、updates
channel に渡された先の実装は見てない。ので嘘を書いてる可能性はある。
なんでこんな事を書いてるかというと、https://kodekloud.com/topic/kubernetes-challenge-2/ で遊んでいたときに kube-apiserver が動いてないのを回復する問題があって、設定変えたのに全然設定反映されないじゃんって形で嵌まったからなのでした。