I’m thinking about starting a self hosting setup, and my first thought was to install k8s (k3s probably) and containerise everything.

But I see most people on here seem to recommend virtualizing everything with proxmox.

What are the benefits of using VMs/proxmox over containers/k8s?

Or really I’m more interested in the reverse, are there reasons not to just run everything with k8s as the base layer? Since it’s more relevant to my actual job, I’d lean towards ramping up on k8s unless there’s a compelling reason not to.

  • Hizeh@hizeh.com
    link
    fedilink
    English
    arrow-up
    19
    ·
    1 year ago

    I think it depends on your scale. If homelab stuff docker is awesome IMO.

  • donalonzo@lemmy.world
    link
    fedilink
    English
    arrow-up
    13
    ·
    edit-2
    1 year ago

    VMs are often imperative and can be quite easy and familiar to setup for most people, but can be harder or more time-consuming to reproduce, depending on the type of update or error to be fixed. They have their own kernel and can have window managers and graphical interfaces, and can therefore also be a bit resource heavy.

    Containers are declarative and are quite easy to reproduce, but can be harder to setup, as you’ll have to work by trial-and-error from the CLI. They also run on your computers kernel and can be extremely slimmed down.

    They are both powerful, depends how you want to maintain and interface with them, how resource efficient you want them to be, and how much you’re willing to learn if necessary.

    • Spiritreader@kbin.social
      link
      fedilink
      arrow-up
      9
      ·
      1 year ago

      That sums it up really well.

      I generally tend to try to use containers for everything and only branch out to VMs if it doesn’t work or I need more separation.

      This is my general recommendation as containers are easier to set up and in my opinion individual software packages are easier to maintain with things like compose. I have limited time for my self hosted instance and that took away a lot of work, especially when updating.

    • Spiritreader@kbin.social
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      That sums it up really well.

      I generally tend to try to use containers for everything and only branch out to VMs if it doesn’t work or I need more separation.

      This is my general recommendation as containers are easier to set up and in my opinion individual software packages are easier to maintain with things like compose. I have limited time for my self hosted instance and that took away a lot of work, especially when updating.

  • Zardoz@lemmy.world
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

    Not a proxmox pro by any means, but it can do both VMs and containers. I have a few VMs for various Linux distros to play around with. I also have one dedicated VM for all my security related tools.

    Stuff like PI hole, jellyfin, logstash, etc. dont really have any need for a full OS, so a container works perfectly. Plus having a full OS with several things running on it makes it more difficult if you just need to restart one service

    I started doing everything in VMs but over time realized some things were better to maintain as containers

  • Max_Power@feddit.de
    link
    fedilink
    English
    arrow-up
    10
    ·
    1 year ago

    It depends on your use case and what you are trying to achieve.

    You do not need k8s (or k3s…) to use containers though. Plain old containers could also suffice, or Docker Swarm if you need some container orchestration functionality.

    Trying to learn k8s would be a good reason to use k8s though :)

    • makingrain@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      I am with you. So easy to use. I have Dietpi running as lightweight OS on my VMs for when i don’t want LXCs.

  • fhqwgads@possumpat.io
    link
    fedilink
    English
    arrow-up
    4
    arrow-down
    1
    ·
    1 year ago

    Basically, it’s “why not both?”

    So first, kubernetes is a different ball of wax than containers, and if you want to run it on one machine you can, but it’s really for running containers across a cluster of machines. I’m guessing you just generally mean containers so I’ll go with that.

    Containers are essentially just apps running on a virtual os. Virtual machines are an OS running on virtual hardware. You can abstract both layers and have virtual hardware running an os that runs a virtual os for your containers, and nothing will really mind - in fact that’s kind of the way to do it if you have one big machine you need to run a bunch of services on. You might cut up a server into a Linux VM, a Windows VM, and a BSD VM, and run containers on each one. Or you might run 3 Linux VMs and have the containers for 3 different services split between them.

    It really depends on what you’re hosting and trying to do for how exactly to go about it. Take for instance a pretty common self hosted stack:

    Plex Radarr Prowlarr Deluge TrueNAS

    Now you could install TrueNAS scale and run all of those as containers on it, and it would work ok, but TrueNAS scale isn’t really meant for managing a ton of containers right now. You could make a vm on it for each service and have them all talk to each other but then you’re probably wasting resources by duplicating the OS 5 times. Also, what if you want to run TrueNAS core instead of scale? Can you get everything else working in jails – maybe? – but it’ll probably be a pain.

    Instead, you might install proxmox and pass through the drive controller, and set up one VM for TrueNAS core. Then you might make another VM for the arrs containers, and a third for Plex itself.

    It gets you the best of both worlds. TrueNAS can run on BSD instead of Linux, your arrs are easy to deploy and update in containers that keep everything separated, and Plex is sequestered in a hardened os with read only access to everything else since it gets a port forwarded and is more of a security risk. Again that’s just one option though.

    VMs get you a ton of really handy things like snapshots and for simple VMs, very easy portability between relatively similar hardware. I’ll probably get ruined for saying this but they’re also a security tool that you should probably keep in your belt. If someone manages to break out of a container and your files are just sitting there for the taking that’s not great. If someone manages to break into your VM and “the good stuff” is on another VM that’s another layer of security they have to break through.

    Containers on the other hand use way fewer resources, especially ram - and are much easier to wrangle than many OSes for updates and config.

    There’s really a lot of self hosted stuff that assumes you’re running docker and treats regular install as a kind of weird edge case, so you’ll probably run docker even if you don’t want to.

    Kubernetes on the other hand I would argue isn’t really meant for self hosting where you probably have a one or two servers that you own. Its meant to deploy containers across various cloud servers in a way that’s more automated to manage. If you need storage in a kubernetes cluster you’ll probably use something like s3 buckets, not a hard drive.

    If you want to learn it you can totally deploy it on a computer running a few VMs as nodes or with a few laptops / SBCs as a cluster, but if you just want the services to run on your server in the closet it’s a bit like using a sledgehammer to nail a chair back together. That’s why you don’t tend to see it talked about as much - it’s a bit of a different rabbit hole.

  • ChojinDSL@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    4
    ·
    1 year ago

    Containers, unless you have a specific need for a VM.

    With a VM you have to reserve resources exclusively. If you give a VM 2gb of ram, then that’s 2gb of ram that you can’t use for other things, even if the guest OS is using less.

    With Containers, you only need as many resources as the process inside the container requires at the time.

  • kasperlitheater@feddit.ch
    link
    fedilink
    English
    arrow-up
    6
    ·
    1 year ago

    Just to add my two cents: When I started out I thought I’d need a datacenter, with 10 Gig connectivity and a lot of storage. Turns out, a Raspberry Pi 4 8GB would’ve been sufficient for the things I actually use.

    My recommendation would be therefore to start minimalistic and build up according to your needs from there. Start with a Raspberry PI and Docker or use a used Micro SFF and go up from there, this advice would’ve saved me a lot of money and electricity.

  • thegreenguy@kbin.social
    link
    fedilink
    arrow-up
    9
    ·
    1 year ago

    I personally really, really like (Docker) containers and I host most of my stuff with it, on a Raspberry Pi and on (free tier) Oracle Cloud VPS’s. I also plan to (re)install Proxmox on a spare old laptop and run some stuff in VMs on that (namely Home Assistant) and might try a NixOS server too.

    So really, use both. Use the right tool for the job. And you can also run containers in VMs and even use Ansible to configure everything with playbooks, allowing you to re-run said playbooks when things go wrong.

  • adonis@kbin.social
    link
    fedilink
    arrow-up
    6
    ·
    1 year ago

    I use proxmox for the sole benefit of just spinning up a VM of choice without having to deal with usb-sticks, etc.

    From there I just run everything with Docker containers, via Portainer.

    • tony@l.bxy.sh
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

      This is exactly what I do for my personal servers (except with ESXi instead of proxmox).

      You will probably want both VMs and containers, there are some things that are not well supported in containers (e.g. gitlab).

      I run a couple k8s clusters for work and the complexity is beyond what most people starting out would want, I would imagine.

      Unless you need something that has a helm chart but not docker support (e.g. gitlab) or you are really keen on learning, it can be quite a jump…

      (For gitlab I still would recommend a VM with the omnibus installer over k8s unless you are big enough to have a separate team managing your k8s clusters. It would suck to have a PV issue and lose all your data.)

  • LetMeThinkAboutIt@programming.dev
    link
    fedilink
    English
    arrow-up
    4
    ·
    1 year ago

    Why not do both ? As I understand it, to do kubernetes clusters, you must have at least 3 hosts. They don’t need to be 3 different physical hosts: they could be VM (hosted on Proxmox).

    Proxmox also having a very strong implementation of ZFS, then it could be used as the storage « host », and it gives you also the option to do snapshots of the VM (and the storage pool), as well as replication/etc.

    • redcalcium@c.calciumlabs.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      1 year ago

      You only need 3 host if you want to load-balance etcd, which I think totally unnecessary for selfhosting purpose. Some downtime when updating kubernetes is acceptable in selfhosted environment for personal purpose.

    • aksdb@feddit.de
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      They don’t need to be 3 different physical hosts: they could be VM (hosted on Proxmox).

      That is fine for training purposes, but not for real hosting. You typically don’t guard against software crashes, but against hardware failures/outages. And this it not given with all three nodes on the same physical system.

      In that case you can simply skip the HA setup and go with a single node. Or not use k8s at all and just manage containers using ansible and systemd or whatever.

    • scottyjoe9@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      5
      ·
      1 year ago

      A k8s cluster can run on a single host if that’s what you want. I’m not sure if it would be worth the virtualisation cost to run it on VMs in the middle as well. If you were only ever going to run on a single host I probably wouldn’t use k8s though, I would just run containers. 🤷‍♂️

  • Brad Ganley@toad.work
    link
    fedilink
    English
    arrow-up
    14
    ·
    1 year ago

    I, personally, haven’t done a whole lot of VM work but I do run a metric ass-ton of containers. I can spool up servers in docker compose on absolutely dogshit hardware and have it run serviceably. Also, the immutability of the container OS is really nice for moving things around and/or getting them set up quickly.

    • stark@qlemmy.com
      link
      fedilink
      English
      arrow-up
      4
      arrow-down
      1
      ·
      1 year ago

      Where did you learn so much about Docker? Having a server at home, I’m more inclined to spin up a VM. I would like to learn more about Docker.

      • soldersmoker@reddthat.com
        link
        fedilink
        English
        arrow-up
        2
        ·
        edit-2
        1 year ago

        Just get started somewhere. I ran traditional VMs for most things before and I would never go back unless it was necessary for something.

        Easiest way is just to start using Docker for some service you’re hosting that has a public image available and go from there. If you want a more visual approach there’s stuff like Portainer you can use too.

        Also get started early on with docker compose, it makes it much easier to organize your container configs.

      • Brad Ganley@toad.work
        link
        fedilink
        English
        arrow-up
        7
        ·
        1 year ago

        If I’m honest, I’ve stumbled nose-first through pretty much everything I know. I am never afraid to break things as long as I learn from it.