- Π Π°Π·Π²Π΅ΡΠ½ΡΡ Prometheus Π² kubernetes
- ΠΠ°ΡΡΡΠΎΠ΅Π½ Prometheus ΠΈ Grafana Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΌΠ΅ΡΡΠΈΠΊ
- ΠΠ°ΡΡΡΠΎΠ΅Π½ EFK Π΄Π»Ρ ΡΠ±ΠΎΡΠ° Π»ΠΎΠ³ΠΎΠ²
- ΠΠ°ΠΏΠΈΡΠ°Π½Ρ Helm Chart Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- Π Π°Π·Π²Π΅ΡΠ½ΡΡ Gitlab Π² Kubernetes
- ΠΠ°ΠΏΡΡΠ΅Π½Ρ CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π² Kubernetes
- Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²:
- 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
- Π Π°Π·Π²Π΅ΡΠ½ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ kubernates Ρ ΠΏΠΎΠΌΠΎΡΡΡ minikube
- Π Π°Π·Π²Π΅ΡΠ½ΡΡ kubernates Π² GKE
- ΠΠ°ΠΏΡΡΠ΅Π½ reddit Π² Kubernates
- Π‘ΠΎΠ·Π΄Π°Π½Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (4 ΡΠ΅ΡΠ²ΠΈΡΠ°) Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ kubernetes
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ kubernates "Ρ Π½ΡΠ»Ρ" Kubernetes The Hard Way
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΡΠ΅ΠΊ EFK
- ΠΠ»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ui ΠΈ post Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎ fluentd
- ΠΠ°ΠΏΠΈΡΠ°Π½ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π½Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π»ΠΎΠ³ΠΎΠ²
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ zipkin Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΡΠΈΠ½Π³Π°, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠΎΡΠΌΠΎΠ·Π°ΠΌΠΈ Π½Π΅ ΡΠ΅ΡΠ΅Π½Π°
- ΠΠ°ΡΡΡΠΎΠ΅Π½ ΡΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ cAdvisor
- ΠΠ»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΡΠΈΠΊ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Grafana
- Π‘ΠΎΠ·Π΄Π°Π½Ρ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Alertmanager ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π² Slack (dmitry_chirkov)
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ docker-ΠΎΠ±ΡΠ°Π·Ρ: https://hub.docker.com/u/daryan
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ Π² Makefile
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Docker:
ΠΠ°Π½Π΅Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ: monitoring/grafana/dashboards/Docker_daemon_container_states_containers.json
$ 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
- ΠΠ·ΡΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ prometheus
- Π‘ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ui, comment ΠΈ prometheus, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ΅ΡΡ ΠΈ Π°Π»ΠΈΠ°ΡΡ.
- Π‘ΠΎΠ·Π΄Π°Π½ docker-compose.yml Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ reddit ΠΈ prometheus
- ΠΡΠΎΠ²Π΅ΡΠ΅Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ/Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°
- Π£ΡΡΠ°Π½ΠΎΠ²Π΅Π½ node exporter Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΌΠ΅ΡΡΠΈΠΊ Ρ ΠΎΡΡΠ°
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ docker-ΠΎΠ±ΡΠ°Π·Ρ: https://hub.docker.com/u/daryan
ΠΠΊΡΠΏΠΎΡΡΠ΅Ρ Π²Π·ΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Percona mongodb_exporter Π‘Π±ΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Makefile (ΡΠΌ. Π½ΠΈΠΆΠ΅)
$ cd docker
$ make build_mongodb_exporter
$ make push_mongodb_exporter
ΠΠΊΡΠΏΠΎΡΡΠ΅Ρ Π²Π·ΡΡ Ρ Π΄ΠΎΠΊΠ΅ΡΡ Π°Π±Π° prom/blackbox-exporter:master. Π‘Π΅ΡΠ²ΠΈΡ ui ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ http_2xx. Π‘Π΅ΡΠ²ΠΈΡΡ comment ΠΈ ui ΠΌΠΎΠ½ΠΈΡΠΎΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ icmp.
ΠΠ°ΠΏΠΈΡΠ°Π½ docker/Makefile. ΠΠ°ΠΏΡΡΠΊ ΡΠ±ΠΎΡΠΊΠΈ:
$ cd docker
$ make build_${SERVICE}
$ make build_all
ΠΠ°ΠΏΡΡΠΊ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
$ cd docker
$ make push_${SERVICE}
$ make push_all
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ GitLab Π² Google Cloud (ΡΠΌ. Π½ΠΈΠΆΠ΅)
- ΠΠ°ΡΡΡΠΎΠ΅Π½ GitLab
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ Π½ΠΎΠ²ΡΠΉ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ GitLab-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
- Π‘ΠΎΠ·Π΄Π°Π½ CI/CD Pipeline (ΠΎΠΏΠΈΡΠ°Π½ .gitlab-ci.yml)
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΈ Π·Π°ΠΏΡΡΠ΅Π½ Runner
- ΠΡΠΎΠ²Π΅Π΄Π΅Π½Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Ρ pipeline
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠ° Π΄Π»Ρ 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 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 Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ):
- ΠΠ°ΡΡΡΠΎΠ΅Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Gitlab ΡΠΎ Slack dmitry_chirkov
- ΠΡΠΎΠ²Π΅Π΄Π΅Π½Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅ΠΉ Π² Docker
- Π‘Π΄Π΅Π»Π°Π½ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ Ρ Π΄Π²ΡΠΌΡ ΡΠ΅ΡΡΠΌΠΈ
- Π‘ΠΎΠ±ΡΠ°Π½Ρ ΠΎΠ±ΡΠ°Π·Ρ ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ docker-compose
- ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π²Π΅ΡΡΠΈΠΈ ΠΈ ΠΏΡΡΡ ΠΊ ΠΠ
ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΠΏΡΡΡΠΌΠΈ:
-
ΠΠ°Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ COMPOSE_PROJECT_NAME
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
$ export COMPOSE_PROJECT_NAME=reddit
-
Π‘ Π·Π°ΠΏΡΡΠΊΠΎΠΌ 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
- ΠΠΏΠΈΡΠ°Π½Ρ 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
Π‘Π΄Π΅Π»Π°Π½ΠΎ:
- Π‘ΠΎΠ·Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ 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
Π‘Π΄Π΅Π»Π°Π½ΠΎ:
- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Docker
- ΠΠΏΠΈΡΠ°Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°