Skip to content

Latest commit

Β 

History

History
586 lines (449 loc) Β· 38.9 KB

README.md

File metadata and controls

586 lines (449 loc) Β· 38.9 KB

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