Skip to content

otus-devops-2019-02/dchirkov_microservices

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Build Status

dchirkov_microservices

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 29

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ Prometheus Π² kubernetes
  • НастроСн Prometheus ΠΈ Grafana для сбора ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ
  • НастроСн EFK для сбора Π»ΠΎΠ³ΠΎΠ²

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 28

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Написаны Helm Chart для прилоТСния
  • Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ Gitlab Π² Kubernetes
  • Π—Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ Π² Kubernetes

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 27

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • РассмотрСна Ρ€Π°Π±ΠΎΡ‚Π° сСрвисов:
    • ClusetrIP
    • NodePort
    • LoadBalancer
  • РассмотрСна Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²:
    • kube-dns
    • Ingress Controller (балансировщик L4 ΠΈΠ»ΠΈ L7, TLS тСрминация)
  • РассмотрСны сСтСвыС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ
  • РассмотрСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для Π±Π°Π·Ρ‹ Π² Π²ΠΈΠ΄Π΅:
    • классичСский Ρ‚ΠΎΠΌ kubernetes emptyDir
    • внСшний Ρ‚ΠΎΠΌ GCP
    • PersistentVolume
    • PersistentVolume ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… StorageClass (PersistentVolumeClaim)

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

  • Описан создаваСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Secret Π² Π²ΠΈΠ΄Π΅ Kubernetes-манифСста ui-secret.yml. Π’ качСствС tls.crt ΠΈ tls.key Π±Ρ‹Π»ΠΈ взяты Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄:
    $ cat tls.crt | base64
    $ cat tls.key | base64

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 26

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ локальноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ kubernates с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ minikube
  • Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ kubernates Π² GKE
  • Π—Π°ΠΏΡƒΡ‰Π΅Π½ reddit Π² Kubernates

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 25

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π‘ΠΎΠ·Π΄Π°Π½Ρ‹ манифСсты нашСго прилоТСния (4 сСрвиса) Π² контСкстС kubernetes
  • УстановлСн kubernates "с нуля" Kubernetes The Hard Way

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 23

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • УстановлСн стСк EFK
  • Для сСрвисов ui ΠΈ post настроСно Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎ fluentd

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

  • Написан Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для парсинга нСструктурированных Π»ΠΎΠ³ΠΎΠ²
  • УстановлСн zipkin для распрСдСлСнного трСйсинга, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°ΠΌΠΈ Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½Π°

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 21

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • НастроСн сониторинг ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ cAdvisor
  • Для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ установлСна Grafana
  • Π‘ΠΎΠ·Π΄Π°Π½Ρ‹ ΠΏΠ°Π½Π΅Π»ΠΈ отобраТСния ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ
  • УстановлСн Alertmanager ΠΈ создано ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ оповСщСния ΠΎ нСдоступности сСрвисов, оповСщСния приходят Π² Slack (dmitry_chirkov)

Бсылка Π½Π° собранныС docker-ΠΎΠ±Ρ€Π°Π·Ρ‹: https://hub.docker.com/u/daryan

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ сСрвисы Π² Makefile
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ встроСнными срСдствами Docker:
    $ docker-machine scp /monitoring/docker-native/daemon.json docker-host:/tmp
    $ docker-machine ssh docker-host sudo cp /tmp/daemon.json /etc/docker/
    $ docker-machine ssh docker-host sudo systemctl restart docker
    ПанСль отобраТСния: monitoring/grafana/dashboards/Docker_daemon_container_states_containers.json

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 20

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π˜Π·ΡƒΡ‡Π΅Π½ интСрфСйс prometheus
  • Π‘ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ сСрвисов ui, comment ΠΈ prometheus, для этого Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ ΠΈ алиасы.
  • Π‘ΠΎΠ·Π΄Π°Π½ docker-compose.yml для запуска прилоТСния reddit ΠΈ prometheus
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ остановки/запуска ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ микросСрвиса
  • УстановСн node exporter для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ хоста

Бсылка Π½Π° собранныС docker-ΠΎΠ±Ρ€Π°Π·Ρ‹: https://hub.docker.com/u/daryan

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ MongoDB

ЭкспортСр взят ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Percona mongodb_exporter Π‘Π±ΠΎΡ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° посрСдством Makefile (см. Π½ΠΈΠΆΠ΅)

$ cd docker
$ make build_mongodb_exporter
$ make push_mongodb_exporter

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ui, comment, post с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ blackbox_exporter

ЭкспортСр взят с Π΄ΠΎΠΊΠ΅Ρ€Ρ…Π°Π±Π° prom/blackbox-exporter:master. БСрвис ui мониторится ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ http_2xx. БСрвисы comment ΠΈ ui мониторятся ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ icmp.

Makefile для сборки ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²

Написан docker/Makefile. Запуск сборки:

$ cd docker
$ make build_${SERVICE}
$ make build_all

Запуск Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

$ cd docker
$ make push_${SERVICE}
$ make push_all

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 19

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • УстановлСн GitLab Π² Google Cloud (см. Π½ΠΈΠΆΠ΅)
  • НастроСн GitLab
  • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ GitLab-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
  • Π‘ΠΎΠ·Π΄Π°Π½ CI/CD Pipeline (описан .gitlab-ci.yml)
  • УстановлСн ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Runner
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ экспСримСнты с pipeline

Установка GitLab

Установка инстанса для GitLab:

$ gcloud compute addresses create gitlab-ci --region europe-west1
$ docker-machine create --driver google --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts --google-machine-type n1-standard-1 --google-address gitlab-ci --google-tags http-server,https-server --google-zone europe-west1-b gitlab-ci
$ eval $(docker-machine env gitlab-ci)

Установка GitLab:

$ cd gitlab-ci && docker-compose up -d

РСгистрация runners для сборки ΠΎΠ±Ρ€Π°Π·Π° Π² Docker:

$ gitlab-runner register --non-interactive --url "http://35.210.200.83/" --registration-token "Bx65sXMhdpFwsZt9kqMy" --executor "docker+machine" --docker-image alpine:latest --docker-volumes /var/run/docker.sock:/var/run/docker.sock --description "autoscaling-runners" --tag-list "docker,linux,ubuntu,xenial" --run-untagged="true" --locked="false" 

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ reddit Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ прилоТСния (всС Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅). Π’ GitLab CI/CD установлСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (protected):

CI_REGISTRY_PASSWORD
CI_REGISTRY_USER
SSH_PRIVATE_KEY
  • УстанавливаСм Ρ†Π΅Π»Π΅Π²ΠΎΠΉ хост ΠΈ всС зависимости, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ reddit:
$ cd gitlab-ci
$ terraform init terraform/
$ terraform apply -var-file=terraform/terraform.tfvars terraform/
$ ansible-playbook playbooks/reddit_req.yml
  • Π”Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² созданный GitLab SCM, запускаСтся pipeline со сборкой, тСстами ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΎΠΉ Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ хост reddit.

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Runners

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Runners - это созданиС Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎ-Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ (Runners autoscale) Из-Π·Π° ограничСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ всС шаги Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹:

  • Π‘ΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ инстанс gitlab-runner, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ для GitLab Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ бастион, Ρ‚.Π΅. ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запуском Π½ΠΎΠ²Ρ‹Ρ… ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Runner:
$ cd gitlab-ci
$ terraform init terraform-runner/
$ terraform apply -var-file=terraform-runner/terraform.tfvars terraform-runner/
  • На Π½Π΅Π³ΠΎ установлСны GitLab Runner, Google Cloud SDK ΠΈ Docker с docker-machine:
$ ansible-playbook playbooks/deploy_runner.yml
  • Π’ созданном инстансС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½ Π² Google ΠΈ зарСгистировн Runner:
gitlab-runners$ gcloud init --console-only
gitlab-runners$ gcloud auth application-default login
gitlab-runners$ gitlab-runner register --non-interactive --url "http://${gitlab_ci_ip}/" --registration-token "${gitlab_installation_token}" --executor "docker+machine" --docker-image alpine:latest --description "autoscaling-runners" --tag-list "docker,linux,ubuntu,xenial" --run-untagged="true" --locked="false"
  • ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ /etc/gitlab-runner/config.toml (шаблон находится Π² gitlab-ci/template/config.toml.j2). Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ:
concurrent = 10
...
  [runners.machine]
    IdleCount = 1
    IdleTime = 300
    MachineDriver = "google"
    MachineName = "autoscale-%s"
    MachineOptions = [
        "google-project={{ google_project }}",
        "google-machine-image=https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts",
        "google-machine-type=n1-standard-1",
        "google-zone=europe-west1-b",
        "google-use-internal-ip=true"
    ]
  • ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Π΅Π½ сСрвис gitlab-runner:
$ systemctl restart gitlab-runner.service

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈ запускС stage с 3 job ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 3 инстанса (ΠΈ 1 Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ): stage_with_3_jobs

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ со Slack

  • НастроСна интСграция Gitlab со Slack dmitry_chirkov

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 17

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ экспСримСнты с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ сСтСй Π² Docker
  • Π‘Π΄Π΅Π»Π°Π½ микросСрвис с двумя сСтями
  • Π‘ΠΎΠ±Ρ€Π°Π½Ρ‹ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker-compose
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΡ€Ρ‚ сСрвиса, вСрсии ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ Π‘Π”

ИзмСнСниС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ двумя путями:

  1. Π—Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния COMPOSE_PROJECT_NAME

    НапримСр:

    $ export COMPOSE_PROJECT_NAME=reddit
  2. Π‘ запуском docker-compose с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -p

    НапримСр:

    $ docker-compose -p reddit up -d

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

Π˜Π·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ прилоТСния Π±Π΅Π· пСрСсборки ΠΎΠ±Ρ€Π°Π·Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ хостовой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Для этого скопируСм git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° Ρ…ΠΎΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ:

docker-host$ git clone -b docker-4 https://github.com/otus-devops-2019-02/dchirkov_microservices.git

Π’ Ρ„Π°ΠΉΠ»Π΅ docker-compose.override.yml для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвиса ΡƒΠΊΠ°ΠΆΠ΅ΠΌ:

ui:
  volumes:
    - /home/docker-user/dchirkov_microservices/src/ui:/app
post:
  volumes:
    - /home/docker-user/dchirkov_microservices/src/post-py:/app
comment:
  volumes:
    - /home/docker-user/dchirkov_microservices/src/comment:/app

Для пСрСопрСдСлСния запускаСмой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ui Π½ΡƒΠΆΠ½ΠΎ Π² docker-compose.override.yml ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ:

ui:
  command: puma --debug -w 2

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 16

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • ΠžΠΏΠΈΡΠ°Π½Ρ‹ 3 Dockerfile для Ρ‚Ρ€Ρ‘Ρ… микросСрвисов: post, ui ΠΈ comment
  • Π‘ΠΎΠ·Π΄Π°Π½Π° ΡΠ΅Ρ‚ΡŒ reddit Ρ‚ΠΈΠΏΠ° bridge
  • ΠžΠ±Ρ€Π°Π· ui ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½
  • К микросСрвису mongo ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ‚ΠΎΠΌ reddit_db
$ docker run -d --network=reddit --network-alias=post_db --network-alias=comment_db -v reddit_db:/data/db mongo:latest

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *:

  • Π—Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСтСвыми алиасами. ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ "-e":
$ docker run -d --network=reddit --network-alias=new_post_db --network-alias=new_comment_db mongo:latest
$ docker run -d --network=reddit --network-alias=new_post -e POST_DATABASE_HOST=new_post_db daryan/post:1.0
$ docker run -d --network=reddit --network-alias=new_comment -e COMMENT_DATABASE_HOST=new_comment_db daryan/comment:1.0
$ docker run -d --network=reddit -p 9292:9292 -e POST_SERVICE_HOST=new_post -e COMMENT_SERVICE_HOST=new_comment daryan/ui:1.0
  • ВсС микросСрвисы пСрСсобраны Π½Π° основС Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… дистрибутивов alpine

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 15

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • Π‘ΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ docker
  • Π‘ΠΎΠ·Π΄Π°Π½ docker-host Π² gcloud
  • Π‘ΠΎΠ·Π΄Π°Π½ Dockerfile для построСния ΠΎΠ±Ρ€Π°Π·Π° нашСго прилоТСния
  • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π·Π°Π»ΠΈΡ‚ Π½Π° Docker Hub

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

docker run --rm -ti tehbilly/htop
docker run --rm --pid host -ti tehbilly/htop

ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½ΡƒΡŽ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ PID

Π—Π°Π΄Π°Π½ΠΈΠ΅ со *

  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Terraform создаётся Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство инстансов, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² terraform.tfvars
$ cd docker-monolith/infra
$ terraform apply -var-file=terraform/terraform.tfvars terraform/
  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊΠΎΠ² Ansible ΠΈ использованиСм динамичСского ΠΈΠ½Π²Π΅Π½Ρ‚ΠΎΡ€ΠΈ устанавливаСтся Π΄ΠΎΠΊΠ΅Ρ€ ΠΈ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
$ ansible-playbook playbooks/reddit.yml
  • описан шаблон ΠΏΠ°ΠΊΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π· с ΡƒΠΆΠ΅ установлСнным Docker ΠΈ нашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
$ packer build -var-file=packer/variables.json packer/reddit.json

Π”Π— ΠΊ Π·Π°Π½ΡΡ‚ΠΈΡŽ 14

Π‘Π΄Π΅Π»Π°Π½ΠΎ:

  • УстановлСн Docker
  • Описано ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°