Configure some level of self-healing for core components
Ideally the kube-apiserver will have some sort of watch-dog/babysitter that keeps it running. I see a few options:
A. Run under fleet
Submit kube-apiserver.service to fleet per normal, ensuring that only a single instance is running at a time in the cluster
Pros: fleet will restart/reschedule if process or host dies. can co-schedule helper processes (e.g., DNS registration).
Cons: kubelet depends on kube-apiserver address, so I'm unsure of implications of delaying kube-apiserver startup till fleet
B. Run under kubelet
Place manifest for pod in directory watched by kubelet --config /etc/kubernetes/manifests (e.g., /etc/kubernetes/manifests/kube-apiserver.yaml)
Pros: apiserver will be visible as a kubernetes component (stats, logs, etc)
Cons: requires hand-picking one host to be special, either via
- distinct user data for
kube-apiserverhost, or - single-instance provisioning after boot, by placing the manifest on the chosen host