Skip to content

Repository files navigation

DevOps Тестове Завдання: NestJS + Redis + Kubernetes

Час виконання: 2 години

Опис Завдання

Вам надано простий додаток NestJS з одним ендпоінтом /redis, який перевіряє підключення до Redis і повертає true/false. Потрібно налаштувати повний CI/CD pipeline та розгорнути додаток у Kubernetes.

Структура Додатку

nest-redis-app/
├── src/
│   ├── redis/
│   │   └── redis.service.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── package.json
├── tsconfig.json
└── README.md

Ендпоінт Додатку

  • GET /redis - повертає {"status": true/false} залежно від стану підключення до Redis

Вимоги

1. Dockerfile

  • Створити оптимізований багатоетапний Dockerfile
  • Використовувати офіційні базові образи
  • Мінімізувати розмір кінцевого образу
  • Налаштувати користувача без root прав
  • Правильно обробити залежності Node.js
  • Використовувати .dockerignore

2. CI/CD Pipeline

Налаштувати pipeline для GitHub Actions або GitLab CI з етапами:

  • Збірка Docker образу
  • Push образу в registry
  • Деплой у Kubernetes
  • Використання змінних середовища та secrets

3. Kubernetes Маніфести

  • Deployment, Service, Ingress для NestJS додатку
  • Deployment, Service для Redis
  • ConfigMap, Secrets для конфігурації
  • Правильні labels та selectors
  • Resource limits та requests

4. Інтеграція з Redis

  • Redis розгорнуто у кластері
  • Додаток успішно підключається до Redis
  • Ендпоінт /redis працює коректно

5. Secrets та Безпека

  • Використання Kubernetes Secrets для чутливих даних
  • Пароль Redis зберігається в Secret
  • NetworkPolicy для обмеження трафіку (бонус)
  • SecurityContext у pod'ах
  • Не використовуються root права в контейнерах

6. Додаткові Вимоги

  • Детальний README з інструкціями по налаштуванню
  • Health checks та Autoscaler
  • Коментарі в коді та маніфестах
  • Моніторинг з Prometheus/Grafana

Критерії Оцінювання

Компонент Відмінно Добре Задовільно Незадовільно
Dockerfile Багатоетапний, оптимізований, security best practices Робочий, частково оптимізований Базовий робочий Dockerfile Не працює або відсутній
CI/CD Повний pipeline з тестами, скануванням, автодеплоєм Pipeline з основними етапами Базовий pipeline збірки Не працює
K8s Маніфести Повні, оптимізовані, з best practices Коректні основні компоненти Базові робочі маніфести Не працює
Документація Детальна, з прикладами, діаграмами Гарна з основними інструкціями Базова документація Відсутня або неповна

Що Потрібно Надати

  1. Репозиторій з кодом (GitHub)
  2. README.md з детальними інструкціями
  3. Архітектурна діаграма (може бути проста схема)
  4. Демонстрація роботи - скріншоти або відео
  5. Пояснення рішень - чому обрали саме такий підхід

Додаткові Інструкції

Тестове Середовище

  • Використовуйте minikube, kind або Docker Desktop для локального тестування
  • Якщо є доступ до хмарного кластеру - можете використовувати його
  • Всі рішення повинні бути відтворюваними

Registry

  • Можете використовувати Docker Hub, GitHub Container Registry або будь-який інший публічний registry
  • Не забудьте про теги версій

Моніторинг Розгортання

Ці команди повинні працювати для перевірки:

kubectl get pods
kubectl get services
curl http://example.ltd/redis

Розподіл Часу

  • 30 хв - Аналіз додатку, планування архітектури
  • 45 хв - Dockerfile та базові K8s маніфести
  • 30 хв - CI/CD pipeline
  • 15 хв - Тестування та відлагодження
  • 20 хв - Документація та фіналізація

Критерії Успішного Виконання

Мінімум для Проходження

  • Додаток розгортається в Kubernetes
  • Ендпоінт /redis повертає коректну відповідь
  • Dockerfile працює та оптимізований
  • Існує базовий CI/CD pipeline
  • Документація дозволяє відтворити результат

Для Високої Оцінки Додатково

  • Реалізовані security best practices
  • Додані моніторинг та автомасштабування
  • Код та інфраструктура добре документовані
  • Продумані питання продуктивності та відмовостійкості

Удачі! Чекаємо ваше рішення протягом 2 годин після отримання завдання.

Releases

Packages

Contributors

Languages