Skip to content

joseeden/KodeKloud_Engineer_Labs

Repository files navigation

Kodekloud Engineer Labs

This repository contains all my notes for past Kodekloud Engineer tasks which are all performed in a live Linux environment. These tasks simulate actual enterprise challenges and mimics the day-to-day work of System Administrators and Devops Engineers.

For each task, a set of requirements are given. The documentations for the servers are also provided. It is up for the "engineer" to find the solution for each problem.

Versions

To learn more, check out the following links:


Roles

Role/Level Points Needed
Systems Administrator Entry-level
DevOps Engineer 25,000
Senior DevOps Engineer 75,000
DevOps Architect 150,000

More details can be found here.

Updates

[2022-Nov-29] - Mechanics

Mechanics

Here's how the "Kodekloud Engineer" gamified learning works:

  • The tasks are given in a random order.
  • Some tasks are given more than once.
  • For tasks with buggy lab, better to skip them.
  • You will need to wait for 24 hours for the next task to arrive.
[2022-Nov-29] - Markdown for tasks 57 and onwards

Markdown for tasks 57 and onwards

When I started going deep into Linux two years ago at the start of 2020, I didn't know much about markdown files so I just dump all the notes for each tasks in ".sh" files. I've learn so much about markdown since then and I've been using this format in all my documentations, both for my personal notes and work notes.

Having said, you will see tasks 1 to 56 are all in ".sh" files. I didn't want to edit them because they showed how much I don't know before and the tasks 57 and onwards shows how much I've grown since.

[2022-Nov-29] - Public Profile

Public Profile

Profiles can now be shared publicly. These allows engineers to showcase the challenges they have solved.

See my public profile here: Kodekloud Engineer

[2023-July-26] - Change in mechanics

Change in mechanics

There's been a change in how Kodekloud "gives tasks" to engineers. Previously the tasks are given one at a time, and the engineer needs to finish the current task, and then wait for 24 hours for the next task to arrive.

Kodekloud has change the approach by:

  • Setting different levels for separate categories
  • The engineer can answer as many tasks as they can, as long as they have "Kodekloud coins".
  • Each task cost a number of coins and it is also equivalent to a number of experience points

See screenshot below:

[2023-July-31] - Mark Level as Complete

Mark Level as Complete

Once you have finished all tasks for a level, click the Mark Complete to unlock the next level tasks.

Labs - Per Role

Systems Administrator

✔️ Task 001 - Create a Linux User with Non-Interactive Shell
✔️ Task 002 - Linux Run levels
✔️ Task 003 - Linux SSH Authentication
✔️ Task 004 - Create a Cron job
✔️ Task 005 - Create a user
✔️ Task 006 - MariaDB Troubleshooting
✔️ Task 007 - Linux Banner
✔️ Task 008 - Selinux Installation
✔️ Task 009 - DNS Troubleshooting
✔️ Task 010 - Linux Services
✔️ Task 011 - NFS Troubleshooting
✔️ Task 012 - Linux User without Home
✔️ Task 013 - Linux User Expiry
✔️ Task 014 - Linux Archives
✔️ Task 015 - Disable Root Login
✔️ Task 016 - Apache Troubleshooting
✔️ Task 017 - Create a group
✔️ Task 018 - Linux String Substitute
✔️ Task 019 - Linux Firewalld Rules
✔️ Task 020 - Linux Remote Copy
✔️ Task 021 - HAproxy LBR Troubleshooting
✔️ Task 022 - Linux Bash Scripts
✔️ Task 023 - Configure Local Yum Repos
✔️ Task 024 - Linux Resource Limits
✔️ Task 025 - Configure Protected Directories
✔️ Task 026 - Linux NGINX as Reverse Proxy
✔️ Task 027 - Web Server Security
✔️ Task 028 - Setup SSL for NGINX
✔️ Task 029 - Application Security
✔️ Task 030 - Install a package - git
✔️ Task 031 - Linux Find Command
✔️ Task 032 - Install and Configure HAproxy LBR
✔️ Task 033 - Linux Firewalld Setup
✔️ Task 034 - Install and Configure NFS Server
✔️ Task 035 - PAM Authentication for Apache
✔️ Task 036 - Install and Configure PostgreSQL
✔️ Task 037 - Linux Process Troubleshooting
✔️ Task 038 - Install and Configure SFTP
✔️ Task 039 - Install and Configure Tomcat
✔️ Task 040 - IPTables Installation and Configuration
✔️ Task 041 - Linux network Services
✔️ Task 042 - Install and Configure Web Application
✔️ Task 043 - Install and Configure DB Server
✔️ Task 044 - Linux SSH Authentication
✔️ Task 045 - MariaDB Troubleshooting
✔️ Task 046 - Install and Configure Web Application
✔️ Task 047 - Create a Linux User with Non-Interactive Shell
✔️ Task 048 - Configure Local Yum Repos
✔️ Task 049 - Linux Firewalld Setup
✔️ Task 050 - Install and Configure PostgreSQL
✔️ Task 051 - Linux Firewalld Rules
✔️ Task 052 - Apache Troubleshooting
✔️ Task 053 - Create a Linux User with Non-Interactive Shell
✔️ Task 054 - Setup SSL for NGINX
✔️ Task 055 - Install and Configure HAProxy LBR

DevOps Engineer

✔️ Task 056 - Save. Load, and Transfer Docker Image
✔️ Task 057 - Manage Secrets in Kubernetes
✔️ Task 058 - Creating Soft Links Using Ansible
✔️ Task 059 - Ansible Basic Playbook
✔️ Task 060 - Git Fork a Repository
✔️ Task 061 - Deploy Grafana on Kubernetes Cluster
✔️ Task 062 - Deploy Jenkins on Kubernetes
✔️ Task 063 - Create Namespaces on Kubernetes Cluster
✔️ Task 064 - Ansible Copy Module
✔️ Task 065 - Manage Git Repositories
✔️ Task 066 - Update an Existing Deployment in Kubernetes
✔️ Task 067 - Managing Jinja2 Templates Using Ansible
✔️ Task 068 - Puppet Install a Package
✔️ Task 069 - Ansible Lineinfile Module
✔️ Task 070 - Setup Puppet Certs Autosign
✔️ Task 071 - Create a Docker Network
✔️ Task 072 - Create Deployments in Kubernetes Cluster
✔️ Task 073 - Ansible Inventory Update
✔️ Task 074 - Create Replicaset in Kubernetes Cluster
✔️ Task 075 - Puppet String Manipulation
✔️ Task 076 - Run a Docker Container
✔️ Task 077 - Init Containers in Kubernetes
✔️ Task 078 - Rollback a Deployment in Kubernetes
✔️ Task 079 - Puppet Setup SSH Keys
✔️ Task 080 - Deploy MySQL on Kubernetes
✔️ Task 081 - Ansible Facts Gathering
✔️ Task 082 - Create Cronjobs in Kubernetes
✔️ Task 083 - Deploy Tomcat App on Kubernetes
✔️ Task 084 - Fix Python App Deployed on Kubernetes Cluster
✔️ Task 085 - Rolling Updates in Kubernetes
✔️ Task 086 - Ansible Archive Module
✔️ Task 087 - Ansible Config File Update
✔️ Task 088 - Ansible Create Users and Groups
✔️ Task 089 - Kubernetes Sidecar Containers
✔️ Task 090 - Using Ansible Conditionals
✔️ Task 091 - Ansible Setup Httpd and PHP
✔️ Task 092 - Print Environment Variables
✔️ Task 093 - Set Limits for Resources in Kubernetes
✔️ Task 094 - Kubernetes Troubleshooting
✔️ Task 095 - Ansible Blockinfile Module
✔️ Task 096 - Countdown job in Kubernetes
✔️ Task 097 - Docker Ports Mapping
✔️ Task 098 - Troubleshoot Issue With Pods
✔️ Task 099 - Ansible Replace Module
✔️ Task 100 - Puppet Create a FIle
✔️ Task 101 - ReplicationController in Kubernetes
✔️ Task 102 - Puppet Setup Database
✔️ Task 103 - Ansible Unarchive Module
✔️ Task 104 - Puppet Multi-Packages Installation
✔️ Task 105 - Git Create Branches
✔️ Task 106 - Puppet Setup File Permissions
✔️ Task 107 - Create Pods in Kubernetes Cluster

Senior DevOps Engineer

✔️ Task 108 - Persistent Volumes in Kubernetes
✔️ Task 109 - Git Revert Some Changes
✔️ Task 110 - Fix issue with PhpFpm Application Deployed on Kubernetes
✔️ Task 111 - Fix Issue with VolumeMounts in Kubernetes
✔️ Task 112 - Git Manage Remotes
✔️ Task 113 - Troubleshoot Deployment issues in Kubernetes
✔️ Task 114 - Resolve Git Merge Conflicts
✔️ Task 115 - Git Install and Create Repository
✔️ Task 116 - Rolling Updates And Rolling Back Deployments in Kubernetes
✔️ Task 117 - Ansible Ping Module Usage
✔️ Task 118 - Deploy Node App on Kubernetes
✔️ Task 119 - Pull Docker Image
✔️ Task 120 - Deploy Nginx and Phpfpm on Kubernetes
✔️ Task 121 - Git Setup from Scratch
✔️ Task 122 - Kubernetes Redis Deployment
✔️ Task 123 - Puppet Manage Services
✔️ Task 124 - Install Docker Package
✔️ Task 125 - Environment Variables in Kubernetes
✔️ Task 126 - Managing ACLs Using Ansible
✔️ Task 127 - Kubernetes Time Check Pod
✔️ Task 128 - Deploy Guest Book App on Kubernetes
❌ Task 129 - Setup Puppet Certs
✔️ Task 130 - Git Repository Update
✔️ Task 131 - Deploy Nginx Web Server on Kubernetes Cluster
✔️ Task 132 - Puppet Create Symlinks
✔️ Task 133 - Puppet Setup NTP Server
✔️ Task 134 - Deploy Nagios on Kubernetes
✔️ Task 135 - Git Merge Branches
✔️ Task 136 - Ansible File Module
✔️ Task 137 - Docker Volumes Mapping
✔️ Task 138 - Git Clone Repositories
✔️ Task 139 - Create a Docker Image From Container
✔️ Task 140 - Docker Copy Operations
✔️ Task 141 - Docker EXEC Operations
✔️ Task 142 - Deploy Apache Web Server on Kubernetes Cluster
✔️ Task 143 - Puppet Add Users
✔️ Task 144 - Git Install and Create Bare Repository
✔️ Task 145 - Kubernetes Shared Volumes
✔️ Task 146 - Puppet Setup NTP Server (Repeat task)
✔️ Task 147 - Ansible Inventory Update (Repeat task)
✔️ Task 148 - Ansible Basic Playbook (Repeat task)
✔️ Task 149 - Ansible Setup Httpd and PHP (Repeat task)
✔️ Task 150 - Create Replicaset in Kubernetes Cluster (Repeat task)
✔️ Task 151 - Fix Python App Deployed on Kubernetes Cluster (Repeat task)
✔️ Task 152 - Puppet Install a Package (Repeat task)
✔️ Task 153 - Puppet Setup NTP Server (Repeat task)

Starting July 2023, the mechanics has been changed. Tasks are no longer provisioned individually, but rather engineers are provided Kodekloud coins which can then be used to unlock a number of tasks. In addition to this, engineers can work on multiple labs on different levels across categories. See updates section above


Labs - Per Category

Linux

Level 1

✔️ Lab 001 - Create a user
✔️ Lab 002 - Create a group
✔️ Lab 003 - Create a Linux User with non-interactive shell
✔️ Lab 004 - Linux User Without Home
✔️ Lab 005 - Linux User Expiry
✔️ Lab 006 - Linux User Files
✔️ Lab 007 - Disable Root Login
✔️ Lab 008 - Linux Archives
✔️ Lab 009 - Linux File Permissions
✔️ Lab 010 - Linux Access Control List
✔️ Lab 011 - Linux String Substitute
✔️ Lab 012 - Linux Remote Copy
✔️ Lab 013 - Cron schedule deny to users
✔️ Lab 014 - Linux Run Levels
✔️ Lab 015 - Linux TimeZones Setting
✔️ Lab 016 - Linux NTP Setup
✔️ Lab 017 - Linux Firewalld Rules
✔️ Lab 018 - Linux Resource Limits
✔️ Lab 019 - Selinux Installation

Level 2

✔️ Lab 001 - Create a Cron Job
☐ Lab 002 - Linux Banner
☐ Lab 003 - Linux Collaborative Directories
☐ Lab 004 - Linux String Substitute (sed)
☐ Lab 005 - Linux SSH Authentication
☐ Lab 006 - Linux Find Command
☐ Lab 007 - Install a package
☐ Lab 008 - Install Ansible
☐ Lab 009 - Configure Local Yum repos
☐ Lab 010 - Linux Services
☐ Lab 011 - Linux Configure sudo
☐ Lab 012 - DNS Troubleshooting
☐ Lab 013 - Linux Firewalld Setup
☐ Lab 014 - Linux Postfix Mail Server
☐ Lab 015 - Linux Postfix Troubleshooting
☐ Lab 016 - Install and Configure HaProxy LBR
☐ Lab 017 - Haproxy LBR Troubleshooting
☐ Lab 018 - MariaDB Troubleshooting
☐ Lab 019 - Linux Bash Scripts
☐ Lab 020 - Add Response Headers in Apache
☐ Lab 021 - Apache Troubleshooting
☐ Lab 022 - Linux GPG Encryption
☐ Lab 023 - Linux LogRotate
☐ Lab 024 - Application Security

Level 3

☐ Lab 001 - Apache Redirects
☐ Lab 002 - Install And Configure SFTP
☐ Lab 003 - Install and Configure Tomcat Server
☐ Lab 004 - Linux Network Services
☐ Lab 005 - IPtables Installation And Configuration
☐ Lab 006 - Linux Nginx as Reverse Proxy
☐ Lab 007 - Configure protected directories in Apache
☐ Lab 008 - Linux Process Troubleshooting
☐ Lab 009 - PAM Authentication For Apache
☐ Lab 010 - Setup SSL for Nginx

Level 4

☐ Lab 001 - Install and Configure Nginx as an LBR
☐ Lab 002 - LEMP Troubleshooting
☐ Lab 003 - Install and Configure PostgreSQL
☐ Lab 004 - Bash scripts if/else statements
☐ Lab 005 - Configure LAMP server
☐ Lab 006 - Install and Configure DB Server
☐ Lab 007 - Install and Configure Web Application
☐ Lab 008 - Install and Configure PHP-FPM
☐ Lab 009 - Configure Nginx + PHP-FPM Using Unix Sock


Git

Level 1

✔️ Lab 001 - Git Install and Create Bare Repository
✔️ Lab 002 - Git Clone Repositories
✔️ Lab 003 - Git Fork a Repository
✔️ Lab 004 - Git Repository Update
✔️ Lab 005 - Git Delete Branches

Level 2

✔️ Lab 001 - Git Install and Create Repository
✔️ Lab 002 - Git Create Branches
✔️ Lab 003 - Git Merge Branches
✔️ Lab 004 - Git Manage Remotes
✔️ Lab 005 - Git Revert Some Changes

Level 3

☐ Lab 001 - Git Cherry Pick
☐ Lab 002 - Manage Git Pull Requests
☐ Lab 003 - Git hard reset
☐ Lab 004 - Git Clean
☐ Lab 005 - Git Stash

Level 4

☐ Lab 001 - Git Rebase
☐ Lab 002 - Manage Git Repositories
☐ Lab 003 - Resolve Git Merge Conflicts
☐ Lab 004 - Git Hook
☐ Lab 005 - Git Setup from Scratch


Ansible

Level 1

✔️ Lab 001 - Ansible Basic Playbook
✔️ Lab 002 - Ansible Inventory Update
✔️ Lab 003 - Ansible Config File Update
✔️ Lab 004 - Ansible Copy Module
✔️ Lab 005 - Ansible File Module

Level 2

✔️ Lab 001 - Ansible Ping Module Usage
✔️ Lab 002 - Ansible Install Package
✔️ Lab 003 - Ansible Archive Module
✔️ Lab 004 - Ansible Unarchive Module
✔️ Lab 005 - Ansible Blockinfile Module

Level 3

✔️ Lab 001 - Creating Soft Links Using Ansible
✔️ Lab 002 - Managing ACLs Using Ansible
✔️ Lab 003 - Ansible Manage Services
✔️ Lab 004 - Ansible Lineinfile Module
✔️ Lab 005 - Ansible Replace Module

Level 4

✔️ Lab 001 - Ansible Facts Gathering
✔️ Lab 002 - Ansible Create Users and Groups
✔️ Lab 003 - Managing Jinja2 Templates Using Ansible
✔️ Lab 004 - Ansible Setup Httpd and PHP
✔️ Lab 005 - Using Ansible Conditionals


Docker

Level 1

✔️ Lab 001 - Install Docker Package
✔️ Lab 002 - Run a Docker Container
✔️ Lab 003 - Docker Delete Container
✔️ Lab 004 - Docker Copy Operations
✔️ Lab 005 - Docker Container Issue

Level 2

✔️ Lab 001 - Pull Docker Image
✔️ Lab 002 - Docker Update Permissions
✔️ Lab 003 - Create a Docker Image From Container
✔️ Lab 004 - Docker EXEC Operations
✔️ Lab 005 - Write a Docker File

Level 3

✔️ Lab 001 - Create a Docker Network
✔️ Lab 002 - Docker Volumes Mapping
✔️ Lab 003 - Docker Ports Mapping
✔️ Lab 004 - Save, Load and Transfer Docker Image
✔️ Lab 005 - Write a Docker Compose File

Level 4

☐ Lab 001 - Resolve Dockerfile Issues
☐ Lab 002 - Resolve Docker Compose Issues
☐ Lab 003 - Deploy an App on Docker Containers
☐ Lab 004 - Docker Node App
☐ Lab 005 - Docker Python App


Kubernetes

Level 1

✔️ Lab 001 - Create Pods in Kubernetes Cluster
✔️ Lab 002 - Create Deployments in Kubernetes Cluster
✔️ Lab 003 - Create Namespaces in Kubernetes Cluster
✔️ Lab 004 - Set Limits for Resources in Kubernetes
✔️ Lab 005 - Rolling Updates in Kubernetes
✔️ Lab 006 - Rollback a Deployment in Kubernetes
✔️ Lab 007 - Create Replicaset in Kubernetes Cluster
✔️ Lab 008 - Create Cronjobs in Kubernetes
✔️ Lab 009 - Countdown job in Kubernetes
✔️ Lab 010 - Kubernetes Time Check Pod
✔️ Lab 011 - Troubleshoot Issue With Pods
✔️ Lab 012 - Update an Existing Deployment in Kubernetes
✔️ Lab 013 - ReplicationController in Kubernetes
✔️ Lab 014 - Fix Issue with VolumeMounts in Kubernetes

Level 2

✔️ Lab 001 - Kubernetes Shared Volumes
✔️ Lab 002 - Kubernetes Sidecar Containers
✔️ Lab 003 - Deploy Nginx Web Server on Kubernetes Cluster
✔️ Lab 004 - Print Environment Variables
✔️ Lab 005 - Rolling Updates And Rolling Back Deployments in Kubernetes
✔️ Lab 006 - Deploy Jenkins on Kubernetes
✔️ Lab 007 - Deploy Grafana on Kubernetes Cluster
✔️ Lab 008 - Deploy Tomcat App on Kubernetes
✔️ Lab 009 - Deploy Node App on Kubernetes
✔️ Lab 010 - Troubleshoot Deployment issues in Kubernetes
✔️ Lab 011 - Fix issue with LAMP Environment in Kubernetes

Level 3

✔️ Lab 001 - Deploy Apache Web Server on Kubernetes Cluster
✔️ Lab 002 - Deploy Lamp Stack on Kubernetes Cluster
✔️ Lab 003 - Init Containers in Kubernetes
✔️ Lab 004 - Persistent Volumes in Kubernetes
✔️ Lab 005 - Manage Secrets in Kubernetes
✔️ Lab 006 - Environment Variables in Kubernetes
✔️ Lab 007 - Kubernetes LEMP Setup
✔️ Lab 008 - Kubernetes Troubleshooting
✔️ Lab 009 - Deploy Iron Gallery App on Kubernetes
✔️ Lab 010 - Fix Python App Deployed on Kubernetes Cluster

Level 4

✔️ Lab 001 - Deploy Redis Deployment on Kubernetes
✔️ Lab 002 - Deploy MySQL on Kubernetes
✔️ Lab 003 - Kubernetes Nginx and PhpFPM Setup
✔️ Lab 004 - Deploy Drupal App on Kubernetes
✔️ Lab 005 - Deploy Guest Book App on Kubernetes


Jenkins

Level 1

✔️ Lab 001 - Jenkins Installation
✔️ Lab 002 - Jenkins Plugins
✔️ Lab 003 - [Jenkins Create Users](./Tasks_Jenkins/Le vel_1/Lab_003_Jenkins_Create_Users.md)
✔️ Lab 004 - Jenkins Folders
☐ Lab 005 - Jenkins Install Packages

Level 2

☐ Lab 001 - Jenkins Views
☐ Lab 002 - Jenkins Parameterized Builds
☐ Lab 003 - Jenkins Workspaces
☐ Lab 004 - Jenkins Database Backup Job
☐ Lab 005 - Jenkins Scheduled Jobs

Level 3

☐ Lab 001 - Jenkins Slave Nodes
☐ Lab 002 - Jenkins Project Security
☐ Lab 003 - Jenkins Build Images
☐ Lab 004 - Jenkins Deploy Pipeline
☐ Lab 005 - Jenkins Conditional Pipeline

Level 4

☐ Lab 001 - Jenkins Deployment Job
☐ Lab 002 - Jenkins Chained Builds
☐ Lab 003 - Jenkins MR Jobs
☐ Lab 004 - Jenkins Multistage Pipeline
☐ Lab 005 - Jenkins Setup Node App