Skip to content

Latest commit

 

History

History

README.md

Пример управления процессом развертывания систем в кластерах

Цель примера: Показать возможности по управлению процессом развертывания систем в инструменте управления архитектурой DocHub.

Суть примера

В компании есть несколько видов кластеров. Под кластерами мы понимаем кластера k8s (kubernetes), virtual (VMware или Hyper-v) и phisycal (физическая машина или группа машин, на которых располагаются компоненты системы). При этом кластера могут делиться по целям, например, prod-кластер, stage-кластер, dev-кластер.

Есть порядка 300 систем (уровень L1) каждая из которых состоит из своих run-time компонент (уровень L2). Для того чтобы запустить систему в работу необходимо разместить в соответствующем кластере каждую run-time компоненту этой системы. При этом в зависимости от целей требования к ресурсам работы каждой компоненты могут отличаться.

Стоит задача начать управлять всем этим хозяйством, т.е. мы хотим:

  1. Понять, где у нас размещается конкретная система, а это значит, что мы должны знать где располагается каждый её компонент. Например, для всех микросервисов БД живут отдельно от основных компонент системы и располагаются на отдельных кластерах.
  2. На этапе планирования разработки новой или расширения текущей системы мы хотим посчитать сколько системе понадобится ресурсов и сколько они будут стоить.
  3. Понять сколько у нас осталось свободных ресурсов на конкретном кластере с учетом заложенных лимитов.

Для того чтобы достичь целей, описанных выше, нам нужно каждый компонент системы, разложить на соответствующие единицы развертывания и к каждой из этих единиц развертывания указать требования к ресурсам. Эти единицы развертывания мы назвали deployment units (DU).

Общая схема описана ниже (схему нужно читать справа налево):

Общая схема

Логическое описание реализации и файловая структура примера

Для реализации был выбран вариант создания нового entity, который называется "clusters". Физически "clusters" был реализован через 2 файла:

  • clusters/clusters_model.yaml - в этом файле была описана сама модель кластеров, реализован вывод в меню и несколько вариантов визуализации, например дерево кластеров и отчет "Карточка развертывания системы".
entities:
  # Типы кластеров
  clusters:
    title: Типы кластеров развертывания систем
    description:
      > # Описание сущности текст или ссылка на документ. Необязательно.
      Типы кластеров развертывания систем ГК Болото
    menu: >

    presentations:
      tree: # Выводим дерево кластеров

      # Выводим диаграмму развертывания систем. Вывод может происходить сразу группы кластеров.
      # Например, можно вывести все сервера prod.
      cluster_deployment_diagram: 

      # Выводим диаграмму развертывания конкретной системы.
      # Если разшифровка делается из конкретного кластера, то выведутся все DU расположенные на этом кластере
      # Если разшифровка делается для системы целиком, то выведутся все кластера со всеми DU этой системы
      system_deployment_diagram:


      # Для того, чтобы сотруднику DevOps понять все ли компоненты он распределил делаем ему табличку где выбираем все DU из компонент
      # и смотрим привязал ли он их к кластеру
      system_deployment_table:

      # Лист проверки привязки deployment_units к кластеру для системы
      deployment_card:
  • clusters/clusters.yaml - в этом файле хранятся значения "clusters"
clusters:
  prod:
    title: 01. Продуктовые кластера
    description: Диаграммы развертывания для Продуктовых кластеров
  prod.k8s:
    title: Kubernetes - prod
    description: Диаграмма развертывания для Продуктового кластера Kubernetes
    resource_type: k8s #k8s/vm/phisycal
  prod.physical_db:
    title: Физический кластер БД - prod
    description: Диаграмма развертывания для Продуктового физического кластера баз данных
    resource_type: phisycal #k8s/vm/phisycal
  prod.virtual_db:
    title: Виртуальный кластер БД - prod
    description: Диаграмма развертывания для Продуктового виртуального кластера баз данных
    resource_type: vm #k8s/vm/phisycal

  stage:
    title: 02. Стейдж-кластера
    description: Диаграммы развертывания для Стейдж-кластеров
  stage.k8s:
    title: Kubernetes - stage
    description: Диаграмма развертывания для стейдж-кластера Kubernetes
    resource_type: k8s #k8s/vm/phisycal
  stage.physical_db:
     title: Физический кластер БД - stage
    description: Диаграмма развертывания для Физического стейдж-кластера баз данных
    resource_type: phisycal #k8s/vm/phisycal
  stage.virtual_db:
    title: Виртуальный кластер БД - stage
    description: Диаграмма развертывания для Виртуального стейдж-кластера баз данных
    resource_type: vm #k8s/vm/phisycal

  dev:
    title: 03. Кластера разработки
    description: Диаграммы развертывания для Кластеров разработки
  dev.k8s:    
    title: Kubernetes - dev
    description: Диаграмма развертывания для Кластера разработки Kubernetes
    resource_type: k8s #k8s/vm/phisycal
  dev.physical_db:
    title: Физический кластер БД - dev
    description: Диаграмма развертывания для Физического кластера разработки баз данных
    resource_type: phisycal #k8s/vm/phisycal
  dev.virtual_db:
    title: Виртуальный кластер БД - dev
    description: Диаграмма развертывания для Виртуального кластера разработки баз данных
    resource_type: vm #k8s/vm/phisycal

Для реализации привязки DU в run-time компонентах системы необходимо добавлять массив используемых DU в раздел "deployment_units". В качестве идентификатора DU было решено использовать доменную структуру вида <имя группы кластеров>.<имя DU>:

components:
  swamp.crocodile.srole.app:
    title: Основное приложение
    entity: component
    technologies:
      - Python
      - Django
      - Django REST Framework
      - Faust
    links:
      - id: swamp.crocodile.srole.db_postgresql
        direction: -->
      - id: swamp.crocodile.srole.redis_master
        direction: -->
      - id: swamp.crocodile.srole.celery
        direction: -->
    deployment_units:
      prod.main: #<prod/stage/dev>.<имя du>        
        resource_type: k8s #k8s/virtual/phisycal        
        cpu_type: highend #highend/standart/lowend
        cpu: 1 #float - количество ядер
        ram: 1 #float - количество памяти в Gb
        storage_type: standart #highend/standart/lowend/extralowend
        storage_size: 0.1 #Gb  
      stage.main:
        resource_type: k8s #k8s/virtual/phisycal        
        cpu_type: highend #highend/standart/lowend
        cpu: 2 #float - количество ядер
        ram: 8 #float - количество памяти в Gb
        storage_type: standart #highend/standart/lowend/extralowend
        storage_size: 0.1 #Gb   

Бывает так, что одна компонента требует разных ресурсов, в этом случае для этой компоненты нужно делать DU под каждые требования. Например, БД SQL может требовать разных дисков для TEMP DB, логов и данных, в этом случае для этой компоненты нужно создать три разных DU каждый со своими требованиями.

  • clusters/deployment_card.md — это карточка развертывания конкретной системы. Предполагается, что на этой карточке можно увидеть общую схему развертывания для всех кластеров, а также в ней будет 2 отчета:
  1. Таблица проверки привязки DU к кластерам - основная цель отчета удостовериться сотруднику команды DevOps, что он привязал все компоненты системы к нужным кластерам. Логика работы отчета следующая: для конкретной системы выбираются все DU и проверяется, что у каждого DU есть связь в кластере, если связи нет, то выводится пустая ячейка. Реализация запроса сделана в модели кластера "system_deployment_table".
  2. Таблица проверки наличия DU у каждой компоненты системы - основная цель отчета дать возможность сотруднику команды разработки, отвечающему за внесение DU проверить, что для каждой компоненты есть DU. На момент написания инструкции отчет еще не реализован, но предполагается следующая логика: для конкретной системы будут выбраны все компоненты, а затем для каждой компоненты будет осуществлен поиск DU, если DU нет, то ответственный сотрудник должен обратить на это внимание.
  • clusters/template — в этой папке лежат шаблоны для визуализации (дерево кластеров и диаграмма развертывания).
  • artefacts — в этой папке лежат контексты систем и компонентов
  • datasets — в этой папке лежат общие запросы, реализованные через механизм datasets
  • systems — в этой папке лежат системы.
  • systems/components — в этой папке лежат компоненты конкретных систем. Например, пример разбиения компоненты на DU можно посмотреть в файле sid_components.yaml.

Использование

В меню плагина DocHub выберите пункт Документы. В меню вы увидите ссылки на "01. Список систем" и "02. Технологическая архитектура".

1. Если вы хотите посмотреть диаграммы развертывания для кластеров - выберите пункт ""02. Технологическая архитектура"":

Меню DocHub

Нажмите на ссылку "Кластера ГК Болото", откроется дерево кластеров:

Дерево кластеров

Например, мы хотим посмотреть какие системы находятся на всех продуктовых кластерах. Для этого нужно нажать на кубик "01. Продуктовые кластера":

Продуктовые кластера

Появится диаграмма развертывания для продуктовых кластеров:

Диаграмма развертывания продуктовых кластеров

На каждой системе будет выводиться количество общих ресурсов, которые занимают её компоненты на этом кластере:

Ресурсы системы

Для того чтобы посмотреть из каких компонент состоит система на этом кластере, на картинке нужно кликнуть на эту систему, после этого вы увидите диаграмму развертывания компонент выбранной системы:

Диаграмма развертывания системы

Выбор нужного кластера или группы кластеров можно делать не только из дерева кластеров, но и из меню. Просто ткните нужный пункт в меню и будет счастье:

Меню кластеров

2. Если вы хотите посмотреть диаграмму развертывания для конкретной системы - выберите пункт ""1. Список систем"":

Меню списка систем

Появится список систем. Для системы S.ID в колонке "Карточка развертывания" нажмите "Ссылка":

Меню списка систем

После перехода по ссылке появится "Карточка развертывания системы “S.ID”". В начале карточки вы увидите общую схему развертывания системы “S.ID” на всех кластерах:

Общая схема развертывания системы

Прокрутив ниже, можно будет увидеть "Таблица проверки привязки deployment units к кластерам":

Таблица проверки привязки deployment units к кластерам

Задания для практики

  • Разберитесь со структурой примера;
  • В таблице "Таблица проверки привязки deployment units к кластерам" найдите не привязанные DU и привяжите их к соответствующим кластерам;
  • Проверьте, что привязанные системы и их DU начали отображаться на диаграммах развертывания;
  • Проверьте, что таблица проверки, теперь отображает имена указанных вами кластеров;
  • Если все хорошо, празднуйте успех :-).