Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Миграция с Docker Swarm на Kubernetes

Sysadminka
August 02, 2019

Миграция с Docker Swarm на Kubernetes

Денис Катаев, Тинькофф
У нас был поднят свой кластер Docker Swarm. Мы страдали, но пользовались.
Потом собрались командой и решили все-таки перестать страдать и мигрировать в Kubernetes. Для этого надо было переписать все сервисы (около 20) в Swarm, сделав их stateless, чтобы они корректно работали в новом кластере.
Я не расскажу подробно о самом Kubernetes (его нам предоставляет отдельная команда), но расскажу о жизни в Kubernetes для разработчиков.
В завершении описывается мир в который мы пришли с пони и с Кубером.

Sysadminka

August 02, 2019
Tweet

More Decks by Sysadminka

Other Decks in Technology

Transcript

  1. Миграция с Миграция с Docker Swarm на Docker Swarm на

    Kubernetes Kubernetes Денис Катаев 1
  2. История проекта История проекта Альберт делает типичный ML проект Проект

    начинает рости очень быстро Альберт постоянно помогает всем подряд 3 . 2
  3. Типичное Типичное расследование расследование 1. Есть путь урла /kek/lol 2.

    Идешь в одну репку ищешь в nginx location и на какой порт он проксирует 3. Идешь в swarm и смотришь что за сервис за этим портом 4. Гадаешь по image name что это за репозиторий в stash 5. Идешь читаешь код сервиса что понять что происходит 6 . 3
  4. Поведение кластера Поведение кластера Нет логов поведения кластера Replacate: 4

    — Runned: 0 Контейнер умер или убит? А почему? Контейнер не стартует Restart: always? А мне пофиг! Почему не запускаются сервисы? 8 . 3
  5. Медленные сборки Медленные сборки Нет кеша сборок т.к собирается на

    разных машинах кластера teamcity Привет от alpine и python: нет прекомпиленных образов (python wheels) Меняем 1 строку = 15-30 минут сборки ... Fail 10 . 2
  6. Что получили Что получили пустой кластер балансировщики стабильную работу логи

    о работе кластера (replicaset) ... ждем DevOps'а чтоб настроил деплой из CI 13 . 8
  7. ... spec: containers: - name: front-end image: nginx ports: -

    containerPort: 80 - name: rss-reader ... 14 . 2
  8. {{- range $service := .Values.services }} --- apiVersion: apps/v1 kind:

    Deployment metadata: name: {{ $service.name }} labels: app: {{ $service.name }} release: {{ $.Release.Name }} spec: replicas: {{ $.Values.service.replicas }} selector: matchLabels: app: {{ $service.name }} release: {{ $.Release.Name }} template: metadata: labels: app: {{ $service.name }} release: {{ $.Release.Name }} spec: containers: - name: {{ $service.name }} image: {{ $service.image | default $.Values.service.image }}:{{ $service. pullPolicy: {{ $.Values.service.pullPolicy }} command: ... 15 . 2
  9. services: - name: kek port: 5000 args: ['/bin/kek'] - name:

    dialog-platform port: 5000 args: ['/bin/admin'] service: image: registry.url.ru:5050/some/dialog-platform tag: '2019-08-01-admin-ee7c649' env: - name: KEK_URL value: "http://1.1.1.1:5000/some/shit" - name: LOL_URL value: "http://qwerty.url.ru:7899" - name: KEKLOL_URL value: "https://other.url.ru" - name: LOLKEK_URL value: "http://some-qa.url.ru:8087" secret_env: - name: DB_URL from: db_url 15 . 4