-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
eliminate kubelet crashloop 🙃 #2072
eliminate kubelet crashloop 🙃 #2072
Conversation
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: BenTheElder The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/hold
|
The expectation was for kubeadm to start kubelet (it appears to be capable of it) such that kubelet is not started by systemd if the config doesn't exist (it will on restart). Seems that doesn't work. |
I can't understand it, indeed kubeadm starts the kubelet and it seems the file should be there
|
for reading some systemd docs, ConditionPathExists is not executed periodically it's just a check when the service file is read. i think the right way to do this is with a but as the above thread mentions, "service stop if a file is missing", is a missing feature in systemd and it requires 2 more files. the last idea was to install the service disabled and make kubeadm init/join enable it and kubeadm reset disable it. |
I think the last choice makes the most sense because then we can just have the people actually maintaining this (e.g. kubeadm leads) own it. Previously they were under build/ which could be OK but mostly made sense because the deb/rpm specs were there. I think they should be somewhere discoverable for people not using the packaging, as a reference. E.g. in containerd they are in the repo root so easy to find. KIND will likely still have to ship our own because of older k8s branches we can't cherry pick this to anymore, and realistically upstream projects won't switch but I want to fix the packaging situation and the lack of easily discoverable reference unit file. |
I'll hack more on this later today (and the packaging fix). |
i think both the service files and DEB/RPM specs should be versioned with a k8s release, so it makes sense to have them in k/k or where the component source is. |
Hmm the specs were basically like this but they were intentionally removed. I'll dig into that. I think maybe it was that the in-tree ones were only wrapped with bazel and the script for the actual builds was in k/release so they went with the script. Doing that makes sense to me, I think we should wholesale move the deb/rpm specs back to k/k and just have them per-release that way. |
I had totally forgotten kubernetes/release#1352 which is literally the same solution.
I think the latter point is actually solvable for non-kubeadm users by:
Which just leaves the versioning issue: kubernetes/release#1913 |
7721eb2
to
aff0940
Compare
testing with just the ConditionPathExist now, will test the rest next (would like to see the results of both concretely, relying on CI to see impact across versions more quickly). |
there is substantial debate about the state of upstream packaging, when there's a path forward for that I will attempt to port this upstream, but in the meantime we see a substantial amount of user confusion from the panics, so I'm going to go ahead with fixing things here. longterm I'd like to not be forking the systemd service, as a matter of OSS principle, and to ensure packaged kubeadm users get this fix. it's extremely easy to maintain in the meantime. |
/lgtm |
/hold cancel |
/retest |
No description provided.