Skip to content
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

k0s uninstall still required #2399

Open
matti opened this issue Nov 12, 2022 · 16 comments · May be fixed by k0sproject/get#16
Open

k0s uninstall still required #2399

matti opened this issue Nov 12, 2022 · 16 comments · May be fixed by k0sproject/get#16
Labels
enhancement New feature or request

Comments

@matti
Copy link

matti commented Nov 12, 2022

Is your feature request related to a problem? Please describe.

curl -sfL https://get.k3s.io | sh -

adds k3s-uninstall.sh

curl -sSLf https://get.k0s.sh | sh

only "adds" k0s reset which doesn't remove the binary.

As a user I can not know what else is left behind.

Describe the solution you would like

Please provide k0s uninstall for a complete uninstall

Describe alternatives you've considered

No response

Additional context

No response

@matti matti added the enhancement New feature or request label Nov 12, 2022
@matti
Copy link
Author

matti commented Nov 12, 2022

#1250
#519
#653

@jnummelin
Copy link
Member

So essentially you'd expect that k0s reset would also remove the k0s binary too?

@matti
Copy link
Author

matti commented Nov 14, 2022

or k0s uninstall

@kke
Copy link
Contributor

kke commented Nov 14, 2022

The difference is that get.k0s.sh is not the actual installer, it's just a download script for the current arch+os binary that you might use as an installer or for runring k0s without installing. Maybe it shouldn't put it into /usr/local/bin in the first place.

I would actually prefer removing k0s install completely because it's weird. #770 (comment)

@matti
Copy link
Author

matti commented Nov 14, 2022

sounds like we dont get this done this time either. this is the third issue on the subject. it always sidetracks.

@matti
Copy link
Author

matti commented Nov 15, 2022

like this is obvious to the almighty k0s team that "its just a single binary"

but when a user runs a script snippet which does something it is not obvious what gets written and where.

providing k0s uninstall would be a statement from the almighty k0s team that "whatever we decide to write in your filesystem, running this will now AND in future remove"

please don't sidetrack this issue again in diskutering klubben, but actually implement this promise.

@jakolehm
Copy link
Contributor

Maybe workaround is something like k0s reset && rm $(which k0s)...

@kke
Copy link
Contributor

kke commented Nov 15, 2022

Logically k0s uninstall should undo what k0s install did.

I made a PR for the get-script that creates an uninstaller that looks like:

#!/bin/sh
rm -f /usr/local/bin/k0s $0

The installer then says:

$ cat get.k0s.sh | sudo sh
Downloading k0s from URL: https://github.com/k0sproject/k0s/releases/download/v1.25.3+k0s.0/k0s-v1.25.3+k0s.0-amd64
k0s is now executable in /usr/local/bin
- to remove k0s, run /usr/local/bin/remove-k0s.sh

Feels a bit silly as it could just say to remove k0s run rm /usr/local/bin/k0s instead of creating that script. Of course it could do something more in a future scenario where get.k0s.sh does something else that needs undoing.

Maybe it should check if k0s is running and refuse to remove in that case. It's already starting to make sense! :)

@twz123
Copy link
Member

twz123 commented Nov 15, 2022

This is a bit repetitive, but it still remains valid: The get.k0s.sh script is just a glorious curl wrapper for a single binary download. Everything else (installation / reset) is done by k0s itself. They are completely separated from each other. This is very different from get.k3s.io, which really does install stuff and is way more complex:

$ curl -sSLf https://get.k0s.sh | wc
     57     121    1140

$ curl -sSLf https://get.k3s.io | wc
    930    3269   27922

What would be the user expectation around a remove script? Probably "wipe k0s from the machine, no traces left behind". Well, that is not so easy, since this would require some sort of integration between k0s install and the remove script. The current proposal is simply undoing what get.k0s.sh did. But: If the user installed k0s via k0s install (something that get.k0s.sh doesn't do), the remove script will leave a broken installation behind, which is surely not a good thing. A more sophisticated remove script could try to detect if k0s has been installed and remove (a.k.a reset) it accordingly, but in order to do this, it needs to know the k0s data directory that has been used during k0s install. Just assuming the default would probably not be a good idea either.

I'm kinda opposed to add it in the currently proposed way. It will just add up to the whole confusion.

Moreover, I don't think this discussion sidetracked. Thing is that uninstallation just doesn't fit into the scope of get.k0s.sh, since it doesn't do the install in the first place. It just "get"s the binary. If folks are concerned about the things that get.k0s.sh does, I'd probably just give the advice to use curl directly, so they are in full control of what happens.

@mikhail-sakhnov
Copy link
Contributor

Recently I have been in touch with people from confidential containers and having k0s uninstall service would help them to support k0s out of the box during the installation process or at least way to find proper service to modify it manually.
And it kinda makes sense to me, we already have logic to find a service file and detect init system, why not to reuse it.

@kke
Copy link
Contributor

kke commented Nov 17, 2022

Moreover, I don't think this discussion sidetracked. Thing is that uninstallation just doesn't fit into the scope of get.k0s.sh, since it doesn't do the install in the first place.

Maybe it shouldn't install it into /usr/local/bin because that is kind of "installing".

It could output the payload to stdout for redirecting:

$ curl get.k0s.sh | sh 
Error: stdout is a terminal, you don't want to see all that garbage on screen. Use redirect / pipe.
$ curl get.k0s.sh | sh > k0s
Downloading from foofoo.....
$ chmod +x k0s
$ ./k0s version
v1234567.8.9+k0s.0

It could write it to a specified path:

$ curl get.k0s.sh | sh -- -o /tmp/k0s
Downloading from foofoo to /tmp/k0s .....
Checking /tmp/k0s ....
Success, k0s is now executable in /tmp/k0s

It could copy the bin to default location and run k0s install or maybe run a worker?:

$ curl get.k0s.sh | sh -- install controller --single --data-dir /tmp --enable-cloud-provider
Downloading from foofoo to /usr/local/bin/k0s .....
Checking /usr/local/bin/k0s ....
Success, k0s is now executable in /usr/local/bin/k0s
Running k0s install controller --single --data-dir /tmp --enable-cloud-provider ...

$ curl get.k0s.sh | sh -- worker # invent some clever way to pass token
...
Running k0s worker ...

k0s reset could by default rm self, you could use k0s reset --no-delete to keep the bin. Or there could be a separate k0s reset and k0s uninstall, the latter would be rm self with a check for need for reset.

@jnummelin
Copy link
Member

I'd propose something like k0s reset --remove so when reset runs the last step would be rm self

@tgruenert
Copy link

if this will be implemented one day - please don´t forget /opt/cni/ if this was also installed by k0s

@jnummelin
Copy link
Member

please don´t forget /opt/cni/ if this was also installed by k0s

Created separate issue for that, see #2852 .

@hwinkel
Copy link

hwinkel commented Feb 25, 2024

any progress vor cleanup? BTW will the systemd unit removed as well?

And very often I get a message that k0s reset can not talk to the socket

@twz123
Copy link
Member

twz123 commented Mar 14, 2024

BTW will the systemd unit removed as well?

k0s reset will remove that as well.

And very often I get a message that k0s reset can not talk to the socket

@hwinkel would you mind filing a separate issue for this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants