Marat Talipov

DevOps-engineer portfolio

Меня зовут Марат, и это мое портфолио DevOps-инженера.

Для этого я создаю инфраструктуру, разворачиваю и настраиваю системы. Код можно посмотреть тут, а на этой странице — общее описание систем, процессов развертывания и конфигурирования.

Схема

IaC Provisioning

Provisioning полностью автоматизирован (кроме Jenkins, там после установки часть настроек нужно делать руками. Но скоро я поправлю и это).

  1. Сначала подготавливается инфраструктура. Для каждой системы создается одна или две виртуальные машины (с Debian 11), в зависимости от потребностей самой системы. Я намеренно не использую managed-сервисы GCP, а разворачиваю все на голых виртуалках.

    Есть два варианта создания виртуалок:

    • Terraform. Для развертывания в облаке, а конкретно — GCP. Создаются инстансы, настраивается ssh-доступ, сеть и т.п.
    • Vagrant. Для локального развертывания через libvirt или Virtualbox.
  2. Затем с помощью Ansible устанавливаются и конфигурируются системы: устанавливаются зависимости, нужные пакеты, применяются необходимые настройки. Все это описано в плейбуках Ansible.

Теперь расскажу о каждой системе подробнее.

GitHub

Я создал два очень простых Python-приложения:

Для обоих приложений описан Dockerfile, чтобы потом собирать образы и разворачивать контейнеры в Kubernetes.

Jenkins

Jenkins инстанс с двумя нодами: Master и Worker. Настроены пайплайны для сборки и деплоя вышеуказанных приложений. Пайплайны запускаются автоматически через GitHub Webhooks после коммита в master-ветку.

Что делает Jenkins:

  1. Клонирует репозиторий с приложением
  2. Собирает его в образ
  3. Пушит этот образ в Docker Registry
  4. Редеплоит приложение в Kubernetes, чтобы кластер вытянул новую версию образа и перезапустил поды.

Для этого на worker-ноде установлены и настроены git, docker, kubectl.

Docker Registry

Инстанс Docker Registry, в котором хранятся образы вышеописанных приложений.

Настроена авторизация и TLS. Но так как все эти системы нужны лишь для демонстрации, у Registry есть только самоподписанный сертификат. Поэтому каждая система, которая обращается к Registry, настроена так, чтобы игнорировать проверку сертификата.

Kubernetes

Кластер, состоящий из двух нод: control-plane и worker. Кластер развернут с помощью kubespray.

Внутри кластера крутятся два приложения из GitHub. Для них настроены ClusterIp и Ingress, чтобы приложения были доступны через веб.

Так как у Docker Regisry самоподписанный сертификат, то containerd по умолчанию блокирует обращение к нему, и это нужно настраивать явно. В kubespray не было такой настройки, поэтому я реализовал эту фичу и закоммитил ее в upsteram.

Также я добавил еще одну опцию для себя: автоматическая настройка kubectl-конфига для подключения к новому кластеру (подробнее см. в readme). Чуть позже я также планирую вернуть эту доработку в upstream.

PostgreSQL

Инстанс PostgreSQL, настроена потоковая репликация Master-slave. Используется в приложении cpu-load, чтобы хранить дату последнего запуска приложения.

Monitoring (not ready yet)

Это будет Prometheus + Grafana для мониторинга нагрузки, создаваемой приложением cpu-load.

Backup (not ready yet)

Также я планирую настроить создание бекапов для некоторых систем, но пока этого нет.

А можно все это пощупать?

У меня есть это в планах — настроить read-only access, чтобы системы можно было пощупать и посмотреть, как все это работает.

Но пока этого нет.

Contacts

telegram @marat_talipov

email t-marat@yandex.ru

github Morion-Self