KodeKloud's 100 Days of DevOps is a free, hands-on challenge designed to help learners move from theory to practical DevOps skills. Over 100 days, participants complete real-world tasks involving tools like Linux, Git, Docker, Kubernetes, Jenkins, Ansible, and Terraform. Each task takes around 20–40 minutes and mimics scenarios you'd encounter in a real job, often set in a fictional company environment. The challenge encourages consistency, habit formation, and portfolio-building by having users document their progress publicly, often on GitHub. It's ideal for learners who want to build job-ready skills and gain confidence through structured, daily practice. No prior experience is required, making it accessible to both beginners and those looking to solidify their DevOps knowledge.

1/100 - Linux User Setup with Non-Interactive Shell
Task: Create a user named ‘ravi’ with a non-interactive shell on app Server 1 ssh tony@172.16.238.10sudo useradd -s /bin/nologin ravi Breakdown:useradd<- Command to create a new user-s /bin/nologin <- assigns a non-interative shell (prevents login)ravi <- the username we are creating Optional…
2/100 - Temporary User Setup with Expiry
Task: As part of the temporary assignment to the Nautilus project, a developer named jim requires access for a limited duration. To ensure smooth access management, a temporary user account with an expiry date is needed. ssh banner@172.16.238.12sudo useradd -e 2024-03-28 jimsudo chage -l
3/100 Secure Root SSH Access
Following security audits, the security team has rolled out new protocols including the restriction of direct root SSH login. Task: Your task is to disable SSH root login on all app server within the Stratos Datacenter. There are three app servers so the following commands need to run on each
4/100 Script Execution Permissions
In a bid to automate backup processes, the xFusionCorp Industries sysadmin team has developed a new bash script named xfusioncorp.sh. While the script has been distributed to all necessary servers, it lacks executable permissions on App Server 1 within the Stratos Datacenter. Task:Grant executable…
5/100 SElinux Installation and Configuration
Following a security audit, the xFusionCorp Industries security team has opted to enhance application and server security with SELinux. To initiate testing, the following requirements have been established for App server 1 in the Stratos Datacenter: Task:- Install the required SELinux packages:-…
6/100 Create a Cron Job
The Nautilus system admins team has prepared scripts to automate several day-to-day tasks. They want them to be deployed on all app servers in Stratos DC on a set schedule. Before that they need to test similar functionality with a sample cron job. Tasks:- Install cronie package on all
7/100 Linux SSH Authentication
The system admins team of xFusionCorp Industries has set up some scripts on jump host that run on regular intervals and perform operations on all app servers in Stratos Datacenter. To make these scripts work properly we need to make sure the thor user on jump host has password-less SSH
8/100 Install Ansible
During the weekly meeting, the Nautilus DevOps team discussed about the automation and configuration management solutions that they want to implement. While considering several options, the team has decided to go with Ansible for now due to its simple setup and minimal pre-requisites. The team wante…
9/100 MariaDB Troubleshooting
There is a critical issue going on with the Nautilus application in Stratos DC. The production team identified that the application is unable to connect to the database. After digging into the issue, the team found that the MariaDB service is down on the database server. Task: Fix the issue
10/100 Linux Bash Scripts
The production support team of xFusionCorp Industries is working on developing some bash scripts to automate different day to day tasks. One is to create a bash script for taking websites backups. They have a static website running on App Server 1 in Stratos Datacenter and they need to create
11/100 Install and Configure Tomcat Server
The Nautilus application development team recently finished the beta version of one of their Java-based applications, which they are planning to deploy on one of the app servers in Stratos DC. After an internal team meeting, they have decided to use the tomcat application server. Tasks:Install tom…
12/100 Linux Network Services
Our monitoring tool has reported an issue in Stratos Datacenter. One of our app servers has an issue, as its Apache service is not reachable on port 8084 (which is the Apache port). The service itself could be down, the firewall could be at fault, or something else could be
13/100 IPtables Installation and Config
We have one of our websites up and running on our Nautilus infrastructure in Stratos DC. Our security team has raised a concern that right now Apache’s port i.e 5002 is open for all since there is no firewall installed on these hosts. So we have decided to
14/100 Linux Process Troubleshooting
The production support team of xFusionCorp Industries has deployed some of the latest monitoring tools to keep an eye on every service, application, etc. running on the systems. One of the monitoring systems reported about Apache service unavailability on one of the app servers in Stratos DC. Task:…
15/100 Setup SSL for Nginx
The system admins team of xFusionCorp Industries needs to deploy a new application on App Server 1 in Stratos Datacenter. They have some pre-requites to get ready that server for application deployment. Prepare the server as per requirements shared below Tasks:1- Install and configure nginx on App…
16/100 Install and Configure Nginx as a Load Balancer
Day by day traffic is increasing on one of the websites managed by the Nautilus production support team. Therefore, the team has observed a degradation in website performance. Following discussions about this issue, the team has decided to deploy this application on a high availability stack i.e on…
17/100 Install and Configure PostgreSQL
The Nautilus application development team has shared that they are planning to deploy one newly developed application on Nautilus infra in Stratos DC. The application uses PostgreSQL database, so as a pre-requisite we need to set up PostgreSQL database server as per requirements shared below. Note,…
18/100 Configure LAMP Server
xFusionCorp Industries is planning to host a WordPress website on their infra in Stratos Datacenter. They have already done infrastructure configuration—for example, on the storage server they already have a shared directory /vaw/www/html that is mounted on each app host under /var/www/html director…
19/100 Install and Configure Web Application
xFusionCorp Industries is planning to host two static websites on their infra in Stratos Datacenter. The development of these websites is still in-progress, but we want to get the servers ready. Please perform the following steps to accomplish the task: 1. Install httpd package and dependencies on…
20/100 Configure Nginx & PHP-FPM Using Unix Sock
The Nautilus application development team is planning to launch a new PHP-based application, which they want to deploy on Nautilus infra in Stratos DC. The development team had a meeting with the production support team and they have shared some requirements regarding the infrastructure. Below are t…
21/100 Setup GIT Repository on Storage Server
The Nautilus development team has provided requirements to the DevOps team for a new application development project, specifically requesting the establishment of a Git repository. Follow the instructions below to create the Git repository on the Storage server in the Stratos DC: 1. Utilize yum to…
22/100 Clone a GIT Repo on Storage Server
The DevOps team established a new Git repository last week, which remains unused at present. However, the Nautilus application development team now requires a copy of this repository on the Storage Server in the Stratos DC. Follow the provided details to clone the repository: 1. The repository to b…
23/100 Fork a Git Repo
There is a Git server utilized by the Nautilus project teams. Recently, a new developer named Jon joined the team and needs to begin working on a project. To begin, he must fork an existing Git repository. Follow the steps below: 1. Click on the Gitea UI button located on
24/100 Git Create Branches
Nautilus developers are actively working on one of the project repositories, /usr/src/kodekloudrepos/media. Recently, they decided to implement some new features in the application, and they want to maintain those new changes in a separate branch. Below are the requirements that have been shared wit…
25/100 Git Merge Branches
The Nautilus application development team has been working on a project repository /opt/ecommerce.git. This repo is cloned at /usr/src/kodekloudrepos on storage server in Stratos DC. They recently shared the following requirements with DevOps team: Create a new branch datacenter in /usr/src/kodeklo…
26/100 Git Manage Branches
The xFusionCorp development team added updates to the project that is maintained under /opt/ecommerce.git repo and cloned under /usr/src/kodekloudrepos/ecommerce. Recently some changes were made on Git server that is hosted on Storage server in Stratos DC. The DevOps team added some new Git remotes…
27/100 Git Revert some changes
The Nautilus application development team was working on a git repository /usr/src/kodekloudrepos/games present on Storage server in Stratos DC. However, they reported an issue with the recent commits being pushed to this repo. They have asked the DevOps team to revert repo HEAD to last commit. Belo…
28/100 Git Cherry Pick
The Nautilus application development team has been working on a project repository /opt/news.git. This repo is cloned at /usr/src/kodekloudrepos on storage server in Stratos DC. They recently shared the following requirements with the DevOps team: There are two branches in this repository, master a…
29/100 Manage Git Pull Requests
Max want to push some new changes to one of the repositories but we don’t want people to push directly to master branch, since that would be the final version of the code. It should always only have content that has been reviewed and approved. We cannot just allow everyone
30/100 Git Hard Reset
The Nautilus application development team was working on a git repository /usr/src/kodekloudrepos/news present on Storage server in Stratos DC. This was just a test repository and one of the developers just pushed a couple of changes for testing, but now they want to clean this repository along
31/100 Git Stash
The Nautilus application development team was working on a git repository /usr/src/kodekloudrepos/blog present on Storage server in Stratos DC. One of the developers stashed some in-progress changes in this repository, but now they want to restore some of the stashed changes. Look for the stashed c…
32/100 Git Rebase
The Nautilus application development team has been working on a project repository /opt/media.git. This repo is cloned at /usr/src/kodekloudrepos on storage server in Stratos DC. They recently shared the following requirements with DevOps team: One of the developers is working on feature branch and…
33/100 Resolve Git Merge Conflicts
Sarah and Max were working on writting some stories which they have pushed to the repository. Max has recently added some new changes and is trying to push them to the repository but he is facing some issues. Below you can find more details: SSH into storage server using user
34/100 Git Hook
The Nautilus application development team was working on a git repository /opt/demo.git which is cloned under /usr/src/kodekloudrepos directory present on Storage server in Stratos DC. The team want to setup a hook on this repository, please find below more details: - Merge the feature branch into

Day 35 - Install Docker Packages and Start Docker Service

Docker 1 - Install Docker & Start Docker Service
The Nautilus DevOps team aims to containerise various applications following a recent meeting with the application development team. They intend to conduct testing with the following steps: Task: Install docker-ce and docker compose packages on App Server 2. Login to the server via SSH and determi…

Day 36 - Deploy Nginx Container on Application Server

Docker 2 - Deploy Nginx Container on Application Server
The Nautilus DevOps team is conducting application deployment tests on selected application servers. They require a nginx container deployment on Application Server 2. Task: On Application Server 2 create a container named nginx_2 using the nginx image with the alpine tag. Ensure container is in a…

Day 37 - Copy File to Docker Container

Docker 4 - Copy File to Docker Container
The Nautilus DevOps team possesses confidential data on App Server 3 in the Stratos Datacenter. A container named ubuntu_latest is running on the same server.Copy an encrypted file /tmp/nautilus.txt.gpg from the docker host to the ubuntu_latest container located at /usr/src/. Ensure the file
38/100 Pull Docker Image
Nautilus project developers are planning to start testing on a new project. As per their meeting with the DevOps team, they want to test containerized environment application features. As per details shared with DevOps team, we need to accomplish the following task: a. Pull busybox:musl image on Ap…
39/100 Create a Docker Image From Container
One of the Nautilus developer was working to test new changes on a container. He wants to keep a backup of his changes to the container. A new request has been raised for the DevOps team to create a new image from this container. Below are more details about it:
40/100 Docker EXEC Operations
One of the Nautilus DevOps team members was working to configure services on a kkloud container that is running on App Server 1 in Stratos Datacenter. Due to some personal work he is on PTO for the rest of the week, but we need to finish his pending work ASAP.
41/100 Write a Docker File
As per recent requirements shared by the Nautilus application development team, they need custom images created for one of their projects. Several of the initial testing requirements are already been shared with DevOps team. Therefore, create a docker file /opt/docker/Dockerfile (please keep D capit…
42/100 Create a Docker Network
The Nautilus DevOps team needs to set up several docker environments for different applications. One of the team members has been assigned a ticket where he has been asked to create some docker networks to be used later. Complete the task based on the following ticket description: a. Create a
43/100 Docker Ports Mapping
The Nautilus DevOps team is planning to host an application on a nginx-based container. There are number of tickets already been created for similar tasks. One of the tickets has been assigned to set up a nginx container on Application Server 2 in Stratos Datacenter. Please perform the task as
44/100 Write a Docker Compose File
The Nautilus application development team shared static website content that needs to be hosted on the httpd web server using a containerised platform. The team has shared details with the DevOps team, and we need to set up an environment according to those guidelines. Below are the details: a. On
45/100 Resolve Dockerfile Issues
The Nautilus DevOps team is working to create new images per requirements shared by the development team. One of the team members is working to create a Dockerfile on App Server 3 in Stratos DC. While working on it she ran into issues in which the docker build is failing
46/100 Deploy an App on Docker Containers
The Nautilus Application development team recently finished development of one of the apps that they want to deploy on a containerized platform. The Nautilus Application development and DevOps teams met to discuss some of the basic pre-requisites and requirements to complete the deployment. The team…
47/100 Docker Python App
A python app needed to be Dockerized, and then it needs to be deployed on App Server 2. We have already copied a requirements.txt file (having the app dependencies) under /python_app/src/ directory on App Server 2. Further complete this task as per details mentioned below:Create a

Day 48 - Deploy Pods in a Kubernetes Cluster

K8-1 Deploy Pods in Kubernetes Cluster
The Nautilus Devops team is diving into Kubernetes for application management. One team member has a task to create a pod according to the details below: Create a pod named pod-httpd using the httpd image with the latest tag. Ensure to specify the tag as httpd:latest. 1. Set the

Day 49 - Deploy Applications with Kubernetes Deployments

K8-2 Deploy Applications with Kubernetes Deployments
The Nautilus DevOps team is delving into Kubernetes for app management. One team member needs to create a deployment following these details: Create a deployment named httpd to deploy the application httpd using the image httpd:latest (ensure to specify the tag) Note: The kubectl utility on jump_h…

Day 50 - Set Resource Limits in Kubernetes Pods

K8-4 Set Resource Limits in K8 Pods
The Nautilus DevOps team has noticed performance issues in some Kubernetes-hosted applications due to resource constraints. To address this, they plan to set limits on resource utilization. Here are the details: Create a pod named httpd-pod with a container named httpd-container. Use the httpd imag…
51/100 Execute Rolling Updates in Kubernetes
An application currently running on the Kubernetes cluster employs the nginx web server. The Nautilus application development team has introduced some recent changes that need deployment. They’ve crafted an image nginx:1.19 with the latest updates. Execute a rolling update for this application, int…
52/100 Revert Deployment to previous versions in Kubernetes
Earlier today, the Nautilus DevOps team deployed a new release for an application. However, a customer has reported a bug related to this recent release. Consequently, the team aims to revert to the previous version. There exists a deployment named nginx-deployment; initiate a rollback to the previ…
53/100 Resolve VolumeMounts Issue in Kubernetes
We encountered an issue with our Nginx and PHP-FPM setup on the Kubernetes cluster this morning, which halted its functionality. Investigate and rectify the issue: The pod name is nginx-phpfpm and configmap name is nginx-config. Identify and fix the problem. Once resolved, copy /home/thor/index.php…
54/100 Kubernetes Shared Volumes
We are working on an application that will be deployed on multiple containers within a pod on Kubernetes cluster. There is a requirement to share a volume among the containers to save some temporary data. The Nautilus DevOps team is developing a similar template to replicate the scenario. 1. Creat…
55/100 Kubernetes Sidecar Containers
We have a web server container running the nginx image. The access and error logs generated by the web server are not critical enough to be placed on a persistent volume. However, Nautilus developers need access to the last 24 hours of logs so that they can trace issues and
56/100 Deploy Nginx Web Server on Kubernetes Cluster
Some of the Nautilus team developers are developing a static website and they want to deploy it on Kubernetes cluster. They want it to be highly available and scalable. Therefore, based on the requirements, the DevOps team has decided to create a deployment for it with multiple replicas. Below you
57/100 Print Environment Variables
The Nautilus DevOps team is working on to setup some pre-requisites for an application that will send the greetings to different users. There is a sample deployment, that needs to be tested. Below is a scenario which needs to be configured on Kubernetes cluster. 1. Create a pod named print-envars-…
58/100 Deploy Grafana on Kubernetes Cluster
The Nautilus DevOps teams is planning to set up a Grafana tool to collect and analyze analytics from some applications. They are planning to deploy it on Kubernetes cluster.- Create a deployment named grafana-deployment-nautilus using any grafana image for Grafana app. Set other parameters as per y…
59/100 Troubleshoot Deployment issues in Kubernetes
Last week, the Nautilus DevOps team deployed a redis app on Kubernetes cluster, which was working fine so far. This morning one of the team members was making some changes in this existing setup, but he made some mistakes and the app went down. The deployment name is redis-deployment. The
60/100 Persistent Volumes in Kubernetes
The Nautilus DevOps team is working on a Kubernetes template to deploy a web application on the cluster. There are some requirements to create/use persistent volumes to store the application code, and the template needs to be designed accordingly. 1. Create a PersistentVolume named as pv-devops. C…
61/100 Init Containers in Kubernetes
Init containers are a special type of container in K8’s that run before the main (regular) application containers start inside a pod. They are used for initialisation or setup tasks that need to happen once before the main app runs. You can think of them as setup jobs that prepare
62/100 Manage Secrets in Kubernetes
The Nautilus DevOps team is working to deploy some tools in Kubernetes cluster. Some of the tools are licence based so that licence information needs to be stored securely within Kubernetes cluster. Therefore, the team wants to utilize Kubernetes secrets to store those secrets. 1. We already have…
63/100 Deploy Iron Gallery App on Kubernetes
There is an iron gallery app that the Nautilus DevOps team was developing. They have recently customized the app and are going to deploy the same on the Kubernetes cluster. 1. Create a namespace iron-namespace-devops Create a deployment iron-gallery-deployment-devops for iron gallery under the sa…