I just wanted to share my journey from working in build and release profile and shifting to DevOps.
In my first few years of my professional career, I was working in Build and release engineer profile. The tools and technologies included were
SCM : IBM Rational ClearCase
Task Management: IBM Rational ClearQuest
CI tool : IBM Rational BuildForge
Build tools : Ant
Operating system : IBM AIX, windows server 2012
You could imagine these IBM Rational tools were popular earlier. But already the new open source tools started become popular and tools like Jenkins, Git etc are widely adopted.
So it was necessary to start working on new age tools rather than sticking on old ones. In fact this is important for an IT professional.
So let's see what's needed to jump into DevOps space...
Source code management is very important to manage project code. Also this takes care of versioning, history and merging code from different developers. Understanding concepts, using basic commands, creating repositories and committing changes..
git clone #clone existing repository git pull #get changes from remote git init #initialise current directory git branch #current branch you are in and work with branches git status #current status of repo git config #config git git add #stage the changes git commit #commit the changes locally git push #push the changes to remote repo git log #see commit history of a repo
Also understanding git branch management is important and it differs from one org to other org.
master branch # contains production code release branches # contains the individual release changes features/bugfix branches # contains new feature/prod fix change
I had java knowledge to build a web application. Also python seems to be a good fit for any automation that we do in DevOps space apart from the shell scripting knowledge.
I just explored jenkins.io to setup jenkins in docker container and play with it. Jenkins is most popular CI tools nowadays although there are tons of other tools are in the market like CircleCI, TravisCI, TeamCity, GitlabCI, droneCI etc..
You can use jenkins official docker image to run jenkins server as mentioned in the documentation
Also jenkins can be used as a CD tool as well.
But you can also learn another CD tool if you like.. GoCD, Spinnaker, Harness etc
Ideally knowledge on Linux is very much required to build a successful career in DevOps.
- Linux boot process
- Managing system services
- Installing web/application servers and other softwares
- Basic commands (find, sed, lsof, awk, ps, top, free, netstat etc)
- Understand linux file system
- shell scripting
- TCP/IP networking fundamentals
- SSH, SCP, SFTP
- HTTP, SSL, TLS, DNS
- nslookup, host, netstat, dig, traceroute, ping
Containers are widely used since its inception and knowledge on the containers is very important. Containers make building and shipping software very easy. It is very lightweight. Docker is most popular container.
When we use containers in production, hundreds of containers are needed to be deployed. Managing them manually is very difficult. Orchestration tools help to manage these automatically and provides service discovery, self-healing, auto-scaling features.
Kubernetes is popular container orchestration tool and it's widely used in this microservices era.
AWS is the best choice to get started with and also they provide 1-year free tier which is enough to learn basic concepts and for doing practice. Make sure to terminate the resources as soon as you done practicing.
Fundamentals to learn
- Compute : EC2, AMIs, ASG, Launch templates
- Storage : EBS, EFS, S3 etc
- Networking/Security: VPC, Subnet, Route53, LB, Security groups, ACLs
The above basic concepts are almost same in other clouds as well with little or no difference. Azure, GCP and OracleCloud also some of the other popular cloud providers.
Terraform was the first infrastructure provisioning tool or Infrastructure as code tool that I learnt.
Terraform scripts are written using HCL (Hashicorp Configuration Language)
Structure of a basic terraform project..
main.tf - main file to create some resources someresource.tf - apart from main.tf you can also organize resource creation in other tf files variables.tf - declare variables used in other tf files outputs.tf - Display output such as created instance IP, LoadBalancer name etc
Some important commands
terraform init # used to initialise a working directory terraform plan # create a plan terraform apply # Apply the plan, creates the desired resources terraform destroy # Destroy the resources terraform refresh # refreshes local state with current resource status terraform workspace list/select # List and select the correct workspace
You can also learn CloudFormation if you are using AWS as cloud provider. But Terraform is more generic tool and you can use it in any other cloud providers as well in future.
First config management tool I learned was Chef. Chef Infra automates how infrastructure is deployed, configured and maintained..
You'll create cookbooks from chef workstation and upload it to check server. The Chef Client is installed all the nodes which needs to be managed by chef and it configures the nodes to desired state.
But lot of things changed since i stopped using chef.
Ansible also another popular tools in configuration management automation area.
Ansible doesn't have any central server but playbooks are managed in control machines(client machines) and changes are pushed to target servers. Also we can do application deployment using Ansible. They do provide zero downtime deployment features and you can customize the deployment as per requirement.
I also learned about the combination of Telegraf, InfluxDB and Grafana which makes monitoring the infrastructure easy.
- Telegraf : Binary you can install in each of the nodes to capture metrics and configure it to send them to influxDB
- InfluxDB : Time-series DB which stores those metrics
- Grafana : Shows metrics visually via nice dashboards
You can also explore TICK, ELK stack for monitoring..
This is just overview of what basics is required to learn about DevOps. But understanding of the DevOps is also important not just the tools.
I'm going to share more on each of the topics mentioned above and share my journey along the way in coming days.
Don't forget to follow me on twitter..