Skip to main content

Release and Tagging strategy for Microservices running on Kubernetes

Releasing product is one of the critical phase of software development life cycle, so much brainstorming will go in to design versioning and release strategy for a product. In olden days, it was all different, applications were monolithic, build and release management teams used to build this, entirely as a package (.WAR or .EAR files) by creating one version and putting it in artifact repository, triggering a process to deploy package in application servers. Versioning is pretty straight forward because it is monolithic and treated as one application.

Now things are changed, considering complexity and inflexibility of monolithic application, people has opted to build application as set of smaller and interconnected services called microservices. In effect of this, versioning and releasing of individual microservices and for overall application became complex. There are no straight forward principles which solves problem, it entirely depends on various factors like branching strategy for microservices, source code repository management (multi repository vs mono repository), build release tools to deploy and platform on which its deployed.

We as a team, based on our project requirements decided to use mono repository strategy for our application code and one fixed branch strategy for individual microservice. Master branch holds production ready and consolidated microservices code where each service keeps their code in one dedicated folder. kubernetes deployment yamls and cofigurations maintained in another repository. Considering above all, we have designed and implemented Tagging strategy for our microservices, which helps us to release and version our product efficiently.

Following flow chart shows sequence of events happens during release:


Basically an orchestrator called Release tagging jenkins job, monitors any merges happens to master on microservice repo via hook job and triggers respective ms builds, prepares versions of all microservices based on latest successful builds, applies to kubernetes cluster and watches for changes to take place. Based on its current build numbers, it forms a release tag and updates to source code repository and deployments repository, triggers test jobs and updates test case status back to tag release release notes process.

Advantages:
  •  Single release tag is operated across all the stages
  •  Using release tag, it is easy to back track from artifact to its source code hash. For operations teams, it is lot easier to read revisions for deployments via release tags (release tag updated to kubernetes change cause after each deployment). We can check by using this command kubectl rollout history deploy/deploymentName
  • Deployments becomes hassle free using release tag on various production environments
  • Rolling update and rollback is quite easy based on tags
Snapshot of Jenkins Pipeline:

GitTagging:









Kubernetes Deployment Revisions:


Comments

Popular posts from this blog

Automation scripts for Admins to run on Jenkins Script Console

Jenkins script console is one of the key feature for administrators to automate tasks, troubleshoot on server side like cleaning up older job builds, deleting/creating bunch of jobs, setting up log rotation on all jobs etc. It's hard and monotonous for them to do this tasks from UI repeatedly. The following scripts certainly helps to maintain and operate Jenkins efficiently.

Insights about Certified Kubernetes Administrator(CKA)

Attending certification exams is one of the way to test our skills and to check whether we are moving in right direction towards understanding technology properly. I have taken CKA exam in December 2018 and passed it with 92%. Overall it was very good experience, it's not that tough if you are already working on kubernetes clusters. Major advantage of taking up CKA is we will be able to cover almost all kubernetes concepts, core components and features etc during preparation. Normally in day to day work, we do not get opportunity to cover everything. Experiences: As a first step, I have read CKA experiences in Internet, it certainly gave me an idea how to prepare and how exam pattern looks like. Sharing some of the links. https://linuxacademy.com/community/posts/show/topic/25094-cka-exam-experience-and-some-useful-tips https://suraj.pro/post/journey-to-cka/ https://suraj.io/post/road-to-cka/ https://medium.com/@walidshaari/kubernetes-certified-administrator-cka-43a25ca4c61