Introduction
Hey everyone! As you know, I've always been a data guy, diving deep into the realms of data science. But recently, I've decided to give DevOps a try. Why, you ask? Well, thanks to the amazing DevOps community and a special shoutout to "kubeden" for enlightening me on how fascinating this field can be, I thought, why not explore it? So, I decided to take a detour from my data journey and spend some time in the DevOps world.
My Background
I’ve been a developer for three years now, with some experience in cloud computing and AWS. So, I figured learning DevOps might be a bit easier given my background. Here’s a rundown of what I’ve learned in the past four days during my free time:
AWS
IAM
-
Users: Managing user accounts and permissions.
-
Groups: Organizing users into groups for easier management.
-
Policies (Permissions): Defining and assigning permissions to users and groups.
Amazon Elastic Container Service (ECS) and ECR
-
Deploy Docker Container:
-
Create Cluster: Setting up a new ECS cluster.
-
Service API:
-
Tasks: Running individual containers.
-
Load Balancer: Distributing traffic among containers.
-
Health Checker: Monitoring container health.
Elastic Beanstalk
Deploying and managing applications without worrying about the underlying infrastructure.
Docker
Basics
-
Installation of Docker CLI and Desktop: Getting Docker up and running on my machine.
-
Understanding Images vs. Containers: Learning the difference between Docker images and containers.
-
Running Ubuntu Image in Container: Starting a container with Ubuntu.
-
Multiple Containers: Managing multiple containers simultaneously.
-
Port Mappings: Mapping container ports to host ports.
-
Environment Variables: Setting environment variables for containers.
-
Dockerization of Node.js Application:
-
Dockerfile: Creating a Dockerfile for a Node.js app.
-
Caching Layers: Using caching to speed up builds.
-
Publishing to Hub: Pushing images to Docker Hub.
Advanced
-
Docker Compose:
-
Services: Defining multi-container applications.
-
Port Mapping: Configuring port mappings for services.
-
Env Variables: Setting environment variables for services.
-
Docker Networking:
-
Bridge: Default network driver.
-
Host: Using the host’s networking stack.
-
Volume Mounting: Persisting data using volumes.
-
Efficient Caching in Layers: Optimizing Dockerfile for caching.
-
Docker Multi-Stage Builds: Using multi-stage builds to reduce image size.
Nginx
Setting Up
-
Launching an EC2 Instance:
-
Create and configure a virtual machine using EC2: Choosing an instance type and region.
-
Assign a static IP: Ensuring consistent access.
-
Set up security groups: Allowing HTTP and HTTPS traffic.
Configuration
-
Accessing the EC2 Instance: Connecting via SSH.
-
Updating and Installing Necessary Packages: Keeping everything up-to-date.
-
Cloning the Project Repository: Downloading my Node.js app.
-
Installing Project Dependencies: Using npm install.
-
Running the Node.js Application: Managing with pm2.
-
Setting Up a Domain: Registering and pointing a domain to my Elastic IP.
-
Configuring Nginx: Proxying requests to the Node.js app.
-
Setting Up SSL with Let's Encrypt: Using Certbot for SSL certificates.
Kafka
Key Concepts
-
High Throughput and Less Storage: Optimized for large data streams.
-
Components:
-
Producers and Consumers: Sending and receiving messages.
-
Topics and Partitions: Organizing messages.
-
Consumer Groups: Managing multiple consumers.
Models
-
Queue and Pub/Sub: Handling different messaging patterns.
-
Zookeeper: Managing Kafka infrastructure.
-
Admin, Producers, and Consumers: Setting up and using Kafka.
Serverless
Overview
-
No Server Management: Focusing on code, not servers.
-
Event-Driven Execution: Functions triggered by events.
-
Automatic Scaling: Scaling based on load.
-
Pay-per-Invocation: Billing based on function usage.
Practical Example
-
Creating a Lambda Function: Deploying a function to AWS Lambda.
-
Trigger Setup: Using API Gateway to invoke the function.
-
Testing: Verifying with a browser and Postman.
What's Next: My Learning Plan for the Next 4 Days
In the next four days, I plan to dive deeper into the following areas:
-
More AWS Services: Expanding my knowledge of various AWS services beyond the basics.
-
Azure: Getting familiar with Microsoft's cloud platform and its unique features.
-
Terraform: Learning infrastructure as code to manage cloud resources efficiently.
-
Ansible: Exploring configuration management and automation.
-
CI/CD: Strengthening my understanding of continuous integration and continuous deployment practices.
-
GitHub Workflows: Refining my skills in creating and managing workflows on GitHub.
Conclusion
So in these days, my free time goes to learning about DevOps and I will be sharing more about what I have learned, and in a new post, I will share the resources too.
For the DevOps community: Do let me know your thoughts and what should I need to put more focus on in this DevOps realm?
Stay curious, keep learning, and happy coding!
Latest Comments
This is great! I always give people interested in learning DevOps the following task:
- deploy kubernetes cluster, container registry, and a SQL database in any cloud provider with terraform
- install argocd, nginx ingress controller, and cert manager on it (if you have a domain)
- push some dummy data to the database
- create a simple express.js app for the frontend
- create a simple node backend api that pulls data from the db
- containerise the applications with a pipeline (github actions) and push to the container registry
- create a pipeline to deploy automatically to argocd (github action)
hmm.. I see a few bugs in the platform (can’t write multi-line comments). I’ll fix it tomorrow and also create a blog post about the topics mentioned on top :))
Yes, I was going to mention this because when I tried to edit this blog, it kept showing me lines instead of numbers and bullet points. I thought I had forgotten how to write in Markdown language. 😂
One more thing: inPost Settings if the image is more than 2 MB, it will give us an error page that says "413 Request Entity Too Large nginx/1.18.0 (Ubuntu)." You can use some error handling to show a proper notification about the image size limit.
You are absolutely right about the image error handling.
I will get to it shrotly.
I have completed most of the things mentioned. Currently, I am focusing on DevOps in my free time and preparing for an entry-level job position. My goal is to master and practice all the skills required for an intermediate-level DevOps engineer. This way, when I go for interviews, I’ll be well-prepared at an intermediate level but aiming for an entry-level position.