How would I learn DevOps(If I had to Start Over)
I got this question many times like how should I start learning DevOps.
Well in this article we are gonna talk about
How should I learn DevOps by myself if I had to start from scratch?
There are certain caveats which I would like to mention -
Learning can different for everyone - The first one is the learning can be different for everyone there are certain topics which might be easy for you to understand but for some of you it might be a little difficult because you might be coming from a different programming background
Programming - Most important thing which is necessary if you are a beginner and if you want to learn DevOps is like you have to be a programmer and you should know some kind of a programming norm or you should have some kind of programming knowledge before starting to the DevOps that's the primary requirement which I would consider.
But since this is going to be a very foundation level guide which I have prepared for you so our main focus is for anyone who would like to start their DevOps journey from the scratch.
DevOps is a really big field with lots of components starting with a GitHub Jenkins, Ansible, Puppet, Kubernetes, Helm chart, and Docker but the main focus on the DevOps, the field is on continuous delivery as well as availability.
But don't worry we are gonna talk on each topic and each component in a bit more details and how can you start learning these components if you haven't have any experience before so the first component which I'm talking about is -
Table of Content
GitHub - Do you know GitHub if not then you should go and search about GitHub on Google there are so many tutorials that are available there for the beginner but in a nutshell -
What is GitHub?
GitHub is a code repository where a developer can push their code so that it is available for other developers or other tools to fetch those code and execute those code.
So you should learn GitHub first, because every step of every operation which we do in the DevOps somewhere revolves around GitHub.
You must be very much familiar with following GitHub Concepts -
- Pull Request
So you need to pull your code what I mean by pull once developer submits a code into the GitHub then you need to pull that code to deploy or to execute.
You have to be familiar with GitHub or either Bitbucket or SVN so these are the most three popular components which you should know before starting the DevOps.
So the next component which I'm gonna talk about is Jenkins. After you pushed your code to GitHub or Bitbucket or SVN and once your code resides somewhere in your repository so from there you can access it.
Jenkins is something where we are going to set up our pipeline.Now it might be a little difficult to understand -
"What is the pipeline?"
In a very simple way, pipelines are continuous execution and deployment, and testing of a code.
So what happens in Jenkins is -
- You create your pipeline using scripts
- You write some tests to verify your code
- Jenkin's Pipeline will test your code based on the test cases which you have prepared and set up in the pipeline.
What if you do not know Jenkins?
Okay, so it might be possible like you might not know Jenkins before or you haven't worked with Jenkins before.
1st Step - Install Jenkins
It might sound very overwhelming like how should I learn Jenkins or how should I repair a pipeline. Don't worry what you need to do is install Jenkins and that's going to be your first step.
2nd Step - Create your first HelloWorld Pipeline
If you are going to learn Jenkins first try to set up a Jenkins pipeline by installing Jenkins somewhere on your development machine or laptop after that try to create some hello world pipeline in it and I know Jenkins has a very good really good documentation on how to set up this tool, so you can go and follow those tutorials so that is going to build up your basic on how to use Jenkins
3rd Step - Setup your Kubernetes jenkins pipeline on AWS
Taking a step further if you want to try setting up kubernetes jenkins pipeline on AWS then I would recommend following this post - How to setup kubernetes jenkins pipeline on AWS?
3. Continuous delivery
All right since we have talked about Git and Jenkins now there is one more concept Continuous delivery so continuous delivery concept is very much popular in the field of DevOps because you have to deliver the code continuously.
For that there are two components -
First we will fetch the code form GitHub.
Then that code will be deployed using Jenkins so that's how you're going to prepare your Continuous Environment where developers don't have to do anything manually by themselves.
On behalf of developers, Jenkins will take care of deployment, test execution and preparing your final release build.
This is how this continuous pipeline or continuous delivery model has been built around git and Jenkins, we will talk furthermore as we deep down into this article.
The next component which I am talking about here is the Docker.
Docker is a very crucial component in terms of the DevOps field because you can put your code inside your Docker container and you can ship this container to any other machine or any other server where you want to deploy your application.
If you know about Docker then it's really good and if you don't know about Docker then please go ahead and read about some basic about Docker, so that you get familiar with the concepts of Docker.
But since you are starting with the DevOps then Docker will come at a very later stage. If you are an absolute beginner I would first go and learn Git and Jenkins then I'll come to Docker.
But yeah Docker is an important concept you should know if you want to be an expert in the field of DevOps.
The next component which I am talking about is Ansible or Puppet.
So let's consider an example you are a developer and you build an application using some programming language and after building that application you want to deploy it on production -
- You will compile your code
- After compiling and if there is no error then you are going to take out this code and deploy it on some remote server
- Then finally that code will run into the production that is your final objective
So what you did is - You just build your code manually you copied that code and put it on a remote server that is too manually and then finally you executed the code in the production.
Imagine if you can automate all these steps -
- Copying and putting it onto the remote server
- Deployment on the actual server
So Ansible and Puppet these two scripting languages which can help you to deploy and automate this kind of tasks and developer don't have to do this task manually.
But Ansible is an Open Source and Puppet is a little bit proprietary, so you have to pay for it for using the Puppet so Ansible and Puppet both are from different venders.
Moreover, most people are preferring Ansible because it's robust and it's open-source although you can use Puppet if your company is providing you a Puppet license . But it's more of a shift toward Ansible because it's open source and more robust.
The next component which I'm talking about is Kubernetes Which is more of an advanced topic I know Kubernetes is a very popular and quite buzz topic right now in the DevOps industry.
Everyone wants to learn about Kubernetes and I have some lab sessions on setting up kubernetes on Ubuntu and CentOS uploaded on Kubernetes on my channel which you can go back and check. In the lab session, I have shown like if you want to start from scratch -
How will you install Kubernetes on Ubuntu and centos?
So all these tutorials are there you can go and check but if you are an absolute beginner and you don't know about Kubernetes then Kubernetes is a container orchestration tool. I know this word is a little bit more trendy but in a simple word if I explain -
If you have five or ten Docker containers running at the same time then how will you manage those containers?
Answer - Kubernetes
Kubernetes is going to manage your Docker containers. What Kubernetes will do in a nutshell will help you to run your Docker container in your production environment.
So what will happen is Kubernetes will manage Docker and inside Docker, you will have your application running so ultimately Kubernetes will be managing your container in the production environment.
Kubernetes is a framework which is developed by Google and then it later released somewhere around 2015 or 2016 and then it became quite popular in the DevOps community and it is adopted very well so Kubernetes is a little bit more advanced topic and this is where I started because I had a little bit of background on Git, Jenkins, Ansible, and Docker so learning Kubernetes was a bit of a curve but it was easy for me to understand the Kubernetes concepts.
But if you don't know Kubernetes then I would highly recommend you to learn something about Docker and then come to Kubernetes.
7. Helm chart
The next component which I am going to talk about is the Helm chart and this is one more framework that comes after Kubernetes.
So if you know Kubernetes then after you can start learning about Helm chart because Helm chart is built to manage your Kubernetes task, so you should know Kubernetes before you start learning Helm chart.
How Helm chart comes into the picture, so, first of all, you have your application which you might have developed using some programming language it can be java, angular node.js vue.js, python or any programming language.
So you put that application inside your Docker container and after you build your Docker container then you are going to use Kubernetes to manage that Docker container
okay everything seems simple but who is going to manage Kubernetes?
The answer is a Helm chart. So Helm chart will help you to manage Kubernetes tasks so it is kind of an automation tool or automation framework which helps you to automate this kind of a Kubernetes task which you do daily, so Helm chart will help you in that case.
But if you are a beginner then I would not recommend going to learn Helm chart directly instead -
- Learn Docker
- Learn Kubernetes
- Then go for a Helm chart
(Note - If you are already aware about Kuberntes and Docker then you can read more on - Getting Started with Helm Chart )
Okay since we have talked about all the component and the two concepts like continuous delivery and availability so now I would like you to evaluate yourself -
- What you know?
- What you want to know more?
- What you want to learn more?
So if you know Jenkins then I would say just go and learn Docker or Ansible.
If you are not familiar and if you are an absolute Beginner here then I would highly recommend learning something about Git or bitbucket or svn because these are the versioning tool which is necessary for you if you want to go into the DevOps.
8. Linux Bash Scripting
One more thing which I would like to mention is you should command your Linux also.
Because you're going to interact with the Linux server quite a lot if you are going to be a DevOp.
You should know and have to be a little bit fluent with your Linux command and because you need to perform all this operation on a terminal that is Putty.
For operating Putty, you should know the Linux command on your fingertips so if you don't know Linux command and if you are not very good with the Linux command then i would highly encourage you to learn some Linux basics.
These are my key giveaways like if you want to start learning your DevOps then focus on these components/topics and then go for some higher topics like
Since I have started everything from Kubernetes and then started preparing this lab session so please go back and check those lab sessions If you want to learn about Kubernetes.
If you are an absolute beginner then go for Kubernetes installation on ubuntu and CentOS and how you gonna set up the Kubernetes cluster by yourself. Then go for more advanced topics like AWS or Google cloud platform but these are like a very later stage.
If you know the above concepts very well then it's really helpful to perform this kind of operation on a cloud but since if I'm assuming you you are a very beginner and so I would highly encourage you to learn these concepts before you jumping to some cloud platform or AWS so I hope you can start learning something after evaluating yourself like where you stand and which tool you want to focus and which component you want to focus on first.
If you have any questions then please reach out to me on -
- Twitter - https://twitter.com/wagh_rahul
- Facebook - https://www.facebook.com/Jhooq-100586705010648