 So kind of back to the idea of virtual machines fitting within the good ops model and And just the fact that they do have kind of lives of their own there is There are some things that you can change about a VM Live but not very many and so you know obviously we have we check all the boxes except for the last one where We're reconciling so In the case of the demo that I'm going to run at the end of this I'm using Argo CD and Kuvert By Downstream so right now I ran my demo with the open shift and so it's open shift virtualization open shift getoffs But the reality is both of those products are under the hood Just the the downstream of an upstream community in Kuvert and Argo CD So the desired state being expressed declaratively is handled by Kuvert The state being stored is handled by Argo CD and Pulling it automatically from the source. I actually have a github repo that I'll share later Now the thing about the state being continuously reconciled We have some things that The virtual machine is going to control but not allow you to change while the virtual machine is running And so there there is some intent on providing things like memory expansion and You know hot pluggable cores and things like that, but it's just not quite there within Kubernetes in a way that will make it easy to do within Kuvert and so right now all of these resources are something that are immutable once you create a virtual machine You can actually you can change them, but you can't change them for the running virtual machine so The one thing that we really can get in and reconcile is the state Which you can have as running or stopped or or actually several state hints like You know run until end and restart if if failed things like that And so you have this kind of concept like you know the rest of The entire section of things that virtual machines do or you know under the control of the guest and therefore not touchable by kubernetes So what can we do with that bit of the state that we can reconcile? one of the easier expressions right now is Stateless virtual machines and so you get this idea of virtual machines as cattle kind of in the pets versus cattle mode And so you can run test platforms basically anywhere where you're running a virtual machine that you run it once Do something and then kill it afterwards and you don't care what happens to the the data on the virtual machine afterwards And so one possible example of that is virtual desktops. You can run a farm of virtual desktops using kubernetes cluster and then basically by You know kind of borrowing your authentication and your Disk space from some other network service. You can run those Pretty nicely ephemeraly Another great example is killer coda killer coda is a group that took over after catacoda from a Riley shut down and They allow you to do quick deployments of virtual machines that either run like Ubuntu images or even small Kubernetes clusters and They're essentially just a quick disposable VMs for teaching scenarios So you get to to run a catacoda scenario for about an hour and then the VMs go away And the cool thing we learned when we went to try to Port from catacoda to killer coda is that killer coda actually runs on Kuvert So we had a great synergy there so the the other side of that though and the subject of the talk is when we're talking about legacy applications and so for a legacy VM, this is something that is Not stateless you're going to have some state between runs You may have internal configuration management like through puppet or ansible or something like that that Maintains the state of the virtual machine separate from what's going on in the kube cluster and As I'm hoping with the thrust of this talk We hope that these would be a good target for modernization So which is one of the reasons that you would want to bring one of these VMs into a kubernetes cluster and So this is the The kind of flowchart of what I would like to demonstrate real quickly so with this over here on the left we have a Legacy virtual machine and it's running for services and in interest of full disclosure. I Completely crib this example from the sdo project. This is their you know how to do a service mesh and kubernetes Project and they start with microservice deployments and so I Went backwards to get a nice demo And so I'm going to be working backwards for the for the rest of the presentation So starting off with the virtual machine that is running all these services you can put it into the kubernetes cluster and you can And I'm realizing that I am starting to overload things so it's it's running VM services on the virtual machine and You have kubeservice kubeserv sorry kubernetes services Pointing at different aspects of the virtual machine one of the nice things about running a virtual machine is a pot in a pod is that you can treat it as any other pod you can point services at TCP ports and It doesn't care that underneath the external face of the pod is an actual virtual machine running It just goes through as just as if it were a regular pod running Whatever container you might have And so starting off with the virtual machine We then decide that we're going to have a project to modernize the product page Which means that we spin up a deployment and once that deployment is looking good or you know in a kind of a B or canary testing scenarios something that cargo CD is very good at helping with you can test that deployment against How the the virtual machine was running and when it's ready to take over you just simply point your services around and The same works for the other microservices in order as you go and so in the case of the the detail service you just need the Basically set up the details deployment and point the details Service at it and then it gets a little more interesting when you have the product page pointing at reviews and then pointing back at At the reviews deployment and finally we have Rating service and once you've gotten to this point you notice that there's nothing pointing at the actual virtual machine anymore So we just go ahead and turn it off and so Real quickly and as I mentioned before this demonstrations Actually in OpenShift and so in here you're looking at the developer view of OpenShift virtualization With one virtual machine there in the middle and so we have our Argo CD panel And so everything represented here is as it was in the first slide where you have the virtual machine a stack of services pointing at it You can see everything is up and running and here's the front face of the actual application itself So I'll point out a couple of things on on this because as you modernize sometimes you also want to you know add features and so Right now the title of this one is book info legacy. You can see here in the very light gray text in the black bar we have Star ratings for for this book there. They're all in black and right now. We have just kind of a generic publisher name publisher a and I'm pointing those out because of course I'm going to be changing those And so here's the the git repository I'll just kind of go through and look at the two tags that I have and so I'm I was running through this demo and Essentially I had all the code in the repository and just in order to record the demonstration. I just ran back in time so When we get to this screen actually we'll take a look at the commit log here We'll see that we're we're just going to go back in time and set the the tag that points to dev to This initial commit with the legacy virtual machine and there's a little bit of force pushing just to make the demonstration work and of course the Argo CD application is pointing at that dev tag so I'm going in and I'm just doing a refresh and Then the rest of its hands off. There's auto sync going on and Also, let's see and there you can see that the Deployment popped up for the product page and now you can see As soon as we get a refresh The name of the page has changed now. You're you're working from the microservice, but this part This part over here with the details and the stars all those are still on the VM And so kind of as the the slides that I had right before the demo go the Rest of the demonstration is basically, you know rinse and repeat So we're going through showing that river refresh pop up a new deployment check the page and now Publishers change to career corporation because the microservice that I'm using actually goes out to I think it's Google's API to search for the real book and so it finds one and the last interesting one are there there's two more deployments left to go but last kind of interesting one that has a big effect is the the one that changes the reviews service so that pops up and We'll see that the stars change color and We we have a reviews served by now as a container reference and I'll just kind of muddle ahead a little bit because The ratings is just more of the same there didn't actually change the output too much. I did want to get to that one okay so the last part of this is a Simple one-line change that changes the VM state from running to stopped It's a single-line change in the animal and so with this we do a quick refresh just to show Yes, the page is still up and running all all the services are still up and running But the VM is actually stopped and that concludes the demo portion Don't have any questions. I'll put up some some links here Oh and covert and our goproge for that matter are both in the Was it the partner pavilion off to the side of the the major group Yeah, so come visit us. There's t-shirts to be had at the Cupert booth at least I can speak for Hey, I Had a very like I felt like it was a really boring demo because it just all worked Wasn't anything exciting, but I like it Thank you all