суббота, 9 марта 2019 г.

FOSDEM 2019

2-3 февраля мне удалось побывать на ежегодной конференции FOSDEM.
Конфа полностью бесплатная, проводилась на базе университета Брюсселя, примерно в часе пешком от центра Брюсселя.
Народу было много, гитхаб разливал кофеек бесплатно:

Докладов было очень много, но не всегда можно было попасть на те которые хочется из-за большого количества народу.
Помимо самих докладов, было множество интересных стендов, на некоторых даже можно было взять пивко за донат или сделать себе значок с логотипом Gentoo собственными руками:

Теперь пару слов о докладах, на которых я побывал (тут неполный список, только те что я сходу нашел):
Deploying PostgreSQL on Kubernetes — ожидал услышать хардкора, но по факту рассказывалось про базовые вещи кубера и что постгрес можно деплоить ямликами, хелмом или оператором
MySQL Replication - Advanced Features — Петр Зайцев рассказал об истории появления различных репликаций в MySQL, чем отличаются различные типы репли чтоикаций и т.д.
Loki - Prometheus for logs — презентация тулзы для логов от создателей Grafana, выглядит круто, посмотрим как покажет себя на деле
Introducing kubectl-trace — вроде что-то про трассировку в кубере, толком не смотрел доклад, так как в это время чинил стейджевый куберовский кластер :)
Upcoming Kubernetes Storage features — TLDR: скоро можно будет PVC мувать между неймспейсами, клонировать PVC и создавать Populating PVC (т.е. при создании PVC сразу же на него например клонировать код из git-репозитория или скачивать файл по http, что-то на манер packer)
PostgreSQL Goes to 11! — немного истории постгреса и обзор чейнджлога к 11 версии
Netflix and FreeBSD — доклад о том, как Netflix поддерживают свою кодовую базу FreeBSD, почему и как они гоняют большой траффик на своих CDN с помощью FreeBSD
The Cloud is Just Another Sun — история о том, как было раньше с серверами, как сейчас все в облаках и что надо делать дальше
2019 - Fifty years of Unix and Linux advances — maddog интересно рассказал, как разивался Unix, GNU, Linux, open source, в интересной форме

суббота, 9 февраля 2019 г.

Миграция сообщений в очередях RabbitMQ с помощью Shovel

У RabbitMQ существует возможность миграции сообщений между очередями, как в пределах одной ноды, так и между различными нодами.
Для этого можно использовать плагин Shovel (вообще кроме Shovel полезно будет знать про федерацию и кластеризацию в RabbitMQ, в некоторых кейсах можно использовать и их).

Установка плагина Shovel:
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management

Пример использования Shovel для миграции очереди celery с ноды node1 на node2:
rabbitmqctl set_parameter shovel celery-migration \
'{"src-uri": "amqp://node1user:[email protected]/node1vhost", "src-queue": "celery", "dest-uri": "amqp://node2user:[email protected]/node2vhost", "dest-queue": "celery"}'

Для того чтобы node1 могла подключиться к node2, на второй должен быть открыть порт 5672.
Помимо использования CLI можно и использовать веб-интерфейс, пример можно посмотреть тут.

среда, 23 января 2019 г.

Пробрасываем реальный IP-адрес в Nginx Ingress

По умолчанию установленный Nginx Ingress с помощью HELM в AWS не пробрасывает реальный IP-адрес внутрь балансера, поэтому в логах ингресс-контроллера будут присутствовать логи с внутренних адресов сети.

В каком случае нам нужно иметь реальный адрес? Например если мы хотим на уровне ингресса или приложения анализировать адреса или для их блокировки.
Делается это несложно.

Включаем аннотацию для прокси в сервисе контроллера:
kubectl edit svc nginx-ingress-controller -n kube-system
metadata:
...
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'

Разрешаем в конфигмапе использование прокси:
kubectl edit configmap nginx-ingress-controller -n kube-system
data:
...
  use-proxy-protocol: "true"

Собственно говоря после этого все.
Идем в логи контроллера и смотрим адреса с которого приходят запросы:
kubectl logs -f nginx-ingress-controller-56f4bf4dc9-5pqjn
1.1.1.1 - [1.1.1.1] - - [22/Jan/2019:18:58:23 +0000] "GET /ping HTTP/1.1" 503 197 "-" "Wget" 85 0.000 [-]

Если же используется Cloudfront на фронте и хочется пробрасывать реальный адрес с CF на ингресс без дублирования в хедере, то можно добавить в ингресс сервер сниппет:
    nginx.ingress.kubernetes.io/server-snippet: |
        real_ip_header X-Forwarded-For;

Для чего это может понадобиться?
Вот пример рейт лимита.
В ингрессе:
    nginx.ingress.kubernetes.io/server-snippet: |
        real_ip_header X-Forwarded-For;
        limit_req zone=ratelimit_hundred burst=1 nodelay;

И в values для контроллера:
controller:
    http-snippet: |
      limit_req_zone  $http_x_forwarded_for zone=ratelimit_hundred:5m rate=100r/s;

вторник, 15 января 2019 г.

Аутентификация в Kubernetes с помощью GitHub OAuth и Dex

Описал в статье как мы настраивали аутентификацию для кубера.
На хабре: https://habr.com/ru/post/436238/
На медиуме (англ): https://medium.com/preply-engineering/k8s-auth-a81f59d4dff6

Пока мы все это настраивали, много раз выстрелили себе в ноги. Однако таки удалось добить ее, сейчас успешно используем это на паре-тройке куберовских кластеров.
И да, подписывайтесь на телеграм-канал моего коллеги Юры: https://t.me/catops именно он добил эту аутентификацию, пока я мучался с ней тонну времени.
Он вместе с Максимом практически ежедневно выкладывает ссылки на годное чтиво, о том что связано с DevOps и смежными IT-темами.

суббота, 15 декабря 2018 г.

Создание read-only пользователя в PostgreSQL

Источник: https://gist.github.com/oinopion/4a207726edba8b99fd0be31cb28124d0

Сохраню себе для копипасты.

-- Create a group
CREATE ROLE readaccess;

-- Grant access to existing tables
GRANT USAGE ON SCHEMA public TO readaccess;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readaccess;

-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readaccess;

-- Create a final user with password
CREATE USER user WITH PASSWORD 'secret';
GRANT readaccess TO user;

суббота, 3 ноября 2018 г.

Видео докладов с конференции DevOps Stage 2018

В середине октября прошла двухдневная конференция в Киеве DevOps Stage.
Доклады были разбиты на три категории:


Само собой все доклады мне посетить не удалось, но могу выделить для себя те, которые понравились больше всего.

Yevhen Volchenko | KUBERNETES ATTACK SURFACES AND WAYS TO SECURE THEM
Практические советы о том как защитить Kubernetes.
Хорошие пояснения что и почему надо защищать с примерами конфигураций.

Volodymyr Tsap | ON THE ROAD TO 6.9K. HOW TO SUCCEED IN TECHNICAL INTERVIEW
Мем про 6.9к известен в киевской девопс-тусовке (ссылку на статью не оставляю, но гуглится по запросу "DevOps с комплексом бога запросил зарплату в $6.9К").
Доклад интересен прежде всего интересной подачей с кучей лулзов.
В докладе интересно рассказывается про описание работы инженера, с какими технологиями он работает, что должен знать, какие вопросы обычно задают на собеседовании и прочее.

Yurii Rochniak | CI DOESN’T START WITH JENKINS
Юра рассказывает про то как мы пытаемся варить девопс в Preply, какие технологии и тулы используем, как эволюционируем и почему.
Одним из вопросов из зала был, как мы раним Kubernetes на спот-инстансах в AWS, после чего Юра написал полноценную статью, которая отвечает на этот вопрос.

Juliya Tkachova | DEVOPS ON SCALE FROM PHILOSOPHY TO TOOLSET
В этом докладе рассказывается про девопс со множеством примеров факапов.
Причем название доклада полностью описывает его содержание, поэтому интересен как со стороны философии, так и со стороны набора инструментов и технологий.

Был еще один хороший доклад от Mark Smalley, но я его не нашел в тех плейлистах.

суббота, 13 октября 2018 г.

Видео докладов с конференции OSDN 2018

В сети появились записи докладов с конференции на youtube. Конференция проводится уже не первый раз в Киеве, в этом году она была в сентябре.

Рекомендую к просмотру доклады:
— Леннарта Поттеринга — Locking Down Your Systemd Services (Леннарта слушать интересно)

— Максима Богука — Использование статистики в PostgreSQL для оптимизации производительности (узнал для себя много нового про Postgres)

Также мне было интересно послушать доклад Николая Маржана — Amazon RDS Monitoring, так как я использую PostgreSQL в амазоновском RDS.

воскресенье, 7 октября 2018 г.

Долой cat и less, да здравствует bat!

https://github.com/sharkdp/bat

Что умеет:
- подсветка номеров строк и синтаксиса (довольно много различных языков и разметок)
- если содержимое файла влезает в экран, работает как cat, если нет — как less
- поддержка git diff
- поддержка конкатенации файлов, равно как и cat
- при этом все эти штуки можно включать и отключать как удобно

Как привыкаем:
echo alias cat='bat' >> ~/.bash_profile
echo alias less='bat' >> ~/.bash_profile
source ~/.bash_profile
cat README.md