Go to file
2023-07-01 21:04:18 +10:00
static not yet 2023-07-01 20:29:27 +10:00
templates not yet 2023-07-01 20:29:27 +10:00
.drone.yml not yet 2023-07-01 20:29:27 +10:00
app.py not yet 2023-07-01 20:29:27 +10:00
README.md not yet 2023-07-01 21:04:18 +10:00
reqs.txt not yet 2023-07-01 20:29:27 +10:00

Table of Contents

  1. Логика доступа к контенту
  2. Логика деплоя в куб по коммиту
  3. Общая схема отдельного приложения
  4. Логика работы мониторинга

Вообще суть такова:

Мы берём фласк, кидаем в контейнер, далее контейнер педалим в кубернетес в деплоймент соответствующий ветке (мастер/дев) с 2-3 подами на деплоймент, всё это должен уметь делать CI/CD

Далее возможно добавление в схему волта


Логика доступа к контенту

наверх

Попадаем на сервер, nginx отправляет в куб. Там ингресс закидывает на деплоймент соответственно доменному имени. Из деплоймента отвечают свободные поды. Поды ходят в постгрес и минио когда надо.

stateDiagram-v2  

    state USER 
    state inet <<join>>
  
    state Nginx 

    user --> inet   : internet
    inet --> Nginx  : router

    state Kube {

        NginxIngress

        lbServiceMaster
        lbServiceDev
  

        state DeploymentMaster {
            state "app" as p1  
            state "app" as p2  
        } 
        state DeploymentDev {
            state "app" as p1d 
            state "app" as p2d  
        } 
    }

    Nginx --> NginxIngress : *.board.vdk2ch.ru, www.vdk2ch.ru

    NginxIngress --> lbServiceMaster : master.board.vdk2ch.ru
    NginxIngress --> lbServiceDev    : dev.board.vdk2ch.ru


    lbServiceMaster --> DeploymentMaster
    lbServiceMaster --> DeploymentMaster  

    lbServiceDev --> DeploymentDev
    lbServiceDev --> DeploymentDev 

    state Minio
    state Postgresql

    state all_join <<join>> 

    p1  --> all_join
    p2  --> all_join
    p1d --> all_join
    p2d --> all_join
 

    all_join --> Postgres : данные с БД
    all_join --> Minio    : статика


Логика деплоя в куб по коммиту

наверх

stateDiagram-v2  
 
    committer --> Git
 
    Git --> Drone
  
    state "pipeline-${branch}" as pm {

        Runner --> Docker : create ${branch} image with new files
         
        
        Docker --> Kube : ${branch} deploy with new image 
    }
  

    state branch_fork <<fork>>
    Drone --> branch_fork : ветка репо

    branch_fork --> pm  


Общая схема отдельного приложения

наверх

stateDiagram-v2
 

    User

    state inet <<fork>>

    User --> inet : дайте борду, запишу свои посты, картинки итд

    state Flask {

        hmtx : htmx templates
        static_files : flask static

    }

    inet --> Flask

    Flask --> Postgres : посты
    Flask --> Minio    : картинки и шебм
 

Логика работы мониторинга

наверх

stateDiagram-v2

    App

    state enter_monitoring <<fork>>

    App --> enter_monitoring
    enter_monitoring --> Prometheus : metrics
    
    Prometheus --> Grafana  

    enter_monitoring --> Loki : logs
    Loki --> Grafana  

    state admini {
        User : Наш слон
    }

    Prometheus --> Alertmanager
    Loki --> Alertmanager


    state alerts_join <<join>>
    state dash_join <<join>>

    Alertmanager --> alerts_join 
    Grafana --> alerts_join  

    alerts_join --> User : алерты

    
    Grafana --> dash_join  
    dash_join --> User : дашборды