среда, 5 февраля 2020 г.

FOSDEM 2020

В этом году я снова съездил на FOSDEM.
В связи с тем, что это был юбилейная 20я конференция, то народу там было больше чем в прошлом году. На некоторые доклады попасть было нереально, даже если занимать очередь за час до доклада.



В принципе, доклады чуть интереснее в прошлом году для меня. Но в этом году мне удалось прослушать всего 10.

Вот некоторые из них:
- Introducing Tanka — Grafana Labs выпустили какую-то штуку типа ksonnet, очень спорно, мне так показалось
- Over Twenty Years Of Automation — как изменялась автоматизация, начиная от баш-скриптов до Docker
- Preserve kubernetes state using heptio velero — неплохой ознакомительный доклад по Velero (бывший Ark)
- Below Kubernetes: Demystifying container runtimes — обзор существующих CRI для кубера
- HTTP/3 for everyone —отличный доклад по HTTP/3, еще бы, ведь его вел сам создать cURL
- PostgreSQL on K8S at Zalando: Two years in production —на этот доклад был прям аншлаг, пришлось час отстоять в очереди и еще час просидеть на предыдущем докладе, чтобы остаться в этой аудитории. В общем как обычно, Zalando крутые ребята и пилят класные штуки, в частности Patroni. Рассказ о том, как PostgreSQL работает в кубере и какие проблемы при этом есть.

Не удалось попасть на доклад про мониторинг клубники и eBPF+Cilium.
А, ну да, приложение под iOS ужасное, в отличие от Android.

Записи докладов: https://video.fosdem.org/2020/

пятница, 27 декабря 2019 г.

XP Days Ukraine 2019

22-23 ноября, в Киеве прошла ежегодная конференция XP Days. Доклады были посвящены инженерным практикам, DevOps, архитектуре и т.д.
Конференция шла в три параллельных потока, я отметил что не наблюдал ни одной задержки между докладами, так хорошо все было организовано. Единственное что из-за смены местами одного из докладов, так и не удалось на него попасть. Но зато есть его запись.

Несколько докладов, на которых я побывал и они мне понравились:
- Effectiveness tips from Kubernetes trenches by Captain Obvious, линк
- Lego from Containers, линк
- 30 minutes to prod, линк
- Practical GitOps on Kubernetes with ArgoCD, линк
- The movement steps to the high-load tolerant and scalable infrastructure based on the AWS and Kubernetes, линк

суббота, 27 июля 2019 г.

Вопросы на собеседовании на позицию DevOps-инженера которые задавал я

Я чуть больше года назад оставлял заметку о том, какие вопросы мне задавали на собеседованиях.
В последние несколько месяцев мне самому доводилось достаточно собеседовать людей, поэтому в этой заметке я расскажу какие вопросы задавал я и почему.

Техническое интервью с кандидатом у нас занимало примерно 1.5 часа.
Собеседование с применением обычной белой доски (whiteboard) и маркера. Мы не использовали схему вопрос-ответ, а само собеседование шло в виде беседы, по мере которой с каких-то общих тем мы углублялись в конкретные детали.

В первую очередь мы со своей стороны рассказывали, что у нас за продукт с технической точки зрения, что мы делаем по инфраструктурной части, как проиходит работа в команде платформы и взаимодействие с разработчиками и другими отделами. Объясняли кандидату почему мы сейчас ищем человека в команду, какие ближайшие планы по развитию команды и продукта с технической точки зрения, и т.д.

По резюме кандидата мы особо не спрашивали, но учитывали во внимание то, что если человек 5 лет работал с сетями и прочими цисками, то нет смысла спрашивать его про модель OSI и что такое пиринг VPC.

Первый часть с которой мы начинали, это попросили кандидата на доске нарисовать как он видит схему инфраструктуры какого-нибудь веб-проекта. Начиная с самого простенького что у нас просто есть инстанс или железный сервер (мы кстати рекомендовали привязываться к любому удобному облачному провайдеру или вообще bare-metal).
По мере роста инфраструктуры задавались наводящие вопросы по теме:
- как бы ты реализовывал балансинг на инстансах, автоскейлинг группу, и т.д.
- что бы ты делал если начинает расти нагрузка на базу, репликации, индексы, кеш, очереди
- если сломался сервер, как бы ты траблшутил все это
- зачем нужен CDN, как ходит трафик к твоему приложению, зашифрован ли он, на каком этапе происходит терминирование SSL
- как бы ты реализовывал бекапы
- какой мониторинг бы использовал и почему, когда стоит платить деньги за какой-нибудь datadog, а когда уже стоит завозить свой условный Prometheus-стек, то же самое касается логгинга

Вторая часть плавно переходила в понимание и огранизацию процесса CI/CD.
Как кандидат видит пайплайн, какие инструменты бы он использовал, как поддерживать адекватные косты для всего этого хозяйства (например юзать спот инстансы) и прочее.

Если у кандидата имелся опыт работы с Kubernetes задавали несколько вопросов по куберу, так как у нас его уже активно используют. Вопросы больше были из разряда:
- какие проблемы решает кубер, а какие нет
- в чем отличие контейнерной виртуализации от полной
- для чего придумали HELM и как его используют

Обычно этого было достаточно для понятия уровня кандидата. Но иногда если оставалось время, то могли спросить какой-то каверзный вопрос из разряда, где на жестком диске находится каталог /proc или как посмотреть нетстатом established UDP соединения.

суббота, 25 мая 2019 г.

DevOps Days Kyiv 2019

17-18 мая в Киеве прошла ежегодная конференция DevOps Days Kyiv.

Особенность конференции заключается в том, что доклады посвящены культуре девопса, а не техническим деталям.
Помимо основных докладов можно было выступить со своей темой (ignite talks).
Например были небольшие доклады про Terraform, БД, VictoriaMetrics, звезды на Github, организацию сети в амазоне и много других интересных докладов.

Помимо докладов, каждый мог предложить какую-либо тему для обсуждения в формате open space, некоторые из обсуждаемых тем второго дня:

Terraform и СУБД в Kuberentes также были на open space обсуждениях.
В общем конфа получилась интересная, как с организаторской точки зрения, так и со стороны докладов и качества материала.

Фото: https://www.facebook.com/pg/devopsdayskyiv/photos/?tab=album&album_id=402849030443211&ref=page_internal
Слайды презентации: https://www.slideshare.net/MykolaMarzhan/presentations
Видео докладов: https://www.youtube.com/playlist?list=PL_O8YSX8ckffzeV9mIBUQniaKFxGnPdYh

воскресенье, 7 апреля 2019 г.

Отправляем метрики из AWS Cloudwatch в Prometheus с помощью prometheus-operator в Kubernetes

Добавляем права нашему пользователю AWS для чтения метрик:
aws iam attach-group-policy \
--policy-arn arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess \
--group-name kops-dev


Создаем values-файл для экспортера:
cat << EOF > values-cloudwatch-exporter.yml
service:
  annotations:
    prometheus.io/scrape: "true"
EOF


Устанавливаем экспортер:
helm install stable/prometheus-cloudwatch-exporter \
--name prometheus-cloudwatch-exporter \
--namespace kube-system \
--set aws.aws_access_key_id=${AWS_ACCESS_KEY_ID} \
--set aws.aws_secret_access_key=${AWS_SECRET_ACCESS_KEY} \
-f values-cloudwatch-exporter.yml



Создаем values-файл для оператора:
cat << EOF > values-operator.yml
prometheus:
  additionalServiceMonitors:
    - name: prometheus-operator-cloudwatch
      endpoints:
      - port: http
        path: /metrics
        interval: 30s
      namespaceSelector:
        matchNames:
          - kube-system
        selector:
          matchLabels:
            app: prometheus-cloudwatch-exporter
serviceMonitors:
  - name: ""
    namespaceSelector:
      any: true
EOF


Устанавливаем prometheus-operator с Alertmanager и Grafana:
helm install stable/prometheus-operator \
--name prometheus-operator \
--namespace monitoring \
-f values-operator.yml


Идем в дашборд прометеуса на страницу Targets и проверяем наш новый таргет:



Ну и наконец посмотрим сами метрики:

суббота, 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:node1password@node1ip/node1vhost", "src-queue": "celery", "dest-uri": "amqp://node2user:node2password@node2ip/node2vhost", "dest-queue": "celery"}'

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

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

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

По умолчанию установленный 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: '*'

Разрешаем в конфигмапе использование прокси, добавляем список адресов Cloudfront и перезаписываем the_real_ip:
kubectl edit configmap nginx-ingress-controller -n kube-system
data:
...
  # curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq  -r '.prefixes[] | select(.service=="CLOUDFRONT") | .ip_prefix' | awk '{print $1}'
  proxy-real-ip-cidr: "54.155.0.0/16,172.96.98.0/24..."
  http-snippet: |
    map '' $the_real_ip {
      default          $http_x_forwarded_for;

    }
  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 [-]

В самом конфиге ингресса добавляем:
    nginx.ingress.kubernetes.io/server-snippet: |
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;

суббота, 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, но я его не нашел в тех плейлистах.