Introduction to Kubernetes
The software industry is rapidly using containers as a way to
facilitate development, deployment, and environment
orchestration for Application Developers. When it comes to the
deployment of the application to the Kubernetes Cluster, It
becomes very complicated and tedious task. Continuous
Integration and Continuous Deployment is the principle of
DevOps which can be used for Kubernetes application
deployment.
This explains how easy you can set up CI/CD for Kubernetes
cluster by using following components:
- Local Development Environment.
- CI Tools. (Gitlab, Github, etc.)
- CD Tools. (Jenkins, etc.)
- Container Registry. (AWS ECR, Gitlab Registry, etc.)
-
Kubernetes Cluster. (AWS EKS, On-Premise Kubernetes Cluster,
etc.)
Kubernetes CI/CD Architecture
What is Continuous Integration ?
Continuous Integration is a development practice used by the
developers, where each developer integrates the code into a
shared repository frequently. Each integration can be verified
by an automated build and automated tests using CI Tools.
Developer push and commit the code to a shared/central
repository.
What is Continuous Deployment ?
Continuous deployment is a strategy for software releases.
where the code, which is committed by the developer passes an
automated build and automated testing phase, is automatically
released into the production environment, making changes that
are visible to the software's users.
Steps involved in Kubernetes CI/CD
Create Production ready Application Service
Setup CI Repository
-
Create and configure shared repository for Continuous Push,
Commit, etc.Here we are using Gitlab as shared repository.
Setup CD Tool
-
Install and configure continuous deployment tools for
automatic build and test. Builds are created from the Build
management scripts, written inside Build Configuration. Here
we are using Jenkins as CD Tool.
Setup Container Registry
-
Create central container registry such as AWS EKS or Gitlab
Registry Service. CD Tools will push the container image to
the central container registry.
Create Kubernetes Cluster
-
Development K8S Cluster: Use development support environment
for creating Kubernetes Cluster. Eg : Minikube.
-
Cloud Native K8S Cluster Services: Use Cloud Services to
create Kubernetes Cluster. Eg : AWS EKS Service.
-
On-Premise K8S Cluster: Create your own Kubernetes Cluster
with the help of master and worker nodes.
Working
- Push and commit the code to the Gitlab repository.
-
Gitlab repository will run the webhook. Webhook is the
Jenkins url hit by Gitlab when it has new push.
-
Jenkins will understand that Gitlab has new code and it will
take the code from Gitlab and run the Build Script or Test
Scripts.
-
Jenkins will first create the docker image for application
and then it will be pushed to the Container Registry.
-
Jenkins will run second task as updating Kubernetes
Development Pod Image.
Advantages
- Rapid Deployment.
- Task Automation. Eg: Updating pod,etc.
Disadvantage
-
Kubernetes CI/CD process does not guarantee that your
current processes are fully served while updating the pod
image.
Eg: Consider backend service is serving to the request made
by frontend application. Backend services will take up to 3
min to process the request, within that time period if
developer push any new code then backend service will
terminate all the current serving requests and update the
pod image.
Conclusion
We understand that Kubernetes rolling deployment is very easy
with the help of CI/CD. We also acknowledged that while
updating new pod image, the current requests are terminated.