devops-exercises/README.md
2019-10-04 19:33:39 +03:00

9.4 KiB
Raw Blame History

DevOps Interview Questions

Table of Contents

  1. Jenkins
  2. AWS
  3. Network
  4. Linux
  5. Ansible
  6. Docker
  7. Python
  8. Prometheus

Jenkins

beginner
  • Explain what is Jenkins and what is it used for
  • Explain each of the following in the context of nodes:
    • Master
    • Slave
    • Executor
    • Agent
    • Label
  • Explain each of the following in context of jobs:
    • Job
    • Build
    • Test
    • Artifacts
  • Explain the architecture of Jenkins
  • What are the different ways to trigger a build?
  • How do you start a build automatically upon a change in a certain repository?
  • What is a plugin?
    • What plugins are you using in Jenkins? Which do you consider to most useful?
  • Installation questions
    • How to install Jenkins?
    • How to install a plugin?
    • How to install an agent?
Intermediate
  • What type of jobs there are? what is the advantage of each type?
  • What ways are you familiar with to notify users on build results?
Advanced
  • Write a script to remove all the jobs which include the string "REMOVE_ME"

AWS

Global Infrastructure
  • Explain the following
    • Availability zone
    • Region
    • Edge location
S3 - beginner questions
  • Explain what is S3 and what is it used for
  • What is a bucket?
  • True or False? a bucket name must be globally unique
  • What objects in S3 consists of?
    • Another way to ask it: explain key, value, version id and metadata in context of objects
  • Explain data consistency
  • Can you host dynamic websites on s3? what about static websites?
CloudFront
  • Explain what is CloudFront and what is it used for
  • Explain the following
    • Origin
    • Edge location
    • Distribution
  • What delivery methods available for the user with CDN?
  • True or False? object are cached for the life of TTL

Network

Network questions can be found here

Linux

beginner
  • Explain what each of the following commands does and given an example on how to use it

    • ls
    • rm
    • rmdir (can you achieve the same result by using rm?)
    • grep
    • wc
    • df
  • How to change the permissions of a file?

  • What does the following permissions mean?:

    • 777
    • 644
    • 750
  • How to add a new user to the system without providing him the ability to log-in into the system?

  • What commands are you using for troubleshooting issues? specifically:

    • Disk issues
    • Memory, CPU issues
    • Networking issues
  • What is a Linux kernel module and how do you load a new module?

  • What is the different between a soft link and hard link?

hard link is the same file, using the same inode.
soft link is a shortcut to another file, using a different inode.

soft links can be created between different file systems while
hard link can be created only within the same file system.
  • How to run a process in the background and why to do that in the first place?
You can achieve that by specifying & at end of the command.
As to Why? since some commands/processes can take a lot of time to finish
execution or run forever
  • What signal is used when you run 'kill '?
The default signal is SIGTERM (15). This signal kills
process gracefully which means it allows it to save current
state configuration.
  • What signals are you familiar with?
SIGTERM - default signal for terminating a process
SIGHUP - common usage is for reloading configuration
SIGKILL - a signal which cannot caught or ignored

To view all available signals run `kill -l`

Ansible

  • Describe each of the following components in Ansible, including the relationship between them:
    • Task
    • Module
    • Play
    • Playbook
    • Role
Task  a call to a specific Ansible module
Module  the actual unit of code executed by Ansible on your own host or a remote host. Modules are indexed by category (database, file, network, …) and also referred as task plugins.

Play  One or more tasks executed on a given host(s)

Playbook  One or more plays. Each play can be executed on the same or different hosts

Role  Ansible roles allows you to group resources based on certain functionality/service such that they can be easily reused. In a role, you have directories for variables, defaults, files, templates, handlers, tasks, and metadata. You can then use the role by simply specifying it in your playbook.
  • Write a task to create the directory /tmp/new_directory
- name: Create a new directory
  file:
      path: "/tmp/new_directory"
      state: directory
  • What would be the result of the following play?
---
- name: Print information about my host
  hosts: localhost
  gather_facts: 'no'                                                                                                                                                                           
  tasks:
      - name: Print hostname
        debug:
            msg: "It's me, {{ ansible_hostname }}"
When given a written code, always inspect it thoroughly. If your answer is “this will fail” then you are right. We are using a fact (ansible_hostname), which is a gathered piece of information from the host we are running on. But in this case, we disabled facts gathering (gather_facts: no) so the variable would be undefined which will result in failure.
  • Write a playbook to install zlib and vim on all hosts if the file /tmp/mario exists on the system.
---
- hosts: all
  vars:
      mario_file: /tmp/mario
      package_list:
          - 'zlib' 
          - 'vim'
  tasks:
      - name: Check for mario file
        stat:
            path: "{{ mario_file }}"
        register: mario_f

      - name: Install zlib and vim if mario file exists
        become: "yes"
        package:
            name: "{{ item }}"
            state: present
        with_items: "{{ package_list }}"
        when: mario_f.stat.exists
  • Write a playbook to deploy the file /tmp/system_info on all hosts except for controllers group, with the following content

    I'm <HOSTNAME> and my operating system is <OS>
    

    replace and with the actual data for the specific host you are running on

The playbook to deploy the system_info file

--- 
- name: Deploy /tmp/system_info file
  hosts: all:!controllers
  tasks: 
      - name: Deploy /tmp/system_info
        template:
            src: system_info.j2 
            dest: /tmp/system_info

The content of the system_info.j2 template

# {{ ansible_managed }}
I'm {{ ansible_hostname }} and my operating system is {{ ansible_distribution }

Docker

  • What happens when you run docker run hello-world?
Docker CLI passes your request to Docker daemon.
Docker daemon downloads the image from Docker Hub
Docker daemon creates a new container by using the image it downloaded
Docker daemon redirects output from container to Docker CLI which redirects it to the standard output
  • How do you run a container?

  • What do you see when you run docker ps?

  • What docker commit does? when will you use it?

  • Explain what is Dockerfile used for and the content of the following Dockerfile

FROM registry.access.redhat.com/rhel7/rhel

RUN yum -y install httpd && yum -y update; yum clean all

EXPOSE 80
ENTRYPOINT [ "/usr/sbin/httpd" ]
CMD [ "-D", "FOREGROUND" ]

Answer:

Use the image 'rhel7/rhel' from the registry 'registry.access.redhat.com` to run httpd.
Befor running it, install the httpd package, update all packages and expose port 80.

Python

beginner
  • What data type supported in Python and which of them are mutable? What function can you use to show that a certain data type is mutable?
The mutable data types are:

    List
    Dictionary
    Set
    
The immutable data types are:

    Numbers (int, float, ...)
    String
    Bool
    Tuple

The id function can be used to check if a given variable is mutable or not.
  • What is PEP8? Give an example of 5 style guidelines
PEP8 is a list of coding conventions and style guidelines for Python

5 style guidelines:

    1. Limit all lines to a maximum of 79 characters.
    2. Surround top-level function and class definitions with two blank lines.
    3. Use commas when making a tuple of one element
    4. Use spaces (and not tabs) for indentation
    5. Use 4 spaces per indentation level
Intermediate
  • What _ is used for in Python?
1. Translation lookup in i18n
2. Hold the result of the last executed expression or statement
3. As a general purpose "throwaway" variable name. For example: x, y, _ = get_data() (x and y are used but since we don't care about third variable, we "threw it away").
  • Sort a list of lists by the second item of each nested list
li = [[1, 4], [2, 1], [3, 9], [4, 2], [4, 5]]

sorted(x, key=lambda l: l[1])
  • You have the following lists: [{'name': 'Mario', 'food': ['mushrooms', 'goombas']}, {'name': 'Luigi', 'food': ['mushrooms', 'turtles']}] Extract all type of foods. Final output should be: {'mushrooms', 'goombas', 'turtles'}
set([food for bro in x for food in bro['food']])

Prometheus

  • Describe the following Prometheus components:
    • Prometheus server
    • Push Gateway
    • Alert Manager
Prometheus server responsible for scraping the storing the data
Push gateway is used for short-lived jobs
Alert manager is responsible for alerts ;)
  • What is an exporter? What is it used for?