Introduction to Spinnaker – Global Continuous Delivery
- Agile, AWS, DevOps, Technology
Continuous Delivery is the term that comes with agile methodology. You want to make changes frequently and deliver them without hassle onto production environment. Spinnaker is a Continuous delivery platform developed by Netflix that can make your way easy. According to the official website:
“Spinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence.”
This blog and the next blogs in this series, I will try to explain how spinnaker works, it’s capabilities & limitations, and how you can use Spinnaker in different use cases.
What Can Spinnaker Do?
Being a Continuous Delivery tool, Spinnaker can manage your infrastructure as well as your deployments:
Cluster Management:
Spinnaker can manage the cloud resources such as load balancers, security groups, clusters etc.
Deployment management:
Spinnaker manages your deployments with the help of Pipelines. We will explore in detail about pipelines and other Spinnaker terminologies in a while.
Supported Cloud providers
As mentioned above, spinnaker supports multiple cloud providers:
At the time of writing this blog, Spinnaker has unofficial support for Docker containers as well. But that is still in beta phase. But if you want, you can use at your own risk.
Spinnaker Concepts:
At the top of the hierarchy in Spinnaker, you have a project. A project can have multiple applications. For example, If your Project is TTN, your applications can be Reap, HRMS, Cafeteria etc. or you can have multiple environments of your project as your applications.
An Application can have multiple services running under it, the services, in turn, will have multiple server groups. A server group is a collection of EC2 instances, associated with a security group and/or a load balancer.
A server group can be analogous with an Autoscaling group in AWS.
Spinnaker Architecture/Components
Spinnaker is a micro-services based platform. Following micro-services make spinnaker work:
Image courtesy: Netflix
- Deck: Deck is the user interface and is a node.js application. It uses JSON to push and pull information between other components.
- Gate: Gate is the service gateway to Spinnaker.
- Clouddriver: Clouddriver is the integration with the cloud providers such as AWS, Google Cloud Platform, Azure etc.
- Orca: The pipeline and task execution are handled by Orca. It is the orchestration engine of Spinnaker.
- Rosco: Rosco is a packer based bakery, responsible for creating machine images.
- Front50: Front50 is the data storage. It stores pipelines, applications, and notifications.
- Igor: Igor is the components that support and integrates Jenkins with spinnaker. You can trigger Jenkins jobs from Spinnaker or trigger a Spinnaker pipeline from a Jenkins job.
- Echo: Echo is the event service, and is responsible for sending out the notifications, which supports integrations with Email, SMS, Slack, and Hipchat.
- Rush: Rush is the scripting engine or script execution service for Spinnaker.
Spinnaker pipelines
Pipelines are key deployment management construct in Spinnaker. A pipeline is a combination of different stages. The pipeline has parameters (which are accessible from all the stages of a pipeline) and automated triggers such as Jenkins job, CRON schedule, or another pipeline. These triggers are optional and you can execute a pipeline manually. This is how a Spinnaker pipeline looks like:
Following are the stages supported by Spinnaker pipelines:
- Bake: You can bake an image (in a specified region) on top of Debian or RedHat based machine images by providing a list of packages to be installed into the image.
- Find: A previously baked image can be found from existing clusters.
- Deploy: Deploy stage deploys previously Baked or Found image.
- Destroy Server Group: Destroys the server group by terminating the instances and auto-scaling-groups etc.
- Disable Server Group: An existing active server group can be disabled.
- Enable Server Group: A disabled server group can be enabled from this stage.
- Jenkins: To run a Jenkins job, this stage will be used.
- Manual Judgement: If you want approval before continuing to next stages or next pipeline, you can insert the stage for Manual Judgement in your pipeline.
- Pipeline: Other pipelines can be executed using this stage.
- Resize server group: Resizing the server group can be achieved from this stage.
- Script: You can also execute a shell script.
- Shrink cluster: This stage will shrink a selected cluster.
- Wait: You can insert wait for specified amount of time.
Conclusion
This blog provides an overview of what spinnaker is, its capabilities and operations. In the next few articles in this series, we will learn more about setting up Spinnaker, pipeline execution, and few use cases.