Движение по хрупкому дну / Сергей Караткевич (servers.ru)

72
DevOps движение по хрупкому дну Сергей Караткевич

Transcript of Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Page 1: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

DevOpsдвижение по хрупкому днуСергей Караткевич

Page 2: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Про меня:

Админю с 2003Работаю с разработчиками с 2007Решаю бизнес-задачи с 2010

Page 3: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

«Сегодня я расскажу, как сэкономить на базах данных огромные деньги, например, миллион долларов, как это сделали мы.»

Аникин Денис (Mail.Ru)

Page 4: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

но мы не тратим миллион долларов. даже полмиллиона

Page 5: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

О чем я буду рассказывать

Page 6: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

О чем я буду рассказывать

Page 7: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

О чем я буду рассказывать

Page 8: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 9: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 10: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 11: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 12: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 13: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 14: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 15: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

СервераОфисы

Page 16: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

все это произошло за 4 месяца — 90 рабочих дней

Page 17: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему вы используете Docker неправильно

«Иногда мне кажется, что Docker придумали специально, чтобы оградить людей от NodeJS»

Page 18: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 19: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 20: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

FROM php:7-fpm-alpine

ENV DEBIAN_FRONTEND=noninteractive

RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories && \ apk update && apk upgrade && \ apk add git curl zlib-dev libmemcached-dev shadow@testing && \ git clone --branch php7https://github.com/php-memcached-dev/php-memcached/usr/src/php/ext/memcached && \ cd /usr/src/php/ext/memcached && \ docker-php-ext-configure memcached --disable-memcached-sasl && \ docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && \ docker-php-ext-enable opcache && \ usermod -u 1000 www-data && \ rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/*

ADD . /var/www/html/

WORKDIR /var/www/html

RUN rm -rf ./docker && \ chown -R www-data.www-data . && \ curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer && \ composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && \ mkdir -p ~/.ssh && \ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >>~/.ssh/config && \ composer install --no-dev --no-interaction --no-progress--no-scripts --optimize-autoloader

EXPOSE 9000

CMD ["php-fpm"]

Page 21: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

docker build .

Page 22: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 23: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

FROM php:7-fpm-alpine

ENV DEBIAN_FRONTEND=noninteractive

RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories && \ apk update && apk upgrade && \ apk add git curl zlib-dev libmemcached-dev shadow@testing && \ git clone --branch php7https://github.com/php-memcached-dev/php-memcached/usr/src/php/ext/memcached && \ cd /usr/src/php/ext/memcached && \ docker-php-ext-configure memcached --disable-memcached-sasl && \ docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && \ docker-php-ext-enable opcache && \ usermod -u 1000 www-data && \ rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/*

ADD . /var/www/html/

WORKDIR /var/www/html

RUN rm -rf ./docker && \ chown -R www-data.www-data . && \ curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer && \ composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && \ mkdir -p ~/.ssh && \ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >>~/.ssh/config && \ composer install --no-dev --no-interaction --no-progress--no-scripts --optimize-autoloader

EXPOSE 9000

CMD ["php-fpm"]

usermod -u 1000 www-data && \

Page 24: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

FROM php:7-fpm-alpine

ENV DEBIAN_FRONTEND=noninteractive

RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories && \ apk update && apk upgrade && \ apk add git curl zlib-dev libmemcached-dev shadow@testing && \ git clone --branch php7https://github.com/php-memcached-dev/php-memcached/usr/src/php/ext/memcached && \ cd /usr/src/php/ext/memcached && \ docker-php-ext-configure memcached --disable-memcached-sasl && \ docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && \ docker-php-ext-enable opcache && \ usermod -u 1000 www-data && \ rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/*

ADD . /var/www/html/

WORKDIR /var/www/html

RUN rm -rf ./docker && \ chown -R www-data.www-data . && \ curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer && \ composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && \ mkdir -p ~/.ssh && \ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >>~/.ssh/config && \ composer install --no-dev --no-interaction --no-progress--no-scripts --optimize-autoloader

EXPOSE 9000

CMD ["php-fpm"]

ADD . /var/www/html/

Page 25: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

FROM php:7-fpm-alpine

ENV DEBIAN_FRONTEND=noninteractive

RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories && \ apk update && apk upgrade && \ apk add git curl zlib-dev libmemcached-dev shadow@testing && \ git clone --branch php7https://github.com/php-memcached-dev/php-memcached/usr/src/php/ext/memcached && \ cd /usr/src/php/ext/memcached && \ docker-php-ext-configure memcached --disable-memcached-sasl && \ docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && \ docker-php-ext-enable opcache && \ usermod -u 1000 www-data && \ rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/*

ADD . /var/www/html/

WORKDIR /var/www/html

RUN rm -rf ./docker && \ chown -R www-data.www-data . && \ curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer && \ composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && \ mkdir -p ~/.ssh && \ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >>~/.ssh/config && \ composer install --no-dev --no-interaction --no-progress--no-scripts --optimize-autoloader

EXPOSE 9000

CMD ["php-fpm"]

ADD . /var/www/html/

•Используйте COPY•Помните о контексте

Page 26: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

FROM php:7-fpm-alpine

ENV DEBIAN_FRONTEND=noninteractive

RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >>/etc/apk/repositories && \ apk update && apk upgrade && \ apk add git curl zlib-dev libmemcached-dev shadow@testing && \ git clone --branch php7https://github.com/php-memcached-dev/php-memcached/usr/src/php/ext/memcached && \ cd /usr/src/php/ext/memcached && \ docker-php-ext-configure memcached --disable-memcached-sasl && \ docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && \ docker-php-ext-enable opcache && \ usermod -u 1000 www-data && \ rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/*

ADD . /var/www/html/

WORKDIR /var/www/html

RUN rm -rf ./docker && \ chown -R www-data.www-data . && \ curl -sS https://getcomposer.org/installer | php ----install-dir=/usr/local/bin --filename=composer && \ composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && \ mkdir -p ~/.ssh && \ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >>~/.ssh/config && \ composer install --no-dev --no-interaction --no-progress--no-scripts --optimize-autoloader

EXPOSE 9000

CMD ["php-fpm"]

ENV DEBIAN_FRONTEND=noninteractive

RUN composer config --global github-oauth.github.comosdc47a9835779cb32c0d06dafeb83fkx69331sdw5 &&

Page 27: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Docker очень хорош для тестов

docker run -d --name DB_NAME postgres docker run --user jenkins -v $WORKSPACE:$APP_DIR -w $APP_DIR --link DB_NAME:database custom-node:0.10.28 bash -c 'npm install && npm test'

Page 28: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

'

Page 29: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему immutable вас никуда не приведет

Page 30: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 31: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему immutable вас никуда не приведет

Page 32: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему immutable вас никуда не приведет

Page 33: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему immutable вас никуда не приведет• Runtime vs Buildtime (в какой-то момент время билда ПРЕВЫШАЕТ

время работы контейнера) • в моей системе время сборки 40 минут + время замены через

терраформ• у Akamai деплой новой конфигурации порядка 50 минут

Page 34: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему микросервисы похоронят вашу компанию

Мы внедряем микросервисы, чтобы:

• позволить распределенным командам разрабатывать части приложений• деплоить части приложений независимо друг от друга• деплоить без остановки приложения• масштабировать части приложения быстро и независимо

Page 35: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 36: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 37: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 38: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 39: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 40: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 41: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 42: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 43: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 44: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 45: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 46: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 47: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему микросервисы похоронят вашу компанию

«В сложных системах поведение агентов приводит к неожиданным результатам для всей системы»*

*Про сложность позже

Page 48: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’,

'cloud.aws.region' => region,

Page 49: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’,

'cloud.aws.access_key' 'cloud.aws.secret_key'

Page 50: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’,

'discovery.ec2.groups' => sg

Page 51: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’,

'discovery.ec2.host_type' 'network.publish_host'

Page 52: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему микросервисы похоронят вашу компанию

Page 53: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему микросервисы похоронят вашу компанию

• 11 дней потребовалось C****F***e, чтобы достать IP-адрес из блеклиста

• 41 день потребовался компании A****I, чтобы избавиться от двойного слеша в конце URL

• 13 дней потребовалось компании A****n, чтобы починить сеть в Сингапуре после выхода из строя кабеля

Page 54: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 55: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему микросервисы похоронят вашу компанию

Page 56: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему ваша система слишком сложна

«Понимание происходящего может приходить не сразу, а работать должно было вчера»

@bogdar

Page 57: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Как микросервисы взаимодействуют между собой

Page 58: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему ваша система слишком сложна

Page 59: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему ваша система слишком сложна

Page 60: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему ваша система слишком сложна

Page 61: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 62: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Почему ваша система слишком сложна• bogdar: понимание происходящего может приходить не сразу• bogdar: а работать должно было вчера

• Среднее покрытие кода тестами на моих проектах 0.23%

Каждый контейнер становится уникальным что вводит элемент неожиданности КАЖДАЯ КОМАНДА СБОРКИ МОЖЕТ ОТКАЗАТЬ ВЫ НИКОГДА НЕ ПРОВЕРЯЛИ ИХ ВСЕ

Page 63: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Agile, CI, CD и ChatOps не заработают

Page 64: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 65: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

ДеплойНо это работает просто отлично если работает

Page 66: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

ДеплойНовый скрипт

максимум 16 деплоев в день

с 4 апреля по 3 мая 210 деплоев на стейджинг

И 230 деплоев на продакшн!

Старый скрипт

32 деплоя (за февраль)

Page 67: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Деплой

Основные проблемы:

Запуск постскриптовРазница между nohup и &Лок-файлыЛоггинг

Page 68: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Деплой

Логгингexec 3>&1 4>&2trap 'exec 2>&4 1>&3' 0 1 2 3exec 1> /var/log/deploy.log 2>&1

Page 69: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Деплой

Page 70: Движение по хрупкому дну / Сергей Караткевич (servers.ru)

Вопросы!

Page 71: Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Page 72: Движение по хрупкому дну / Сергей Караткевич (servers.ru)