Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save buzztaiki/1d6028cd324864c1d428f28d4136aa64 to your computer and use it in GitHub Desktop.
Save buzztaiki/1d6028cd324864c1d428f28d4136aa64 to your computer and use it in GitHub Desktop.
Kubernetes の /etc/kubernetes/manifests にバックアップファイルを置いてはいけない

Kubernetes の /etc/kubernetes/manifests にバックアップファイルを置いてはいけない

近くに取るなら /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 が動いてないのを回復する問題があって、設定変えたのに全然設定反映されないじゃんって形で嵌まったからなのでした。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment