ЗИТ Тестовое задание: Junior DevOps / Системный администратор (Linux)

Ответить
ya
^-^
Сообщения: 2673
Зарегистрирован: 16 дек 2021, 19:56

ЗИТ Тестовое задание: Junior DevOps / Системный администратор (Linux)

Сообщение ya »

Завод инновационных технологий

Цель:
Проверить базовые навыки работы с Linux, CI/CD, контейнерами, мониторингом и автоматизацией.

1. Подготовка тестового окружения:
На своём локальном ПК или виртуалке (например, Ubuntu 20.04+): Установите и настройте nginx Настройте systemd-сервис, чтобы nginx запускался при старте системы

Ожидаемый результат: Nginx работает systemctl status nginx показывает активное состояние
Ниже приведена пошаговая инструкция по установке и настройке nginx на Ubuntu 20.04+ с автоматическим запуском при старте системы через systemd.

1. Установка nginx

Откройте терминал и выполните команды:
bash

Код: Выделить всё

sudo apt update
sudo apt install nginx -y
2. Проверка статуса nginx

bash

Код: Выделить всё

systemctl status nginx
На этом этапе nginx должен быть активен и работать. Если всё правильно, вы увидите статус `active (running)`.

3. Настройка systemd-сервиса (если требуется)

По умолчанию, nginx устанавливается с системным unit-файлом, и systemd управляет им автоматически. Но если нужно создать или изменить его вручную, выполните следующее:

a) Создайте или откройте файл сервиса

bash

Код: Выделить всё

sudo mcedit /etc/systemd/system/nginx.service
b) Вставьте в него следующий минимальный конфиг:

ini

Код: Выделить всё

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/nginx -g 'daemon off;'
ExecReload=/bin/kill -s HUP $MAINPID
PIDFile=/run/nginx.pid
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
Обратите внимание, что стандартный unit-файл nginx обычно уже установлен. Этот пример подходит, если нужно создать или заменить его.

4. Перезагрузите systemd и включите nginx в автозагрузку

bash

Код: Выделить всё

sudo systemctl daemon-reload
sudo systemctl enable nginx
5. Запустите nginx

bash

Код: Выделить всё

sudo systemctl start nginx
или перезапустите, чтобы убедиться, что всё работает:
bash

Код: Выделить всё

sudo systemctl restart nginx
6. Проверьте статус
bash

Код: Выделить всё

systemctl status nginx
Должно показывать `active (running)`.

Итог

- nginx установлен и запущен.
- systemd управляет nginx и настроен на автоматический запуск при старте системы.
- Статус `systemctl status nginx` показывает активное состояние.

2. Напишите простой .gitlab-ci.yml файл Сценарий:
Этап test должен запускать проверку наличия установленного nginx: bash Copy Edit which nginx && nginx -v

Ожидаемый результат: Корректный файл .gitlab-ci.yml с минимальным пайплайном Комментарии внутри объясняют, что делает каждая стадия
Вот пример простого `.gitlab-ci.yml` файла с одним этапом `test`, который проверяет наличие nginx и выводит его версию. В комментариях объясняется, что делает каждая часть:

yaml

Код: Выделить всё

# Определяем пайплайн с одним этапом 'test'
stages:
  - test

# Этап 'test'
test_nginx:
  stage: test
  script:
    - echo "Проверка наличия nginx и вывод версии"
    # Находит путь к nginx
    - which nginx
    # Выводит версию nginx
    - nginx -v
  # Используем образ с Linux
  image: alpine:latest
  # Устанавливаем nginx, чтобы команда which nginx работала
  before_script:
    - apk add --no-cache nginx

Объяснение:
- `stages:` — определяет стадии пайплайна, у нас только `test`.
- `test_nginx:` — название задачи (джоба).
- `stage: test` — указывает, что задача относится к стадии `test`.
- `script:` — список команд, которые выполняются в ходе задачи:
- `which nginx` — проверяет, установлен ли nginx и выводит его путь.
- `nginx -v` — выводит версию nginx.
- `image:` — базовый Docker-образ (здесь Alpine Linux).
- `before_script:` — команды, которые выполняются перед основным скриптом, устанавливаем nginx.

Это минимальный рабочий пример для проверки наличия nginx и его версии в CI/CD пайплайне GitLab.

3. Работа с Docker (по желанию, но желательно):
Напишите Dockerfile, который собирает образ с nginx и выводит “Hello from DevOps!” на главной странице

Ожидаемый результат:
Рабочий Dockerfile Контейнер поднимается и отвечает на curl localhost или через браузер
Вот пример Dockerfile, который собирает образ с nginx и выводит “Hello from DevOps!” на главной странице:

dockerfile

Код: Выделить всё

# Используем официальный образ nginx как базовый
FROM nginx:latest

# Удаляем дефолтную страницу nginx
RUN rm /usr/share/nginx/html/index.html

# Копируем нашу страницу с сообщением
RUN echo "<html><body><h1>Hello from DevOps!</h1></body></html>" > /usr/share/nginx/html/index.html

# Открываем порт 80
EXPOSE 80
Инструкции по сборке и запуску:

1. Создайте файл с именем `Dockerfile` и вставьте туда вышеуказанный код.
2. Соберите образ командой:
bash

Код: Выделить всё

docker build -t hello-nginx .
3. Запустите контейнер:
bash

Код: Выделить всё

docker run -d -p 80:80 --name my-nginx hello-nginx
После этого можно перейти в браузер или выполнить `curl localhost`, чтобы убедиться, что nginx показывает сообщение “Hello from DevOps!”.

4. (На выбор) Мини-задание по YAML / Kubernetes:
Напишите простейший deployment.yaml, который запускает nginx в 1 реплике

Ожидаемый результат:
Корректный YAML-файл, описывающий Deployment Используется nginx:stable Указаны replicas, containers, ports
пример простейшего файла deployment.yaml, который запускает nginx в одной реплике:

Код: Выделить всё

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:stable
        ports:
        - containerPort: 80
Этот YAML-файл создаст Deployment с одним контейнером nginx:stable, который слушает порт 80.

5. Ответьте письменно на 3 вопроса:
Чем отличается apt update от apt upgrade?
Как вы проверите, слушает ли сервис нужный порт?
Какие команды вы используете для диагностики сетевых проблем?
Конечно! Вот объяснение по вашим вопросам:

1. Чем отличается `apt update` от `apt upgrade`?

- `apt update` — команда, которая обновляет список пакетов и их версий из репозиториев. Она не устанавливает или обновляет пакеты, а просто получает актуальную информацию о доступных версиях.
- `apt upgrade` — команда, которая обновляет уже установленные пакеты до новых версий, основываясь на информации, полученной командой `apt update`. Она устанавливает обновления для пакетов, которые уже есть в системе.

Кратко:
`apt update` — обновление информации о пакетах
`apt upgrade` — обновление установленных пакетов до последних версий

---

2. Как проверить, слушает ли сервис нужный порт?

Можно использовать команду `ss` или `netstat`. Например:

bash

Код: Выделить всё

ss -tuln | grep <номер_порта>
или

bash

Код: Выделить всё

netstat -tuln | grep <номер_порта>
Это покажет все сокеты, прослушивающие указанный порт. Также можно использовать `lsof`:

bash

Код: Выделить всё

sudo lsof -i :<номер_порта>
Если команда выводит информацию о процессе, значит сервис слушает этот порт.

---

3. Какие команды вы используете для диагностики сетевых проблем?

Некоторые основные команды:

- `ping <адрес>` — проверка доступности узла по IP или домену
- `traceroute <адрес>` — трассировка маршрута до узла
- `telnet <хост> <порт>` — попытка соединения с портом для проверки его доступности
- `nc -zv <хост> <порт>` — проверка открытости порта (использование netcat)
- `ip a` или `ifconfig` — проверка настроек сетевых интерфейсов
- `route -n` или `ip route` — проверка маршрутов
- `dig <домен>` или `nslookup <домен>` — проверка DNS-разрешения
- `curl -v http://<адрес>` — проверка доступности HTTP-сервиса
Вложения
1621eec5-a925-47bc-8f51-a56a23dfd675.pdf
(113.84 КБ) 10 скачиваний
1621eec5-a925-47bc-8f51-a56a23dfd675.pdf
(113.84 КБ) 10 скачиваний
Ответить