Kubernetes Homelab Storage with Synology - Full Guide for 2025
Read full transcript 10 segments
-
almost everything I know about almost everything I know about kubernetes has been learned in my own kubernetes has been learned in my own kubernetes has been learned in my own kubernetes home lab and I've learned kubernetes home lab and I've learned kubernetes home lab and I've learned more in my home lab than I learned from more in my home lab than I learned from more in my home lab than I learned from Enterprise kubernetes environments in Enterprise kubernetes environments in Enterprise kubernetes environments in this video I'm going to be showing you this video I'm going to be showing you this video I'm going to be showing you how I've set up my sonology Nas as a how I've set up my sonology Nas as a how I've set up my sonology Nas as a storage provider for my home lab give storage provider for my home lab give storage provider for my home lab give you a quick tour and tell you everything you a quick tour and tell you everything you a quick tour and tell you everything you need to know about home lab storage you need to know about home lab storage you need to know about home lab storage for your own kubernetes home lab so for your own kubernetes home lab so for your own kubernetes home lab so let's dive let's dive let's dive in so a quick overview of my my home lab in so a quick overview of my my home lab in so a quick overview of my my home lab I am using Talos Linux for my home lab I am using Talos Linux for my home lab I am using Talos Linux for my home lab if I do K get noes over here we see that if I do K get noes over here we see that if I do K get noes over here we see that I have four noes running and this is the I have four noes running and this is the I have four noes running and this is the kubernetes version I'm currently running kubernetes version I'm currently running kubernetes version I'm currently running and if I do o white then we also see the and if I do o white then we also see the and if I do o white then we also see the tals image that I'm currently running tals image that I'm currently running tals image that I'm currently running 1.8.2 and I when you're starting out 1.8.2 and I when you're starting out 1.8.2 and I when you're starting out with kubernetes home labbing I don't with kubernetes home labbing I don't with kubernetes home labbing I don't recommend going into tilos just yet then recommend going into tilos just yet then recommend going into tilos just yet then you would then I would highly recommend you would then I would highly recommend you would then I would highly recommend just using just using just using k3s so this is what I've been what I'm k3s so this is what I've been what I'm k3s so this is what I've been what I'm running in terms of Hardware I use a running in terms of Hardware I use a running in terms of Hardware I use a Thinkpad Thinkpad Thinkpad T430 as my control T430 as my control T430 as my control plane just an old laptop which is my plane just an old laptop which is my plane just an old laptop which is my control plane and then I have my HP control plane and then I have my HP control plane and then I have my HP Elite Elite Elite desk over here I have four of these desk over here I have four of these desk over here I have four of these running these are refurbished old running these are refurbished old running these are refurbished old Enterprise hardware and those are my the Enterprise hardware and those are my the Enterprise hardware and those are my the noes that I'm actually running and the noes that I'm actually running and the noes that I'm actually running and the sonology that I have is a DS 224 plus sonology that I have is a DS 224 plus sonology that I have is a DS 224 plus it's not a very big one it's not a very
-
it's not a very big one it's not a very it's not a very big one it's not a very expensive one and it has plenty for me expensive one and it has plenty for me expensive one and it has plenty for me currently although I am looking to currently although I am looking to currently although I am looking to upgrade because I'm storing a lot of upgrade because I'm storing a lot of upgrade because I'm storing a lot of video material on there these days so video material on there these days so video material on there these days so why would you want to use a sonology Nas why would you want to use a sonology Nas why would you want to use a sonology Nas for your storage because these notes for your storage because these notes for your storage because these notes that I showed you they already have that I showed you they already have that I showed you they already have storage in them right they already have storage in them right they already have storage in them right they already have ssds and if I go to my cluster then you ssds and if I go to my cluster then you ssds and if I go to my cluster then you will see if I go to k get storage will see if I go to k get storage will see if I go to k get storage classes classes classes here we see that I have my Rancher local here we see that I have my Rancher local here we see that I have my Rancher local path installed here this is not path installed here this is not path installed here this is not installed by default when you're running installed by default when you're running installed by default when you're running Talos however when you're running k3s Talos however when you're running k3s Talos however when you're running k3s this is the one that is installed um for this is the one that is installed um for this is the one that is installed um for you and local path means that it will you and local path means that it will you and local path means that it will provision a persistent volume from the provision a persistent volume from the provision a persistent volume from the storage that is available on the Node storage that is available on the Node storage that is available on the Node and that is a key word here on the Node and that is a key word here on the Node and that is a key word here on the Node local path is fine it it works great local path is fine it it works great local path is fine it it works great but the problem is if you have multiple but the problem is if you have multiple but the problem is if you have multiple nodes like I have and if I then for nodes like I have and if I then for nodes like I have and if I then for example do a Talos upgrade then what I example do a Talos upgrade then what I example do a Talos upgrade then what I want to do is I want to drain one node want to do is I want to drain one node want to do is I want to drain one node upgrade that node and then re added to upgrade that node and then re added to upgrade that node and then re added to the the the cluster if my storage then is bound to cluster if my storage then is bound to cluster if my storage then is bound to that node of local with local path then that node of local with local path then that node of local with local path then I am not able I am not able I am not able to reschedule the pods that are on that to reschedule the pods that are on that to reschedule the pods that are on that node to a different node if I have my
-
node to a different node if I have my node to a different node if I have my noes noes noes here this is one Noe this is the second here this is one Noe this is the second here this is one Noe this is the second node then the storage that I'm using is node then the storage that I'm using is node then the storage that I'm using is actually attached to the node actually attached to the node actually attached to the node itself and if I then have a few pods on itself and if I then have a few pods on itself and if I then have a few pods on here then normally for example in a here then normally for example in a here then normally for example in a cloud kuet offering if I'm doing a cloud kuet offering if I'm doing a cloud kuet offering if I'm doing a kubernetes upgrade then I will just plop kubernetes upgrade then I will just plop kubernetes upgrade then I will just plop reschedule the Pod to a different Noe reschedule the Pod to a different Noe reschedule the Pod to a different Noe and then the persistent volume claims and then the persistent volume claims and then the persistent volume claims are separate they are not living on the are separate they are not living on the are separate they are not living on the nodes they are living in a separate nodes they are living in a separate nodes they are living in a separate storage provider and there therefore storage provider and there therefore storage provider and there therefore they can like connect from here to the they can like connect from here to the they can like connect from here to the storage or from here to the storage it storage or from here to the storage it storage or from here to the storage it doesn't really matter it's node doesn't really matter it's node doesn't really matter it's node independent and this was the problem independent and this was the problem independent and this was the problem that I had in my own kubernetes cluster that I had in my own kubernetes cluster that I had in my own kubernetes cluster I was not able to reschedule pods to I was not able to reschedule pods to I was not able to reschedule pods to different nodes as long as I was was different nodes as long as I was was different nodes as long as I was was using the local path so that's why I using the local path so that's why I using the local path so that's why I decided to go for the senology uh option decided to go for the senology uh option decided to go for the senology uh option Synology has a isy driver for kubernetes Synology has a isy driver for kubernetes Synology has a isy driver for kubernetes here this a sonology CSI so this means here this a sonology CSI so this means here this a sonology CSI so this means that it has a CSI driver for kubernetes that it has a CSI driver for kubernetes that it has a CSI driver for kubernetes which means that you can provision which means that you can provision which means that you can provision storage on the sonology nas which is storage on the sonology nas which is storage on the sonology nas which is then separate from your nodes and if you then separate from your nodes and if you then separate from your nodes and if you then reschedule a pod it is then it it then reschedule a pod it is then it it then reschedule a pod it is then it it is killed on one note it is being is killed on one note it is being is killed on one note it is being brought up on a different Noe but the
-
brought up on a different Noe but the brought up on a different Noe but the persistent volume claim is still living persistent volume claim is still living persistent volume claim is still living on the sonology nas so it disconnects it on the sonology nas so it disconnects it on the sonology nas so it disconnects it reschedules and then it reconnects to reschedules and then it reconnects to reschedules and then it reconnects to the persistent volume the persistent volume the persistent volume claim and if you are in the process of claim and if you are in the process of claim and if you are in the process of building a kubernetes home lab or if you building a kubernetes home lab or if you building a kubernetes home lab or if you want to learn how to do it I have a full want to learn how to do it I have a full want to learn how to do it I have a full kubernetes home lab course available in kubernetes home lab course available in kubernetes home lab course available in my private devops Community it is 8 my private devops Community it is 8 my private devops Community it is 8 hours long but if you are completely new hours long but if you are completely new hours long but if you are completely new to kubernetes then I also have a to kubernetes then I also have a to kubernetes then I also have a kubernetes fundamentals course in kubernetes fundamentals course in kubernetes fundamentals course in addition to tons of no taking courses addition to tons of no taking courses addition to tons of no taking courses but what's most important is that you but what's most important is that you but what's most important is that you can network with over 400 other can network with over 400 other can network with over 400 other Engineers I have weekly group coaching Engineers I have weekly group coaching Engineers I have weekly group coaching calls where you can ask me questions calls where you can ask me questions calls where you can ask me questions directly and if you get stuck while directly and if you get stuck while directly and if you get stuck while creating your home lab or learning creating your home lab or learning creating your home lab or learning kubernetes and devops you can ask kubernetes and devops you can ask kubernetes and devops you can ask questions in the community 24/7 check it questions in the community 24/7 check it questions in the community 24/7 check it out I think you might like it so let's out I think you might like it so let's out I think you might like it so let's check out what this looks like in check out what this looks like in check out what this looks like in practice I'm in my home lab um devp here practice I'm in my home lab um devp here practice I'm in my home lab um devp here and if i k get notes I have my home lab and if i k get notes I have my home lab and if i k get notes I have my home lab cluster available and I have prepared a cluster available and I have prepared a cluster available and I have prepared a very simple storage. yam file here which very simple storage. yam file here which very simple storage. yam file here which will provision a persistent volume claim will provision a persistent volume claim will provision a persistent volume claim it's Nam demo and it's just that's it it's Nam demo and it's just that's it it's Nam demo and it's just that's it it's just going to create a Precision it's just going to create a Precision it's just going to create a Precision volume claim which then is going to volume claim which then is going to volume claim which then is going to create a persistent volume create a persistent volume create a persistent volume underwater so if I do K get PVC now underwater so if I do K get PVC now underwater so if I do K get PVC now there are no resources in the default there are no resources in the default there are no resources in the default namespace but if I open up my sonology
-
namespace but if I open up my sonology namespace but if I open up my sonology Nas here Nas here Nas here [Music] [Music] [Music] uh well this is the the controller I uh well this is the the controller I uh well this is the the controller I should say so this this deployment is on should say so this this deployment is on should say so this this deployment is on the kubernetes cluster itself and this the kubernetes cluster itself and this the kubernetes cluster itself and this is the controller that handles the is the controller that handles the is the controller that handles the attaching and detaching of the attaching and detaching of the attaching and detaching of the persistent volume claims so if I just persistent volume claims so if I just persistent volume claims so if I just open up this as uh on the logs and I'm open up this as uh on the logs and I'm open up this as uh on the logs and I'm going to split my going to split my going to split my screen open another instance of my home screen open another instance of my home screen open another instance of my home lab Dev pod here if I then K apply fs. lab Dev pod here if I then K apply fs. lab Dev pod here if I then K apply fs. yl now we see that it's going to started yl now we see that it's going to started yl now we see that it's going to started PVC processing Etc it is now already uh PVC processing Etc it is now already uh PVC processing Etc it is now already uh hard at work and here we go the hard at work and here we go the hard at work and here we go the persistent volume claim is now created persistent volume claim is now created persistent volume claim is now created so if I do K get PVC here I see my so if I do K get PVC here I see my so if I do K get PVC here I see my persistent volume claim it has also persistent volume claim it has also persistent volume claim it has also received an received an received an ID and if I then go to my sonology Nas ID and if I then go to my sonology Nas ID and if I then go to my sonology Nas over here I can open up the storage manager sand manager as should say and manager sand manager as should say and here I have three unread events so we here I have three unread events so we here I have three unread events so we see here it has now mapped a lwn and an see here it has now mapped a lwn and an see here it has now mapped a lwn and an isosy Target to the PVC and we saw here isosy Target to the PVC and we saw here isosy Target to the PVC and we saw here that the ID was 7 c80 and here it is 7 that the ID was 7 c80 and here it is 7 that the ID was 7 c80 and here it is 7 c80 so if I go to isui and if I then c80 so if I go to isui and if I then c80 so if I go to isui and if I then search for that c80 over here here we go search for that c80 over here here we go search for that c80 over here here we go here it is here's here's the kcsi here it is here's here's the kcsi here it is here's here's the kcsi c80 here is the actual Lun and the iussi
-
c80 here is the actual Lun and the iussi c80 here is the actual Lun and the iussi Target that we have just created so you Target that we have just created so you Target that we have just created so you can actually see them in your sonology can actually see them in your sonology can actually see them in your sonology Nas and I could even go here and take Nas and I could even go here and take Nas and I could even go here and take snapshots if that if I wanted to do that snapshots if that if I wanted to do that snapshots if that if I wanted to do that so you can actually on the sonology so you can actually on the sonology so you can actually on the sonology level itself you can back up the data I level itself you can back up the data I level itself you can back up the data I currently don't do this I just do currently don't do this I just do currently don't do this I just do databases and I back them up to the databases and I back them up to the databases and I back them up to the cloud but there is a way of cloud but there is a way of cloud but there is a way of even backing up these persistent volume even backing up these persistent volume even backing up these persistent volume claims if you really don't want to use claims if you really don't want to use claims if you really don't want to use your data so this works really well you your data so this works really well you your data so this works really well you can and if I then would reschedule this can and if I then would reschedule this can and if I then would reschedule this pod to a different node then you would pod to a different node then you would pod to a different node then you would see in the logs that it's just detaching see in the logs that it's just detaching see in the logs that it's just detaching it and then it rescheduling and it and then it rescheduling and it and then it rescheduling and attaching it to the different po it it attaching it to the different po it it attaching it to the different po it it works really well now if I go to G get works really well now if I go to G get works really well now if I go to G get storage classes then you will see that I storage classes then you will see that I storage classes then you will see that I have an isy icui retain and I have an have an isy icui retain and I have an have an isy icui retain and I have an ismb retain so let me EXP explain what ismb retain so let me EXP explain what ismb retain so let me EXP explain what this is about the default storage class this is about the default storage class this is about the default storage class has a reclaim policy of delete and these has a reclaim policy of delete and these has a reclaim policy of delete and these are all defined in code so storage class are all defined in code so storage class are all defined in code so storage class here so if I go if I check out my retain here so if I go if I check out my retain here so if I go if I check out my retain for example for example for example here this is the the standard here this is the the standard here this is the the standard one is default class true so this one is default class true so this one is default class true so this storage class is defined in code in my storage class is defined in code in my storage class is defined in code in my home lab repo and I just select the CSI home lab repo and I just select the CSI home lab repo and I just select the CSI sand sonology storage provider I direct sand sonology storage provider I direct sand sonology storage provider I direct it to the IP of my sonology I give it
-
it to the IP of my sonology I give it it to the IP of my sonology I give it the icy protocol and then the reclaim the icy protocol and then the reclaim the icy protocol and then the reclaim policy is delete so that means when I policy is delete so that means when I policy is delete so that means when I delete the PVC which I can do here okay delete the PVC which I can do here okay delete the PVC which I can do here okay delete PVC delete PVC delete PVC demo then now it is deleted so if I if I demo then now it is deleted so if I if I demo then now it is deleted so if I if I would have set a reclaim policy of would have set a reclaim policy of would have set a reclaim policy of retain it's automatically going to retain it's automatically going to retain it's automatically going to retain the persistent volume that was retain the persistent volume that was retain the persistent volume that was associated with the PVC so if I do K get associated with the PVC so if I do K get associated with the PVC so if I do K get pvv K get BV pvv K get BV pvv K get BV now and then grab now and then grab now and then grab demo and we see there is no demo demo and we see there is no demo demo and we see there is no demo persistent volume here anymore if I had persistent volume here anymore if I had persistent volume here anymore if I had set this to retain it would have I would set this to retain it would have I would set this to retain it would have I would have had to um delete it manually so I have had to um delete it manually so I have had to um delete it manually so I have a couple of other different storage classes and I have the retain I have the classes and I have the retain I have the delete but I also have a SMB so you can delete but I also have a SMB so you can delete but I also have a SMB so you can also provision SBA shares from your also provision SBA shares from your also provision SBA shares from your kubernetes cluster which is really kubernetes cluster which is really kubernetes cluster which is really interesting because I can then provision interesting because I can then provision interesting because I can then provision storage on my kubernetes cluster which I storage on my kubernetes cluster which I storage on my kubernetes cluster which I then can connect to for example on my then can connect to for example on my then can connect to for example on my MacBook and just Mount that drive over MacBook and just Mount that drive over MacBook and just Mount that drive over the sambba protocol and I can interact the sambba protocol and I can interact the sambba protocol and I can interact directly with files on that drive if I directly with files on that drive if I directly with files on that drive if I want to and there are some use cases for want to and there are some use cases for want to and there are some use cases for that if you want to have access to notes that if you want to have access to notes that if you want to have access to notes or something that you want to share so or something that you want to share so or something that you want to share so it it is very powerful to to have a it it is very powerful to to have a it it is very powerful to to have a Synology as a storage provider now let's
-
Synology as a storage provider now let's Synology as a storage provider now let's take a look at how this is configured so take a look at how this is configured so take a look at how this is configured so as I mentioned I'm using the ice scuzzy as I mentioned I'm using the ice scuzzy as I mentioned I'm using the ice scuzzy storage driver um that is created by storage driver um that is created by storage driver um that is created by sonology but then because I'm running sonology but then because I'm running sonology but then because I'm running Talos they have set they have their um a Talos they have set they have their um a Talos they have set they have their um a user that has created a fork of this user that has created a fork of this user that has created a fork of this which is then optimized for which is then optimized for which is then optimized for Talos Linux and this is the one that is Talos Linux and this is the one that is Talos Linux and this is the one that is in the documentation you can just use in the documentation you can just use in the documentation you can just use the documentation to set this the documentation to set this the documentation to set this up but this Synology CSI Talos is up but this Synology CSI Talos is up but this Synology CSI Talos is basically contains a full guide on how basically contains a full guide on how basically contains a full guide on how to configure this it's a bit complicated to configure this it's a bit complicated to configure this it's a bit complicated you have to build your own container you have to build your own container you have to build your own container images with some Secrets Etc but it's images with some Secrets Etc but it's images with some Secrets Etc but it's all doable uh it it took me a couple of all doable uh it it took me a couple of all doable uh it it took me a couple of hours and then it was done and I never hours and then it was done and I never hours and then it was done and I never had to look at it again so just follow had to look at it again so just follow had to look at it again so just follow this guide but um it when you have set this guide but um it when you have set this guide but um it when you have set this up it is basically set and forget this up it is basically set and forget this up it is basically set and forget so I use this guide from the Talos so I use this guide from the Talos so I use this guide from the Talos documentation to do this this won't documentation to do this this won't documentation to do this this won't apply if you're doing k3s then there are apply if you're doing k3s then there are apply if you're doing k3s then there are o other guides to do it uh it's probably o other guides to do it uh it's probably o other guides to do it uh it's probably a little bit simpler than when it is a little bit simpler than when it is a little bit simpler than when it is when you do it for tals but all of the when you do it for tals but all of the when you do it for tals but all of the information is readily available over information is readily available over information is readily available over there and in my case so I have this there and in my case so I have this there and in my case so I have this deployed through gitops and I have the deployed through gitops and I have the deployed through gitops and I have the controller. yl the CSI Drive d. yo these controller. yl the CSI Drive d. yo these controller. yl the CSI Drive d. yo these are all taken from that repo basically are all taken from that repo basically are all taken from that repo basically and then you have to create your own and then you have to create your own and then you have to create your own storage classes like I showed you and
-
storage classes like I showed you and storage classes like I showed you and then you are good to go and when you then you are good to go and when you then you are good to go and when you then create a persistent volume claim then create a persistent volume claim then create a persistent volume claim and here I have my sonology isui as a and here I have my sonology isui as a and here I have my sonology isui as a default driver then it will use that as default driver then it will use that as default driver then it will use that as the storage driver for the the storage driver for the the storage driver for the storage lastly one thing to note is that storage lastly one thing to note is that storage lastly one thing to note is that when when you when you're using Talos when when you when you're using Talos when when you when you're using Talos it's very important that you use the it's very important that you use the it's very important that you use the isosy tools so you have to go to Talos isosy tools so you have to go to Talos isosy tools so you have to go to Talos dodev and then you have to create a dodev and then you have to create a dodev and then you have to create a custom custom custom image image image here that here that here that includes includes includes iy iy iy tools here sidir Labs ice scy tools this tools here sidir Labs ice scy tools this tools here sidir Labs ice scy tools this is extremely important if you don't have is extremely important if you don't have is extremely important if you don't have this in your Talos image this in your Talos image this in your Talos image then it won't work and I I I configured then it won't work and I I I configured then it won't work and I I I configured it then I updated using a standard image it then I updated using a standard image it then I updated using a standard image and all of my storage got wiped and I and all of my storage got wiped and I and all of my storage got wiped and I thought wait why why and then this was thought wait why why and then this was thought wait why why and then this was the reason so very important that you the reason so very important that you the reason so very important that you remember to build a custom image for remember to build a custom image for remember to build a custom image for tals as well so that's about it that's tals as well so that's about it that's tals as well so that's about it that's how I use sonology storage in my home how I use sonology storage in my home how I use sonology storage in my home lab it is by far the best solution I lab it is by far the best solution I lab it is by far the best solution I have found uh to date in order to get up have found uh to date in order to get up have found uh to date in order to get up and running with storage quickly and running with storage quickly and running with storage quickly if you're not using the local path that if you're not using the local path that if you're not using the local path that is and if you want to know more about is and if you want to know more about is and if you want to know more about creating kubernetes home lab if you want creating kubernetes home lab if you want creating kubernetes home lab if you want to connect with other kubernetes
-
to connect with other kubernetes to connect with other kubernetes engineers then I highly recommend you engineers then I highly recommend you engineers then I highly recommend you jump into my kubernetes devops community jump into my kubernetes devops community jump into my kubernetes devops community I have a full course on how to create I have a full course on how to create I have a full course on how to create your kubernetes home lab using only a your kubernetes home lab using only a your kubernetes home lab using only a Raspberry Pi or an old laptop it will Raspberry Pi or an old laptop it will Raspberry Pi or an old laptop it will teach you everything you need to know teach you everything you need to know teach you everything you need to know and it's the only course of its kind on and it's the only course of its kind on and it's the only course of its kind on the internet hope to see you soon
Summary
This tech analysis focuses on setting up a Synology NAS as a Kubernetes home lab storage provider, contrasting it with enterprise environments like Talos Linux and recommending K3s for beginners. The key takeaway is that while local path storage is functional, a shared storage solution like a Synology NAS is crucial for multi-node Kubernetes home labs to avoid data loss during updates or node failures.