Multi Cloud Deployments with Spinnaker
As we continue to see a massive move to the cloud by Global 2,000 enterprises, there is a real concern about vendor lock-in to the large cloud vendors like Amazon AWS, Google GCP and Microsoft Azure.
Many engineering teams are looking for solutions that help abstract out the underlying cloud implementation. Spinnaker, a open source tool developed by Netflix, was designed to do exactly that.
Armory can help Global 2,000 customers implement Spinnaker in a way that is consistent with (and even improves upon) their deployment workflows, including multi-cloud deployment pipelines. Below we show an example pipeline that deploys to both AWS & GCP.
In the video we cover the following:
Deploying Loadbalancers, Clusters and Security groups in both Google Cloud Platform (GCP) and Amazon Webservices.
Multi-cloud pipeline for both AWS & GCP.
Blue/Green deployments with Spinnaker & GCP/AWS
Automated deployments & manual QA processes.
We also did this followup afterwards, if you’d like to dig in deeper.
If you’re interested in learning more feel free to reach out below!
Here’s a Transcript:
Isaac: Hi, how’s it going? This is Isaac Mosquera. I’m the CTO of Armory. And today I’m going to show you a multi-cloud deployment using Spinnaker. So let’s get started. So the pipeline first starts. And you can configure it to be kicked off by a number of different methodologies like CRON or Docker Registry, somebody making a Git commit. Today we’re just going to do a Jenkins deployment. So once this package gets built inside of Jenkins, we’re going to distribute that package to both AWS and GCP. And this simple hello world application that we have is just a web application that starts off on port 8080 and shows you our logo as well as any environment variables that will be on the machine.
Before we get started, I’m going to show you what it’s like to configure an actual deployment. So let’s go here to Deploy to Prod. I haven’t actually configured a deployment group here or server group. So let’s select Amazon. Now I’ve already configured the Google cloud deployment. You can also have Kubernetes, OpenStack, Cloud Foundry as deployment targets. Today we’re going to just do one with Amazon. And setting it up for GCP is also very similar. We’re going to select the previous template that we’ve created before. We’re going to change this to be prod-aws instead of stage. And we’re also able to select a deployment strategy. So there are a few here, one of them being Red/Black, also known as Blue/Green. We’re going to select to leave two server groups behind. So we’re going to choose our production load balancer here, and we’re going to click Add. So now we’re going to kick off the pipeline. And this is going to go through and deploy new version of our application to stage, wait for us to have a manual judgment, meaning we’re going to look at it and see if our deployment is good or not before moving to prod.
So we’re back. We’ve kicked off our deployment pipeline. The first step is to bake an image on both Amazon and GCP as discussed earlier. The next step is to just deploy to a staging environment on both AWS and GCP. Again, the base application is still the same Java application that we created inside of our Jenkins pipeline or our Jenkins build server. And you can see that here. So this is completed. And this is what ultimately kicked off our pipeline inside of Spinnaker. Again, you can see that it’s just creating this Java application. This is all built with gradle, creates a Debian to install into a Linux machine. So right now, we’re just waiting for GCP and Amazon to spin up their machines. We’re waiting for responses for both Amazon and AWS. You can see that instances are being created and it’s waiting for a response from those servers. So let’s take a look at the cluster view of Spinnaker. And you can see here the clusters that are being spun up or the servers that are being spun up. We previously deployed version number 5 to AWS on stage. And you can see that it’s AWS by clicking here and looking at the instance information. You know that it’s in us-west-2. It’s got this AMI ID. And it’s attached to a particular load balancer. And then you see a whole bunch of private and public DNS information. The new one is still being spun up, and it’s waiting for its health to come back positive. If we look back on the stage deployment to GCP, we have very similar information. The instance is also waiting to be spun up. You see that it’s in your Google account in us-central1-f. And it’s going through this standard deployment process. We get an external IP. So if we were to click on this, it opens up a new browser. And we’re able to see that our Java application is indeed running. And it did respond back with an actual screen. So we’re going to wait for this stuff to spin up, and then we’re going to move on to our next step.
Hey, and now we’re back. We’re looking at the deployment to AWS and GCP in production. GCP is already completed, and now we’re just waiting for the production deployment to AWS. You’re looking at the pipeline view. But let’s take a look at the existing clusters and the instances that are being brought up. So right now, this was brought up for stage on Amazon. Here’s production on Amazon. The instance is read because it hasn’t been fully initialized and it’s not accepting traffic yet, but it will be soon. Once that turns green, we will disable the previous version, which is version 0 here. If we want to take a look at the application, we can go look at our load balancer. So we also set up production load balancers. You can set them up for Amazon, GCP. I also have Kubernetes configured. But again, it supports OpenStack, Azure, and other cloud services.
So let’s take a look at the service I’ve deployed. So I’m just going to click here. And we’re able to… So it’s still waiting for this service to come up. And once this is ready, then the service will become available for us. For stage, it should be there, as well as you see there. And now we’re waiting for GCP production. Let’s see where the status is. So when all the steps inside of Spinnaker, you can see detailed steps as to what it’s doing behind the scenes. So it deployed to us-west-2. We’re now disabling the previous cluster because the previous deployment succeeded. So we’re just waiting for this cluster to be disabled. And once that’s disabled, it should be all done. It should be all green.
So we’re back. We see that the entire pipeline deployed correctly. Prod Amazon is all green. Prod GCP is also all green. We can take a look at what was deployed. One instance was deployed in production. We can see the external IP address. Let’s go to it and see how it looks. Here’s our application. It was brought up. We can also take a look at production Amazon as well. So let’s see here. We’re going to look at this particular instance. Here’s our public DNS name. We’re going to click on that, change the port there. And you see the cloud environment variables have been passed through. It tells us that it’s prod-amazon. It’s in this region with this version number of our instance and deployment. It always goes back and it shows you a whole bunch of different information as to what actually was deployed. And this is just really helpful if you ever need to debug any problems that you might have with your particular instance.
So that’s it for now. Thanks for watching. And … you guys soon.