i built a Raspberry Pi SUPER COMPUTER!! // ft. Kubernetes (k3s cluster w/ Rancher)

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay i went a little crazy in this video wait what's the smell oh i think it's ready come on let's go yeah yeah it's done come on come on yeah we're gonna do the slide see y'all down there [Music] all right come on i don't want to burn it let's go oh oh oh yeah there it is oh it smells so good my fresh raspberry pies this is my baby 16 cores 56 gigs of ram this is my raspberry pi super computer now i want you to do this now don't worry you don't need eight raspberry pi's like i have all you need is really one but why because of this we're going to learn one of the most killer skills most sought after skills in the iit industry right now kubernetes we're gonna use kubernetes to cluster together these eight pies or maybe just your one pie and not only is doing this just freaking cool you're also gonna learn a ton about kubernetes along the way i am playing minecraft on a raspberry pi cluster it doesn't get cooler than this guys and this would not be possible without the sponsors of this video rancher labs and box book we're installing a version of kubernetes called k3s on our raspberry pi's rancher labs actually created k3s it's open source lightweight and amazing we'll talk much more about it here in a bit also kubernetes is kind of hard i relied heavily on the engineers at box boat to help me get this going they held my hand to walk me through the blood sweat and tears of getting this set up what not to do what to do and you know what you're gonna reap the benefits of knowing exactly how to do this so buckle your seat belts get ready we're going to cluster together these raspberry pies using kubernetes and not only that i want to show you this amazing dashboard gui configuration management tool called rancher yeah rancher labs made it and it's a tool we can use to manage this cluster and not just this one clusters and it's free and open source and amazing anyways we're going to walk through all that yes and by the way rancher labs was recently acquired by sousa ever heard of them opensuse linux now sousa not suse i say it wrong a lot in this video so i'm actually corrected by this guy right here they are a global leader in innovative reliable and enterprise grade open source solutions which makes sense why they acquired rancher labs because rancho labs creates cool things like k3s oh and also how cool is this do you want one i'm partnering with the rancher labs and opens their parent company to give away three of these guys a raspberry pi with their custom rancher labs k3s 3d printed case how cool is this so if you want one they're actually giving away three check it out link below so let's talk about what you're going to need for this project first a raspberry pi you saw that coming right you can do this entire project with just one raspberry pi but you know if you want to have more fun you might want more than one two three eight depending on how crazy you want to be so yeah but at least one now the cool part is that's pretty much it i mean yeah you need the typical raspberry pi stuff a power supply a micro sd card a micro sd card usb adapter and you'll want at least four gigs of ram eight to really have some fun now get this that's pretty much all we need you don't need a a keyboard a mouse you don't need a monitor because we're doing a headless install we don't need a head and it's super cool i'll walk you through it now if you do want to go a bit crazy like me and do a legit cluster with two three four eight check the description below i've got a list of supplies you can pick up like this case and you'll need a switch and and ethernet cables and all kinds of stuff oh almost forgot the most important thing you need coffee everything nit requires coffee network dot coffee okay here we go i am so excited to build this with you but first i want to talk about what the junk we're actually doing because i know a lot of you see all these raspberry pies and hear the word cluster and go i'm not really sure what that means let's talk about that so first yes we are clustering these pies together to make them one big massive super computer just a massive pie i love big pies and it is awesome but how do we do that because you can't just glue them together you can't bake them into one pan and make them one big pie even with a pie analogy so we need a way to cluster these raspberry pies together how do we do that one word kubernetes what the junk is that um i'll explain it here in a moment because it's kind of a big thing but first let me tell you what we're not doing with our raspberry pi's because there might be some confusion we won't be making this into one big computer i mean we kind of are but you won't be able to log into it and play like a crazy video game like call of duty and be able to use all the ram and all the cpu cores that we're gonna have no no that won't happen these raspberry pi's will still be their own separate machines we're just finding a way to make them work together the the key word here is orchestrate okay buzzword what exactly are we doing i want you to change the way you think about a raspberry pi now a lot of you may think of it as a desktop computer because you can use it like that but for us right now in our case i want you to think of it as a server now on a raspberry pi server you might install things like a website a minecraft server pi hole which if you don't know what that is got a video right here and this little guy he does do a great job but he can only handle so much he is a kind of a tiny computer you overload this guy and he starts to sizzle can't take the heat and it does get pretty hot this is exactly where having more than one raspberry pi or having a cluster will come in handy and the cluster the raspberry pi's are taken care of we make sure they're not getting too stressed out so here's what might happen if that poor pie was in a cluster he'd be fine you see the cluster will auto magically distribute the app so that no one pie gets too stressed out we might have pie hole on one at raspberry pi minecraft on another the web server on the other one and not just that maybe we want three copies of each a web server on each raspberry pi a pie hole a minecraft server then we can load balance have some redundancy and no one raspberry pi is getting too stressed out that's the power of a cluster yes he's so powerful i can't wait to show you and by the way the way this happens it's magic we simply say hey uh cluster i want three minecraft servers get it to me now and the cluster just does it auto magically but how how's this magic happening kubernetes he's the magic he's the orchestration let's talk about it but what is kubernetes that's kind of a big question a question i actually answered in this video right here so i won't go too deep in this video but i will tell you a bit about it just a few things here first kubernetes is a container orchestrator and what the junk does that mean let's start with containers another pretty big topic again we won't go too deep right here if you want to learn more video right here but essentially a container is how we're going to get an app like a minecraft server on our raspberry pi cluster now typically when you install minecraft server or any other application on a raspberry pi you just use a package manager like apt and you install it and all these apps are installed next to each other on the same computer and that's fine but that's not how it works with containers you see with containers things are a bit more isolated when we install an app like minecraft we first put it in its own container that's why we call it containers i guess its container is its own little room its own little isolated spot where it's all by itself it's happy and safe has everything it needs to run it doesn't bother any other app and other app bothers him it's kind of like you when you're a kid and you lock yourself in your room for a long gaming session or maybe that's you now you had your doritos and you had your headphones and you were ready to go no one bothered you you didn't bother anybody else it's kind of like that so this minecraft server is deployed to our raspberry pi or our cluster as a container same thing goes for a web server and we'll put that web server container on that same raspberry pi but notice they're in their own containers they're kind of separate in their own rooms not bothering each other it's kind of like a virtual machine where each app is its own virtual machine in a way not exactly again if you want to learn more check it out video up here somewhere now running your apps inside containers has a lot of benefits but one of the best ones ever is that it's wicked fast like super fast you'll see that here in a moment when we deploy a few now i do need to say this so you understand this concept here you don't need kubernetes to run containers in fact you could run containers on one raspberry pi by itself using something like docker and that's cool but when you want to do something even cooler like having a bunch of raspberry pi's clustered together you'll want to use a thing like kubernetes to orchestrate your containers and you'll simply tell kubernetes hey i want three minecraft containers deployed to my cluster and it will intelligently just go okay boom raspberry pi one two three and it will do things like load balancing between those it'll check up on them making sure they're healthy it might produce more minecraft servers for you in case they start to get overloaded which is called scaling up now again there is a lot more to this and it's amazing like when you go deep down the rabbit hole of learning kubernetes you'll get lost and you'll love it you'll look up and it'll be like 4am you'll know where or how you got there it's it's fun so i encourage you to go check it out and dive deeper in that but for now let's talk about how the junk we get kubernetes on our raspberry pi's on our cluster and this is where it could get scary because installing kubernetes is not easy because at its core kubernetes was meant for the cloud deploying it in lenode or aws or azure in fact installing it up there is relatively easy i demonstrated that in one of my kubernetes videos but when you want to install it locally on-prem on a raspberry pi which is normally called installing it on bare metal that's kind of a task but thankfully that's not the case for us it's not actually it'll be so kind of easy like really fast and easy and this is all thanks to a fantastic company called rancher which i mentioned earlier is the sponsor of this video rancher produces a ton of open source software that helps people like us do stuff like this now we're not going to be installing this kind of kubernetes which is commonly abbreviated to k8s you may have seen that in the wild we're doing something that rancher labs came up with it's called k3s i don't know why it's called that let's ask them real quick k3s is lightweight kubernetes so we we slimmed it down and it was a play on the term case it doesn't really mean anything now k3s is kubernetes but it's not as bulky or heavy as the main kubernetes k8s it's more lightweight doesn't have all the fluff it's quick it's fast and it's perfect for things like a raspberry pi iot devices edge devices that's why rancher labs made this so we're just about ready to install it but let me show you what it's going to look like when we install k3s kubernetes on our raspberry pi's i mean first you only need one raspberry pi you don't need multiple like i have but anyways we'll install it on our first node and that first node becomes the master that's his role that's what he does he's the boss he calls the shots if you have other raspberry pi's they have to listen to him they have to kind of bow down to him so when we do install k3s on our other raspberry pi's they are becoming what's called worker notes they just do what they're told man they will actually register with the master pie and they do everything he says and again it's wicked fast and super simple trust me i spent way too long trying to figure this out and i went through all the pain for you so it's going to be very quick and easy for you it doesn't mean it was for me so you're welcome so i hope you take advantage of this i need some coffee anyways one last thing and this will be optional most of the configuration we're gonna do like when we deploy our applications in their containers it's gonna be done on the master right here we'll log into him we'll enter our commands via cli it's super nerdy super fun and that's all you'll need now optionally i'm going to show you something else too i'm going to set up another server again this is optional you don't need to do this and on that server i'm going to install rancher now just to avoid confusion rancher labs produced k3s rancher labs also produces an open source application called rancher rancher is kind of amazing it's a gui a beautiful gui that gives us a ton of tools to manage our kubernetes cluster so yeah we're going to have a lot of fun digging into the cli and typing away but sometimes you want a visual representation of what you're doing on this cluster kind of get lost in the command line right rancher will show you what's going on you'll actually be able to do a ton of config from rancher and it has an api you can manage multiple clusters so much we'll cover more on that here in a bit but now enough theory enough talking let's actually do this so i hope you have your coffee because you're going to need some it's fun but you might want to get some because we're going in we're going deep down the rabbit hole of kubernetes on our raspberry pi's a cluster or maybe just one that's fine because i forgot to mention this if you have just one raspberry pi it will become the master and a worker node it'll have to tell itself what to do kind of like schmiegel i'm not listening but anyways yeah let's do this let's get started right now okay step one we gotta prep our pie gotta bacon or bake our pies now again this would be headless no keyboard no mouse no monitor you're fine you're good it's gonna be quick it's really cool actually hold on watch this first thing you grab your sd card here there he is you'll plug that sucker into your micro sd usb adapter and plug that into your computer the first thing we'll do is put the raspbian image on our sd card my favorite way to do this is the raspberry pi imager it's free and it's available on linux mac windows whatever i've got a link below go ahead and download that i'll get mine launched real quick from here we'll click on choose os and we'll go to raspberry pi os other and we'll choose raspberry pi os lite what that will do is basically give us a server image no gui that way it downloads quicker installs faster and we don't need it it's going to be headless man no head and we'll choose our storage make sure you select the correct device my 32 gig micro sd card and i'll click on right right yes and ma was that noise we're cool and coffee break i've had a lot of coffee today and done all right so now we can remove our sd card i'll be right back keep this handy we're not done with it yet now you want to follow this sequence of events wait where'd my card go it fell out where'd it go i can't find it oh i found it okay be careful it might fall out of your uh sd card reader anyways keep this handy we're not done with it yet now this next sequence of events you want to follow very closely next go ahead and plug the sucker into your raspberry pi and then power that puppy up plug in your power and let it do its thing just let it come up let it boot up give it a moment again coffee break and after two or three minutes when we're confident it has come up we're gonna take it out so don't worry don't do anything with it just leave it alone and i'll see you in a second okay after it's been just a few minutes go ahead and unplug the power to your raspberry pi just like this take out your sd card plug that sucker back into your usb device and get that into your computer now why did we do that what are we doing i'll show you watch this we first had to put the image on the sd card and then allow the raspberry pi to boot off of that when the raspberry pi booted off of that it created a boot folder on the drive so if i go to my explorer here and go to here it is right here boot and it's my i drive on windows i'll go and jump in there now if you're on linux or mac it'll obviously be a bit different but same principle applies you jump into this folder and we're going to look for a couple files here we're going to make just a few changes the first one we want to look at is the command or cmd line.txt go ahead and open that in your default text editor or whatever you want to use you'll see one big long line of text we're going to scroll all the way to the end of this go to the very end and we're going to paste this i'll have this in a guide that you can copy and paste in the description below here it is it'll be c group equals memory blah blah whatever it is c groups is something we need enabled in order for k three s and containers to work adding it here tells raspberry pi hey when you boot up make sure this is awake and going and open and alive now right after that we're going to add something else we're going to add an ip address yes you can add an ip address right here kind of weird but we can do it so here we go we're going to see ip equals and then an ip address for me i'm going to have mine equal 10.7.1.60. now this will be different for your network whatever your subnet is on your network so make sure you assign an ip address that a is on your subnet and b that isn't used and then right after the ip address we're going to hit two colons colon and then we'll type in the default gateway for your network minus 10.7.1.3 yours might be one it's probably 192.168.1.1 how do i know your network because it's the default network for most people change it anyways and then one more colon and after that we're going to put in the subnet mask for your network which will probably be 255.255.255.0. if you're not sure just put that in that'll work just after that we can put another colon and put in our hostname for our raspberry pi we can name it right here i'll name mine rpi master then i'll hit one more colon i'll specify my nic for most people and for me it's going to be ethernet zero and then one more colon and we're going to type in off which is turning off auto configuration so that was a lot so i p address the one you're assigning to this device static the default gateway subnet mask the naming your raspberry pi the interface and then turn off auto configuration now i'm going to file save this or ctrl s get out of there just a few more things which this is honestly not that bad compared to having to have a keyboard and mouse and screen like that's terrible but anyways we're going to open up another file called config.txt and we're going to add one line here so go ahead and open that sucker we're going to scroll down to the very bottom of this file and just under the last configuration there we're going to add this arm underscore 64-bit equals 1. this will make sure that we're going to be using a 64-bit os version of raspbian which will default to 32-bit if we don't specify it we will need this to run some fun stuff so go ahead and do that i'm going to hit ctrl s or just file save whatever your default note editor text editor will do and then one last thing if you're on windows i want you to open up powershell just search for powershell yours might be blue mine is black because i change the color because i like black now again this will be pretty similar to mac os and linux so check this out first i want to get to that boot drive that we were just in this place here so to get there i saw that again it was a drive letter i so to do that in windows i'll just type in i colon boom i'm there and then i'll enter in one command the command will be new dash item space ssh what this will do is create a new blank file named ssh let's go ahead and do it done this will enable ssh for our raspberry pi when it boots up the next time perfect right now if you're on mac or linux you will do touch ssh to create a blank file just like that anyways we're done with that part so go ahead and grab your sd card now don't lose it this time don't fall out little buddy gotcha okay so now we're gonna plug this back into our raspberry pi plug that power back in and wait for him to boot up now what i'm going to do is open up a command prompt cmd and windows here terminal on linux and i'm going to ping the ip address i assigned do a t for continuous and just wait for this guy to boot up coffee break wait hold on i know i forgot something he is rendered useless without an ethernet connection so please make sure you don't mess up like me plug in your ethernet cable to the neck and then it should start working pretty soon oh there he is okay he's alive he's it worked i love it when it works the first time oh it's the best isn't it the best now if you want to use wireless and not ethernet i want to go against my wishes that's fine you probably will need a keyboard mouse and monitor to make the wireless connection so anyways i know my guy is up i'm going to try an ssh into him right now i'll use a command ssh and this will be the same on every platform pi or pi the default username and then the ip address that i set for him 10.7.1.60 and here we go it works yes i'll accept that fingerprint password will be raspberry by default raspberry yeah we're in now how cool was that a headless setup for a raspberry pi you can't beat that especially if you have a lot to configure i'm going to do those here in a moment but first let's do this we want to do everything as the root user so to do that we got to become the root user and we'll use this command sudo su space dash now if you want to know more about what that means and what it does i got a video right here or over here yes right here that you can check out anyways here we go we're becoming root i am root now there's one more prep thing we have to do before we can start installing kubernetes or k3s again i've got a link below where you can copy all this delicious documentation we're going to enable iptables legacy iptables it's what k3s is going to use so go ahead and paste that and then do a reboot r-e-b-o-o-t reboot and he's rebooting now that's the prep work when he comes back up he's ready to have kubernetes k3s installed on him now what i'm going to do right now is do that times eight i'm gonna go and do it all again i'm not gonna make you wait but for me it's gonna be a while so i'll see you in probably an hour maybe longer i don't know so if you get a cluster like me go ahead and configure your cluster now okay done and isn't it beautiful oh my gosh it's all i my favorite thing is seeing link lights all arranged uniform and blinking like christmas it's christmas i love it oh anyways how was yours looking if it was just one you were done a long time ago or moments ago because i edited this however if you're like me it took a bit anyways we're here coffee let's go step two time to configure kubernetes or k3s on our raspberry pi cluster and we're going to start with our master the first raspberry pi and if you're using only one raspberry pi that's it so let's do it the first thing we'll do is launch our terminal or command prompt or whatever you're using come on work for me there we go and we're going to ssh into our first node ssh pi at your ip address 10.7.1.60 for me raspberry and then i'll become root sudo su dash i am root now to install kubernetes k3s it's gonna be one simple command that's really all it is i'm telling you it's crazy so again link below i've got a guide for this all you gotta do is copy and paste into this terminal right now so here we go paste that's all it is and in case you're wondering what's happening here curl is going out and downloading this script and the magic is happening in the script the script will install k3s and then over here we're adding a little bit of configuration this will allow us to import the sucker into rancher which i'm gonna do because it's awesome and you should do it too but even if you aren't leaving that config in there is no big deal i'm gonna hit enter and it's just gonna do its thing man coffee break i'm excited it's almost done actually i mean i coffee break coffee sip that's all we have time for and that's it it's done it's done kubernetes or k3s is installed now what do we do with that i'll show you now again i'll tell you this installing kubernetes normally is an entire task it involves multi-node clusters and all it's crazy but for k3s this this is like we're done um there's a tool we're gonna use it's called cube cuddle or cube ctl we'll be using this a lot so i want you to know it memorize it become best friends cube cto this is how we do everything so yeah that's all i have to say about that let's try something real quick to verify everything looks cool let's do cube ctl get nodes uh cool so what was that well first we use our cube cuddle command to get nodes now a node is any of these guys right here it's any server or virtual machine in our case any raspberry pi that is participating in k3s your master is a node so i want to get all the nodes in my current cluster right now there's only one and it tells us his role he's the control plane and he's the master now i'm not going to cover all the roles in kubernetes because that's not important right now we just want to get ready and have fun right but if you want to learn more again i have a video on that now if you only have one raspberry pi then you're done but if you want to add more let's do this adding another is very similar to installing it on the master but we need one thing from the master to make things happen we need his token again a command will be below and just copy and paste this command in there cat and then wherever this command token is or analyzing command token just the token there we go this token right here what we cut it out we're going to use that to register the rest of our nodes to the cluster our worker nodes so i'm going to add the next guy here let's do this open up a new command prompt or terminal ssh pi at my next guy 61 raspberry become the root now again same story as before i've got a command below in the description so as you can see pretty much same story as last time we're going to be downloading the script to install k3s kubernetes but we're going to pass in some variables to make it become a worker node and register with our master first thing is the token the token is like how do we play with this mastery here like an arcade game we're going to put the little token in and let's go find that token it was in our master terminal we catted it out there it is i'm going to copy that sucker and put it right between these parentheses right here bam next will be our k3s url this will be the ip address of your master now for me it was the guy i just got my token from so i'm going to put that in here right between or right after https colon whack whack it'll be 10.7.1.6 and it will be port 6443 if you're on a local network you don't have to worry about access and firewalls unless you're doing something crazy and then one last parameter we want to throw in there and that's the k3s node name it does not like it when you have a bunch of nodes all with the same name which by default raspberry pi all of them are called raspberry pi so go ahead and change it for each node you add to your cluster i'm going to name this guy respi 2 raspberry okay and that's pretty much it i'm gonna take all this command copy it go to my worker node here paste and let the magic happen coffee break now that was freaking fast isn't that awesome now what do we do now how do we know what's happening how do we know what's happening let's get back to the master node now one thing you must know is that the cube cuddle command that we use in the master you cannot use in the worker notes it's not installed everything is meant to happen on the master so let's get back to the master let's use that same command we used earlier cube cuddle and get nodes and let's see what we find out whoa it's almost ready so i right now i can see i've got myself mr master but then there's my worker showing up and ready to work he's so good but he's not ready yet give him some time no worries if i run that command once more he should be ready oh he's ready he's ready to work i'm here punching in boss little whippersnapper's so young only 27 seconds old got grandpa here eight minutes anyways so yeah that was that i mean we got our master we got our worker node that's a cluster man and again if you only have two nodes then you're done i have uh eight total nodes in my cluster so i'm gonna do that real quick i'm not gonna make you wait okay i'm done y'all ready for this here we go cube ctl get nodes boom look at all those in a matter of moments i clustered all these suckers this whole stack right here whoo love it i get chills maybe it's just the coffee i don't know either way i'm happy now before we start playing with our clusters i do want to get ranchers set up again this is optional but i do recommend it because you get a fun way to look at your cluster and play with it configure it and all kinds of stuff and it's free open source anyways to install rancher you will need a virtual machine another virtual machine apart from what you have here with your raspberry pi's now i do already have a virtual machine set up ready to go as far as what type of virtual machine you'll want to do ubuntu 1804 or version 1804 and you'll want at least four gigs of ram to make the sucker work and again if you don't want to do this go ahead and skip ahead i got timestamps but i want to do this real quick i'm going to log into my server here open up a terminal ssh into that sucker become root now one thing we have to do before we install rancher is set up a configuration file so i'll start with doing this i'm going to create a directory the command will be mkdir for make directory and it'll be etsy forward slash rancher and they'll make one more directory after that it'll be rke2 and then we'll cd into that directory here i'll create my file nano config.yaml so create a blank file with this and just a couple things here first i'll say token colon space and then a shared secret it can be anything like my little pony and enter and then type in tls dash san colon go and drop down after that a couple spaces hit a tick right under the s space and then put in the ip address of your server here the server we're working with right now this will be your fixed registration address and that's pretty much it control x yes to save and then enter to get out of there and save the file that's it and just as before the commands will be in the description below it's very simple a very simple script that'll run and install rancher for us right now here we go little coffee break now let's verify it was installed we'll use the command rancher d or ranchered do dash dash help after this and we should see something like rancher kubernetes engine 2. cool we're solid so it is installed now all we have to do is enable the service and start it so we'll use system ctl that's a command so we use to start stop restart services on linux we'll do enable rancherd dash server dot service cool it's enabled i'm going to do a up arrow and then change the enable to start so we start the service and boom now it could take a bit so we can use this command to monitor what's going on let's go to paste this command here journal ctl blah blah it's gonna look at the logs and see what's going on so here we go and it's doing stuff now as soon as you stop seeing messages that say hey we're waiting for stuff waiting for our back roll to be created as soon as that's done you're solid so quick coffee break now fun note the reason i might be taking a bit is because it's also setting up a kubernetes cluster on that device or on that vm so what it's doing is it sets up a kubernetes cluster and it installs rancher or more specifically rancher d on top of that kubernetes cluster so if you're doing this if you're installing rancher and we have a raspberry pi's we end up having two separate clusters which is pretty cool okay mine is done when you see something like this node synced successfully we're pretty good someone hit ctrl c to stop that logging nonsense come on stop it there we go now one last thing we got to do is reset our admin password with this command rancherd reset dash admin let's see what happens here and boom there we go gave us a couple things real quick first it tells us the url that we can access rant you're at and with the appropriate port then it gave us a username and password let's go ahead and access it real quick oh boy here we go so the username was admin and then that password it gave us just gonna snag that paste that in there it's gonna ask me to reset that password which i will do right now now this is important make sure you have i want to create or manage multiple clusters selected sometimes you only want to manage one cluster and i get that but we don't want that we're going to be using the built-in cluster on rancher and our raspberry pi cluster which we'll import here in a moment anyways it's already selected i'm going to agree to all terms blindly like i always do and click on continue there's my server url i'm good i'll click on save and we're in so right here from the dashboard we can see that we already have a kubernetes cluster it's the one that was pre-installed now we want to add our raspberry pi cluster let's do that right now so as you might expect to add a cluster we're going to click on add cluster over here on the right go ahead and click on that now something to note look at all these options which is freaking cool you can import a ton of clusters especially from cloud providers like lenode digitalocean azure amazon now for us we're doing bare metal and we're doing something weird it's gonna be other we are the others so we're gonna click on other cluster we're gonna name it you can name it whatever you want it's not important to whatever you did here i'm in a harry potter mood right now so i'm gonna name mine hogwarts and click on create that's simple i mean it's pretty cool now the next two commands are either or this first one here is if you are using secure certificates we're gonna skip right on ahead to this one right here because our clusters are insecure because it's it's not a verified ssl whatever i'm gonna copy that command jump back into my cluster my master here and paste and that's pretty much it go ahead and hit enter now if you see that ignore it just try it again hit up arrow enter there you go he ignored me the first time yet sometimes i tell him twice he's hard-headed anyways now that's that's happening right now it's gonna join but we have to do one thing on rancher d to make sure things work the way we want them to so getting back to rancher i'm gonna click on done notice my hogwarts cluster is here but it's an appending status and i have zero nodes right now that's not true i've got eight nodes let's prove them wrong so um there is one thing we have to do special for raspberry pi now if you don't know this already raspberry pi is based on the arm architecture a lot of edge iot devices are so we have to make sure that when he pulls down the rancher stuff it's gonna be the arm stuff arm so let's go do that we're gonna click on the little dots over here next to our cluster we're gonna click on view in api go ahead and click on that here we're going to change one thing go ahead and click on edit and right here the agent image override we're going to tell him hey don't download the standard image we want you to change it up again same story as last time i'm going to paste that in there from the commands below this is a container image and at the end it tells us it's going to be the arm 64 version of it so we're going to scroll down to the bottom here all the way down click on show request looks good scroll down to the bottom once more and click on send request you should get a 200 response saying yep that's good and we're golden so go ahead and click on uh close you can close this window and it's already done yes so here i have my cluster hogwarts i've got my eight nodes now this is not a fun view it's not a fun view there's a different view we can go to let's go to explorer go ahead and click on that explorer oh yeah here we go this is how i like to view my kubernetes clusters sure i love command line but i love visualizations too if i scroll down a bit here like my cluster's a little nuts i've got 32 cores oh beautiful i've got 53 gigs of available memory raspberry pies isn't that crazy oh i love it now one thing i always change no matter what is i can change my uh my view here to dark mode oh much better okay now i feel better yes now if you skipped ahead we just installed rancher to manage all of this going forward you will not need a rancher but we will refer back to it to say hey this looks really cool check it out but now we will be using the command line and guide you through setting up a few cool things in your cluster so looking back at our master the guy calling all the shots he's the boss let's um let's do some stuff let's command the worker notes on our master we're going to use the cube cuddle command to deploy our first application that we're going to have running across our raspberry pi's but how do we do that let me show you we're going to start with something small something simple we're going to install this nginx web server and actually i want quite a few i want not one not two not three not four i want six nginx web server is deployed across my cluster and by the way you can do the same thing even if you only have one raspberry pi it'll just throw six nginx web servers onto it and you'll be fine don't worry so we need to tell the master hey master i want six of these guys right now get to work and we do that by defining a manifest file the manifest file is just a file that describes what we want listen here master i want six servers here's their name and all the other stuff about them that's what we're gonna do so let me show you what it looks like actually hold on real quick i want to walk through this i'm getting ahead of myself getting too excited so we'll describe what we want inside a manifest file it's going to be in the yaml format dot yaml yaml 8 markup language that's really what it stands for and we'll use the cube cuddle tool to deploy our manifest file it will actually be called a deployment so it might look like this cube ctl apply dash f and then our file which could be coolstuff.yaml anyways i've already got a yaml file defining these guys right now let's go take a look you can download that at the link below as well anyways here's my yaml file now i'm not going to go too into detail about what this is and how to build one because it's a lot but essentially here's what's happening the kind of file this is we're defining it right here it's a deployment meaning we're deploying some apps some services here's the name of that deployment nginx and then we just have stuff about it like hey how many of these do you want this is creating what's called a replica set no i don't want just two come on let's change that i want six and then there's some other stuff that you can change if you want to like here's a label it's saying here's the key app the value engine x this is going to be important when we talk about load balancing so kind of just put a pin in that and then down here we're defining what we want to deploy notice it says containers which containers do you want to deploy here we're deploying an nginx container now if this is your first time ever dealing with containers this might be a bit foreign to you the way we typically deploy containers is by downloading them from a registry the most popular one we see all the time and the one i use all the time is hub.docker.com so here in the image field when i say nginx colon stable it's actually going out to hub.doctor.com and saying hey you got a container named this and it'll say yep here it is and it pulls it down and then some more fun stuff like what port are we using port 80. we even have down here where we're gonna monitor the containers it'll actually monitor the http port and say hey are you alive are you okay are you up are you healthy and if it's not we're killing you for real that's what's gonna happen anyways what we're gonna do is we're gonna copy this file control a control c going to jump into my master here and i'm going to create a file new nano i'll name it harry potter dot yaml hit enter and then i'll paste the contents of that file just made bam looks good yeah so ctrl x y enter if i hit ls there is my yaml file my manifest now let's apply it let's make it happen now just buckle your seatbelts here we're about to deploy some apps on this cluster it's so cool here we go cube ctl cube cuddle apply dash f and then the file name harry potter.yaml as i hit enter magic is about to happen i did not intend for that to be the thing anyways here we go boom done so cool okay so what's happening right now let's find out let's do a cube ctl get pods what i'll explain that here in a moment get pods oh look at that container creating let's do it again oh we got a few running already let's do it again they're almost all ready and yes just like that we created containers we created apps on our cluster yes how cool is that now real quick you might be wondering what the junk is a pod we just got some pods i thought we were dealing with containers what is that i'll explain it's a thing when you think about kubernetes and you hear the word pod i want your brain to go pod containers pod containers because that's essentially what we're dealing with here when i deploy a container in kubernetes it's going to be nestled inside what they call a pod a little space pod a little pea pod just another layer another shell around it but simply that's what it is pod container pie container just think about that now when we applied that manifest that deployment boom it got deployed out to my raspberry pi's let's take a look if i get back to my uh master here over here on the left are the names of my pods but i want to see which raspberry pi they're on which i can see that let me just try it out this command cube ctl get pods if i do dash o and type in or not zero dash o and then wide it'll give me some more information like dude here's where we are over here it tells me which node they are on raspberry five raspy three recipe two recipes six and there's two on raspberry how cool is that now i gotta show you this let me show you what it looks like in rancher because it will reflect it over here on the left i have my deployments i'll go and jump in there and there it is the one we just deployed if i click on that it'll show me all the pods i just created what um what nodes they're on i can jump into my pods view over here on the left there's my pods now i know you're probably already thinking this cool we deployed a website to our cluster maybe to your one raspberry pi which is your cluster but how do i get to that website that's a great question it's actually pretty complex i'm not gonna lie kubernetes networking is not for the light of heart now i'm gonna walk you through how to do this you're welcome because i hit my head against the wall banging my head against the wall to figure this out for a while um it was largely thanks to the good folks at box boat and uh the owner of rancher that i can figure this out anyways let me show you yeah we deployed a web server to kubernetes and it does live on these raspberry pi's but that doesn't mean you can get to them so if we look back at our masternode i can see they do have some ip addresses 1042.4.4 what have you now this subnet is not on my real network you saw that my subnet was 10.7.1 10.42 is not accessible to me this is what's called a cluster ip it's only specific to the kubernetes cluster only stuff within the kubernetes cluster can reach it anything outside of it which is me my computer cannot reach it that's by default so that's the first thing that you might encounter that might not seem very intuitive when you deploy an app in kubernetes is it won't expose itself to you that was weird anyways to make sure that your app is accessible we have to do something there's actually a number of things we can do but the simplest thing we can do is create something called a node port i'll explain i'll time to introduce a new concept we have pods these are pods right pods which are containers remember in kubernetes we also have a thing called services for our purpose we want to use a service to expose our apps this service again i just mentioned it will be a node port and here's what we're going to do this nginx web server we know uses port 80 as most websites do or they should use 443 but this guy's using port 80. so what we'll do is this will say on each node we're going to open up a hole open up some access a little portal here we'll see if you want to get to port 80 on this web server you're going to have to access port 311 on this node to get to it kind of like a port forward that's what we're going to do for each node now we're not going to log into each node and make that happen it's going to be automatic once we deploy that one service but that's the simplest way we can expose and access our website so let me try real quick or let's try it real quick now to deploy a service in kubernetes what do you think we need i'll give you a hint it's just like deploying our pods if you guessed manifest you get a gold star you get a sticker whatever it is um we need to define another manifest describing what we want to do with our service which we you know we want to do all this right here and we'll use that same apply command cube ctl apply that manifest now here's an example manifest right here you can use the same one i'm using here this one's you know obviously not as big bit slimmed down this time our kind is not a deployment we're defining a service here's our name we're naming it and then here's our type it's a node port then here's the important part right here the selector which app in our kubernetes cluster will this node port apply to now we saw in our deployment that we did have this in here we applied the the label app with the key i'm sorry the value nginx so when we have this here is the selector on this service it's going to look at any app we have out there any pod with the label app nginx which should be those six containers that we created and then here's the rule here for port the service will listen on port 80 the target port which will be the port that the app has exposed so nginx that container we created what port is it listening on it's 80. so the target port will be 80. now it says web right here because we actually we actually define that port over here in the deployment looking back at that down here we have under containers we defined a container port and we named it web so that's what that app is referencing or that service is referencing and then we're telling it what node port we want to use the port that is going to be exposed on our individual raspberry pi is that we can access port 80 on so here it's gonna be 3001 i'm gonna change it real quick three one one one one and now all we gotta do is deploy it so i'm going to copy all this mess here go back into our master and do the same thing we did before create a new file i'll just say harry potter underscore node port dot yaml paste all that good stuff in there ctrl x y enter and then let's deploy it cube ctl apply dash f harry potter underscore node port here we go and it is applied now how do we know because when we do cube ctl we get pods it shows us pods what about services can we see those two yes if we do cube ctl you get services it'll show us now to test this out we'll pick one of our raspberry pi's here pick a number any number i'm gonna pick let's say number three which i think is that p addresses dot six two let's try it out gonna open up a new tab gonna navigate to 10.7.1.62 and then it's gonna be port three one one one one now if this works we're gonna go to an nginx default page fingers crossed here we go yes we did it now i mean i feel like a lot but if you followed along with this that's that's a lot of stuff man that's intense not only did we install and get kubernetes up and running but then we had to learn a bit about the networking of kubernetes and then we exposed a port using a service called node port now i know it's a lot so anyone take a moment coffee break digest that a bit we're going to keep on moving though because we're about to move towards load balancing we can load balance stuff now can i tell you something we've already been load balancing yes it's kind of hard to see but with our node ports it auto magically load balances for us now sure yeah i'm hitting one node in my cluster but when it hits that one node kubernetes will auto magically load balance between all the nodes that have that app installed that pod that makes low balancing on this pretty freaking easy right it's kind of cool but it is kind of hard to see and appreciate what's happening right so let's try this i have another app we can try out that'll actually show us visually load balancing when we deploy it so let's deploy one more deployment let's try it out here is the manifest for our deployment again link in the description and this is actually from rancher it's a fun app that will visualize at low balancing which is what we want to see so let's do that now same story as before our kind is deployment for replicas we're doing two you know actually i want to do more let's go crazy i want to change it from 2 to 50. yes i want to deploy 50 which i'm really excited about let's try it out some more key things we have our selector down here the key app the value hello world and then of course we have our container image now this app unlike nginx is not running on port 80 it's going to be running on port 8080. and we're exposing that right here we're naming it web and that's pretty much all we care about yes okay so let's go ahead and copy that stuff and we're gonna go into our master and let's create another file nano i'll name it hello world hello world dot yaml we'll paste that magic in there yes control x hit y to say yep i want to save it hit enter and we're good now time to deploy it same story as before cube ctl apply dash f and the name of our file hello world dot yaml now this is going to be pretty wicked because we're deploying 50 containers all at once whoo some coffee for this before we do it and go is it yeah uh-huh yeah okay it's doing it so real quick i want to see all these things going so i'm gonna do cube ctl get pods it's going to be a lot oh look at all these that's crazy let's do it again it's going pretty freaking fast dude look at all that wow so here's where we are same story as before we deployed our uh our pods our containers with our hello world app and we deployed a lot of them a ridiculous amount of them am i going to sit here and make 50 i don't know and those are distributed across our cluster across our raspberry pi's but again we have the problem of we can't reach them they do have ip addresses but they're cluster specific in fact let's go take a look at that let me finish deploying my apps to all my stuff here it's taking forever and actually i want to visualize that in a rancher because it's so pretty so i'll navigate back over to deployments here in rancher and i'll look at my hello world app here there she is goodness gracious that's a lot of pods and look at the distribution here going across all my raspberry pi's i want to jump to pods real quick so i can see their ip addresses so that's their ips but again we can't access those ip addresses that's not in my home network that's kubernetes specific so how do we fix that well another service another node port so let's throw in another service here i know things are getting messy i'm sorry let's go ahead and punch another wall through our raspberry pi's here the port again will be port 80 80. gosh i did not draw that well and let's have that go to the node port i don't know let's just make one up three one one one seven so punch a wall thrower nodes here 8080 8080. now we could as before create a yaml file a manifest and deploy it via cli but you know i want to show you how cool rancher is we could easily do it in a gui and it goes pretty quick so you can do either or if you didn't deploy a rancher then you're stuck with the command line poor sucker no that's fine and if you want to practice with command line and keep going but let's let's do ranch real quick this is going to be fun so back here at the rancho dashboard we're going to scroll down to services on the left go ahead and click on that and from here we're going to click on create new right here and our kind any guesses it's gonna be uh it's gonna be a node port so let's go ahead and select that and this is gonna be wicked simple check this out first i'll name it doesn't have to be anything special just say hello node i don't know and then my service ports the listening port instead of port 80 this would be port 80 80. that's what the uh the container is like yep whoa whoa that's what i'm listening for right now uh target port will also be port 8080 and then our node port which we said would be three one one one seven it's the port we're going to hit when we try to access this app now we're nearly done but we have to do our selectors we have to tell this node port the service which apps to use so let's say what we configured the key was again app and the value was hello i think it was dash world let me see yes and what did you see this how cool is this this is why using the gui sometimes is kind of nice even though i love command line uh right here it auto showed us what pods are matching love that so um all we got to do now is just click uh create and power rancher sucker that was so cool so now let's visualize load balancing we're going to pick one of our notes here i'll just pick one at random again let's do 10.7.1.63 and then our port will be three one one one seven you all ready for this here we go oh oh oh yes how cool is this oh do you see what's happening here it is sending a request low balancing across all my nodes and it's hitting all the individual pods notice each one of these cows are popping up are the labels of my pots and here it is right there it says current backend how cool is that so again what this is demonstrating is that when we expose our deployment or our pods draw pods here just name them p we expose those with a service a node port np no matter which raspberry pi we hit which node we hit through that expose node port which again was three one one one seven when we hit that it is going to auto magically load balance between all the pods in our deployment man i love all these cows lighting up i want to make this my screensaver now i do want to show you one more thing it's going to add a little bit more complexity to this but it's it's cool trust me watch this it's something called an ingress it's another thing we can use in kubernetes and what it allows us to do is let's say for example we have a website i love or a dns name i love cows.com when someone hits this website i want ilovecows.com to go to my hello world application so let's make ilovecows.com happen now we're going to do this in rancher because rancher is fun and it's easy to see things now if you don't have rancher that's cool i'll show you the yaml here in a second actually a rancher will show you the yama after we finish it so here we go we're going to go over here down to under service discovery ingresses ingresses right now we don't have anything going on so i'm going to select that and we'll click on create at the top right now again kind of familiar it's going to be pretty basic pretty easy first we'll name it uh does doesn't matter what we name it cows and then our rules the request host will be i love cows.com and then our path is just going to be the root url so i love cows.com we'll just put a forward slash to make sure that's what it's looking for our target service will be hello node our node that we created for our uh hello world demo and then the port is already there just select it right now and click on save now the only thing we have to make sure is that when we go to i love the dns name that it is pointing to one of our nodes here one of our raspberry pi's now if you have a dns server in your house go ahead and do that i do but i will show you how to do it locally on your machine all we have to do here on windows is edit the host file so i'll open up notepad as an administrator that is important and then go to file and open the hosts file is located at system or i'm sorry windows system32 drivers et cetera and then it's called hosts right there bam i'll scroll all the way to the bottom here underneath all my stuff and just on an open line add your ip address i'll just do 10.7.1. ah let's just do 64. and then the dns the domain name i love cows.com i'm gonna hit ctrl s to save that and then i'll open up a command prompt just to verify it so ping i love cows.com boom it is going to the right place awesome moment of truth let's test this i love cows.com that's all we have to type in no sport specification just this yes look at that that's so freaking cool so ingresses are cool if you don't have the beauty of rancher you can always do it through the typical deployment of cube ctl apply um if you want to see what that looks like let me jump in here go to edit yaml on this guy and here's the yaml now this is a bit messy because it has some extra stuff like specifying my nodes so i will put a clean version of the ammo in the description below but that is cool right like instead of having to do you know 10.7.1.63 specifying port 31117 just go to ilovecows.com makes it really stupid easy whoo isn't that crazy dude so i'm hoping that by walking through this and showing you this you have first of all a deep respect for kubernetes because it's crazy and two i'm hoping to give you the tools to run with this this is basic stuff right it is but i hope i'm giving the tools to step forward and do some cool stuff with it at least lap it up just get your hands on practice with it and then go from there man you never know now i don't want to make this video too long but i know i already did that but i want to show you one more thing i want to show you how to like do practical things on your raspberry pi cluster right so far we've been doing demo apps right not too terribly exciting except for learning but what do you say we deploy a minecraft server to this and use a load balancer with our minecraft server let's try it out now first of all massive shout out to jeff greeley is it greeling or gearling gearling okay jeff gearling he has a great youtube channel and blog i'm looking at right now he did a touring pie which is like this you can watch the video but i like him had some trouble finding apps i could put on my raspberry pi because it is arm 64 architecture and not all containers out there in the wild can work on this so as you try to deploy apps in your cluster here you may like try to deploy ubuntu or centos or something simple as that and it will fail that's because it's not built for arm 64 architecture so what is chuck well they there are some things out there and again a huge shout out to jeff gearling for offering some uh guides on this and one i used and i'm going to use continually is minecraft now to add to your confusion and to add to the complexity installing things in kubernetes there are options like everything in it everything in life the one we've been using is the main way which is using the tool cube ctrl i'll see the main way the main way for me cube cuddle not that i'm going to rewrite that that's terrible and we define manifest and we deploy it with the apply command another way to deploy apps on kubernetes is with what's called helm helm is a tool that will use something called a helm chart this is it's crazy stuff man and this helm chart is very similar to a manifest it describes what you want to install it's just a different way to do it a lot of people prefer it i'm still learning more about it but it does the same job of manifest does now i'm telling you that right now because we're going to deploy minecraft using a helm chart now i'm going to skip the command line right now instead i'm going to use rancher to install or a helm chart i want to show you the power of rancher so here we go back in my rancher dashboard oh look at it it's so pretty oh my goodness love it first place i'm gonna go is up here to cluster explorer i'm gonna click on apps and marketplace it's kind of like an app store it'll use um helm charts to deploy apps now again because it's a raspberry pi and it's on rm64 a lot of these won't work but we're going to add a few repositories here so i'm going to click on chart repositories and i'm going to click on create to add a new one i'll name it cool stuff paste my url right here and then click on create bam it's already active okay now we're gonna go to charts up here at the top left scroll down a bit and i should see minecraft right here minecraft server we're about to install minecraft server on our raspberry pi cluster anyways let's do this click on minecraft server i'm going to name this uh deployment here i'm going to name it minecraft and there's one thing we have to change here if i click on values yaml one thing you always have to change when you deploy any kind of minecraft server is accepting the eula right here eula is set to fall so we're just going to change that to a big old true we accept everything and that's pretty much it i'm going to click on install and it's doing it for me so we've been to the command line most of the time deploying things here i'm using rancher a gui to install stuff for me we can install deployments cube ctl and we're using helm right now what's cool is actually launches cube ctl for you cue cuddle and shows you the status and by the way if you haven't noticed up here we have the uh cube cuddle shell you can access any time through the rancher ui all right and mine is done now we're gonna quickly expose minecraft because right now it's a pod and by default it's not exposed we gotta expose it a little bit so we can play minecraft so anyways we're gonna do all right here in the rancher ui now because we only installed one minecraft pod like if i go to my pods here i search for minecraft there it is right there it's installed on a raspberry 5 which is let's see one two three four five this guy right here he's running minecraft good good job guy um we need to open up a node port to him so real quick let's look at our pod here we can also see the deployment that the helm chart deployed so if i go up to deployments there it is right there minecraft what i want to do real quick is i actually click on the little dots over here and click on edit config yeah you can edit things now notice it does tell me that the helm chart or the helm app is managing this so any changes i make here might be overwritten no big deal i scroll down here i can see a lot of things i can change but what i'm looking for are first of all what port does it need to be targeted on two five five six five okay remember that let's check out the labels and annotations here we go app and minecraft minecraft we'll use that to select the app so let's go create a simple node port because we only have one pod open right so i'll go to services click on create and we want a node port i'll call this mc node port see the listening port is going to be two five five six five target port two five five six five and the node port will say is three one one one seven this will be the actual port we use when we try to connect to the server via minecraft all right and then we need our selectors we're looking at app minecraft minecraft ah i gotta spell things right craft minecraft and check this out it automatically tells me if i'm matching any pods may have a lot of pods anyways we'll create this node port click on create done simple as that right now let's um let's test minecraft let's play all right minecraft launch let's go to uh multiplayer let's uh add a server i'll name this kubernetes please work 10.7.1.62 import 31117 okay fingers crossed there we go find it find it please yes yes there it is okay let's connect join server boom wait where am i okay cool i am playing minecraft on a raspberry pi cluster it doesn't get cooler than this guys we've peaked we picked on this channel this is the best i don't play minecraft but i'll play it on a raspberry pi cluster yeah can you believe that's running off this cluster right here like that's so freaking cool anyways now we just scratched the surface on kubernetes um all right i'm done and it's amazing the fact that we can deploy something like that on a raspberry pi cluster what the heck how cool is that now many of you may be thinking okay chuck this is cool but why why do this first of all just bragging rights having something like this in your house this is a this is a work of art are you kidding me again if you want to do something like this i got links below using those links will help me because they are affiliate links anyways also the other big reason is that it does teach you a ton i can't tell you how much i learned how much i failed through the process of getting this set up projects like this teach you that's the reason i show you guys the stuff yeah it's fun yeah it's nerdy but in the long run it's teaching you stuff that you can use real skills you can take with you into the workplace that you can add to your resume i mean maybe not put on your resume created a raspberry pi cluster my house running kubernetes actually you know what add that to your resume that's pretty freaking cool actually run your resume website off your cluster come on and let me know if you want me to continue this series like how to maybe expose this to the internet and do all kinds of like let me know about that now also a massive shout out to the sponsors of this video rancher which is owned by susan linux never heard of them um of course they're amazing and they they created k3s that we installed on here they created rancher that we used to deploy stuff and monitor our dashboard monitor our deployments they're wicked awesome and they're not just used by people like me deploying raspberry pi's in their house they're used by huge enterprises managing a crazy amount of clusters they even have this thing called fleet which is all about managing ridiculous amounts of clusters so what's cool is as you play with rancher right now in your house you're learning a skill that you can take with you into the enterprise and of course a massive shout out to the other sponsor box boat who without them i wouldn't know what the junk i'm doing box boat's a company that helps people with stuff like this rancher kubernetes cloud native stuff because i don't know if you know this this stuff's kind of hard like it's really hard like i could not have done this without the help of the box bow engineers i was in contact with like they they held my hand a bit it was hard and that's a perfect demonstration of why you should use them if you ever need to deploy containers or build up your cloud native environment i'm a huge fan if you want to check out either of them rancher or box boat check it out link below i also interviewed caleb from box boat and mark abrams from suicide and we just chatted about stuff all this cool stuff we've been doing in this video so if you want to learn more go deeper i had those interviews linked below and yeah that's um this was a lot i started this video earlier in the morning today and now it's like 8 o'clock so this has been fun let me know what you think of the video in the comments below let me know if you were able to do this let me know if your is your cluster bigger than mine if it is i'm gonna have to buy some more raspberry pies and don't forget to enter the contest to win uh one of these guys link below and yeah that's about it i'll catch you guys next time no i don't need more coffee i'm good i'm just gonna keep playing minecraft [Music]
Info
Channel: NetworkChuck
Views: 794,831
Rating: undefined out of 5
Keywords: Kubernetes, raspberry pi cluster, k3s, k8s, rancher, rancher k3s, rancher raspberry pi, kubernetes on raspberry pi, kubernetes raspberry pi cluster, raspberry pi, home lab, kubernetes cluster, docker container, kubernetes tutorial, bare metal, raspberry pi 4, raspberry pi projects, raspberry pi 4 projects, raspberry pi 4 gaming, raspberry pi server, raspberry pi 4 setup, raspberry pi 4 8gb ram
Id: X9fSMGkjtug
Channel Id: undefined
Length: 63min 41sec (3821 seconds)
Published: Thu Jul 15 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.