Час виконання: 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
- Створити оптимізований багатоетапний Dockerfile
- Використовувати офіційні базові образи
- Мінімізувати розмір кінцевого образу
- Налаштувати користувача без root прав
- Правильно обробити залежності Node.js
- Використовувати .dockerignore
Налаштувати pipeline для GitHub Actions або GitLab CI з етапами:
- Збірка Docker образу
- Push образу в registry
- Деплой у Kubernetes
- Використання змінних середовища та secrets
- Deployment, Service, Ingress для NestJS додатку
- Deployment, Service для Redis
- ConfigMap, Secrets для конфігурації
- Правильні labels та selectors
- Resource limits та requests
- Redis розгорнуто у кластері
- Додаток успішно підключається до Redis
- Ендпоінт
/redisпрацює коректно
- Використання Kubernetes Secrets для чутливих даних
- Пароль Redis зберігається в Secret
- NetworkPolicy для обмеження трафіку (бонус)
- SecurityContext у pod'ах
- Не використовуються root права в контейнерах
- Детальний README з інструкціями по налаштуванню
- Health checks та Autoscaler
- Коментарі в коді та маніфестах
- Моніторинг з Prometheus/Grafana
| Компонент | Відмінно | Добре | Задовільно | Незадовільно |
|---|---|---|---|---|
| Dockerfile | Багатоетапний, оптимізований, security best practices | Робочий, частково оптимізований | Базовий робочий Dockerfile | Не працює або відсутній |
| CI/CD | Повний pipeline з тестами, скануванням, автодеплоєм | Pipeline з основними етапами | Базовий pipeline збірки | Не працює |
| K8s Маніфести | Повні, оптимізовані, з best practices | Коректні основні компоненти | Базові робочі маніфести | Не працює |
| Документація | Детальна, з прикладами, діаграмами | Гарна з основними інструкціями | Базова документація | Відсутня або неповна |
- Репозиторій з кодом (GitHub)
- README.md з детальними інструкціями
- Архітектурна діаграма (може бути проста схема)
- Демонстрація роботи - скріншоти або відео
- Пояснення рішень - чому обрали саме такий підхід
- Використовуйте minikube, kind або Docker Desktop для локального тестування
- Якщо є доступ до хмарного кластеру - можете використовувати його
- Всі рішення повинні бути відтворюваними
- Можете використовувати 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 годин після отримання завдання.