DevOps
Зачем
DevOps (development и operations):
- это методология автоматизации технологических процессов сборки, настройки и развёртывания программного обеспечения
- позволяет выстроить конвейер, на котором разработчики, тестировщики и сисадмины работают в едином потоке и вместе отвечают за результат — код, выпущенный в релиз для пользователей
- CI - процесс обеспечения процесса непрерывной интеграции
- CD - процесс доставки, развертывания
Этапы процесса (Pipeline)
Code
- VCS: Git, GitLab, GitHab
- Jira
- Git Flow, Управление branch
CI
Build Сборка
- Maven, SBT
- Запускается по Trigger:
- push: This workflow is initiated when changes are pushed to the repository
- branches: It runs when changes are pushed to the “main” branch
Test
- Авто тесты Tests: Unit, E2E
- Code Style
- Integration Tests
Release
CD
Deploy Развертывание
- Spinnaker
- GitLab CD
- TeamCity
- В Docker собирается сборка под требуемый контур
- Контура
- Стратегии Deployment
Operate
- Контейнеризация
- k8s
- OpenShift
- Infrastructure-As-Code IAC
- Load balancer
- API Managment
Monitor
- Наблюдаемость Observability
- Log management
- Metric
- Обеспечить Производительность: Auto Scaling
- Performance monitoring (APM класс систем) and dashboards
- Health Checks: k8s liveness и readiness probes
- Trace
- Обеспечить Надежность
- Методология SRE
- Crash Analytics
- Обеспечить Доступность
- Обеспечить Отказоустойчивость
Мобильные приложения Pipeline
- Старт разработки
- Создание аккаунтов в Store
- Подготовка
- Финальная проверка сборки
- имитировать установку приложения из Store
- Для Android-сборок мы можем использовать, к примеру, FireBase. У них есть раздел App Distribute. Для iOS-сборок есть TestFlight.
- имитировать установку приложения из Store
- Отправка сборки на проверку в Store
- Финал разработки
- Публикация Deploy сборки Release в Store: fastlane IOS
- Примеры
Паттерны
- Модель DevOps оценки компании
- TODO Антипаттерны
- MTA nginx
- Strategy Deployment (например blue-green deployment)
Сколько сервисов(BC) в одном контейнере
Each container should do one thing and do it well. A few reasons:
- There’s a good chance you’d have to scale APIs and front-ends differently than databases.
- Separate containers let you version and update versions in isolation.
- While you may use a container for the database locally, you may want to use a managed service for the database in production. You don’t want to ship your database engine with your app then.
- Running multiple processes will require a process manager (the container only starts one process), which adds complexity to container startup/shutdown.
Auto Scaling
- NGinx sample
- Limit
- CPU
- MEM
Naming Convention
- Namespace
- env
- Label - key\value
- key - alphanumeric character [a-z0-9A-Z] with dashes (-), underscores (_), dots (.), and alphanumerics between, max length 253
- value - max length 63
- Reserved prefixes
- kubernetes.io
- kubernetes.azure.com
- k8s.io
- примеры
- release : stable, release, canary
- kubernetes.io/os : debian, linux
- kubernetes.azure.com/cluster : cl1
- kubernetes.io/part-of : родительская ИС\сервис
- kubernetes.io/version : semver format
- [sec.
/tenant-id](https://www.helpnetsecurity.com/2021/05/26/kubernetes-security/) : tenant-uid
- Tenant-Type service-Name Service-Type Component-Name Component-Technology Stack-Name module
- Type service: категория ИС: LK, CRM, IDM
- Technology Stack: PHP, .NET, Python, NodeJS, Java
- Type Component - Tier: api, db, cache, frontend, backend
- db: mssql, mysql
- api:
- cache: redis, memcached