Size: a a a

Пятничный деплой

2021 April 16
Пятничный деплой
Сборник советов и сниппетов для работы с GitHub Actions

Многие уже успели вкусить плод CI/CD от гитхаба и получили порцию смешанных чувств: начиная от отрицания и заканчивая радостью. Авторы данного репозитория перенесли десяток разномастных сервисов c Travis и решили поделиться своим опытом и знаниями с коллегами.
Опубликованы способы отправки списка коммитов в Slack, советы как правильно управлять секретными ключами и многое другое.

https://github.com/yengoteam/awesome-gha-snippets
источник
Пятничный деплой
Cloudflare добавила в свой набор инструментов для команд (можно протестировать бесплатно до 50 человек) защищенные терминалы в браузере. http://amp.gs/61n5. И разрешила использовать свою технологию защищенных туннелей для всех. Их можно использовать чтобы например открывать локальные приложения для глобальных тестов или коллаборации. Тоже бесплатно. http://amp.gs/61nQ
источник
Пятничный деплой
@oleg_log поделиллся отличной статьей про SQLite. Я вообще подписываюсь почти под каждым словом автора. 🤓 Я очень долгое время расценивал SQLite как игрушечную базу. Когда я только начинал свой путь а разработке, мне хотелось более сложных систем, что бы все скейлилось, было распределенным, и все вот это вот, что сейчас строят для стартапов, у которых пару тысяч клиентов. 🤣

С опытом я стал смотреть на вещи немного по другому. Вдруг тяга к сложности сменилась желанием простоты. А вещи, которые казались скучными, теперь кажутся классными и надежными.

#sqlite #db

https://unixsheikh.com/articles/sqlite-the-only-database-you-will-ever-need-in-most-cases.html
источник
Пятничный деплой
Открытые практикумы DevOps и Golang by Rebrain: 20 и 22 апреля

Успевайте зарегистрироваться. Количество мест строго ограничено! Запись практикума Ansible в подарок за регистрацию!

DevOps by Rebrain: TeamCity - Jenkins написанный джавистами и почему иногда это плохо. 20 апреля 19.00 МСК

👉Регистрация

🔹Пролетая над гнездом DevOps'а, краткий обзор TeamCity
🔹Скованные одной цепью, зависимости шагов, Build Cain
🔹Кликать мышкой - не барское дело, погружаемся в TeamCity DSL
🔹Разделяй и влавствуй, выделяем общие компоненты в собственную библиотеку

Кто ведет?

Александр Обливальный - В индустрии с 2010 года. Большую часть карьеры сопровождаю разную корпоративную хрень, которая используется только там, где работаю. Специалист по нетрадиционному использованию логарифмической линейки. Видел всякое: неадекватных бухов, нагруженный распределённый биллинг на винде и C#, который админился мышью, DevOps по служебкам. На первую работу (в банк) был принят, т.к. смог написать 3 строчки на bash.

Golang by Rebrain: Тестируем сервис на go. 22 апреля 19.00 МСК

👉Регистрация

🔹Познакомимся с различными подходами к проверке качества golang сервисов
🔹Познакомимся с инструментами для удобного тестирования
🔹Напишем тесты к боевому приложению

Кто ведет?
Илья Швырялкин - Работает в команде Research & Development в Delivery Club.
источник
Пятничный деплой
Сегодня поговорим о reliability (надежности) в Kubernetes. Ведь когда случается какой-то сбой нельзя мгновенно, однозначно сказать из-за чего он произошёл. Это может быть как внешний нарушитель (DoS решил устроить), так проблемы ПО внутри самого кластера.

Все, кто стараются максимально использовать возможности Kubernetes пытаются как можно больше задач возложить на ПО - они и есть не просят, и работают 24/7. Вот тут и приходят операторы и CRD.

В рамках доклада "Тестирование Kubernetes оператора" докладчик выделяет 3 основных последствия неправильной работы оператора:
- The Infinite Pod Loop Creation
- The Split Brain Situation
- The Double Rolling Upgrade Reaction

Об этих ситуациях соответствующий момент по timecode.

В общем к чему это я?
Во-первых, при написании операторов вопрос их тестирования супер важный.
Во-вторых, при выборе оператора обращайте внимание как он вообще развивается и тестируется.
В-третьих, при исследовании сбоев стоит смотреть что и как делали операторы.
источник
Пятничный деплой
@bykva очень годные вопросы поднял
источник
Пятничный деплой
о структуре ansible репозитория (часть 1)

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

В чем же проблема №1? а в том, что когда у вас несколько инвентарей, и вы пишете плейбуки которые по смыслу делают одно и то же  но в разных инвентарях, вам их надо либо делать строго одинаковыми и в конечном итоге получать один файл (с возможными доработками в виде условий, которые в обычной жизни нахрен не нужны), либо делать несколько файлов для каждого инвентаря. Оба варианта очевидно в конечном итоге приводят к не очень хорошим результатам. В первом случае - это какая-то не нужная логика, которая усложняет поддержку и использование плейбука, а во втором случае у нас просто множится количество файлов. В моем опыте оказалась ситуация когда у коллег удавалось писать "абсолютный" плейбук для своих задач, но это им просто повезло - если ты пишешь плейбук для тестовой и для продовой инфры, сервера по сути одни и те же и способы ввыкладки сервиса тоже. а значит это по сути один и тот же инвентарь, который разделен логически на тест и прод. А вот мне повезло не так сильно и нужно было писать плейбуки под создание сервиса как на своих железках (которые мы можем приготовить как угодно) так и в облаке, а также на "территории" легасёвой инфраструктуры клиента. В таком случае сами понимате сделать 1 плейбук на всё невозможно. Стали рождаться плейбуки вида rolename_inventory_azaza, rolename_inventory_ololo, rolename_inventory_pururum итп. Ситуацию осложняло то, что не все придерживались практики (я никого не виню - не было никакой договорённости) указывать имя инвентаря в имени плейбука.
В конечном итоге ситуация пришла к тому, что в корневом каталоге у нас оказались порядка 50 плейбуков, вперемешку со служебными файлами - gitlab-ci, Dockerfile, ansible.cfg, ansible-lint итп итп. Лично мне стало уже просто неудобно этим оперировать репозиторием. Не критично, не тяжело или как-то сложно, а именно неудобно. плейбуки перестали помещаться в один столбец в pycharm, а понять из названия сразу к какому инвентарю относится плейбук стало тоже непонятно - нужно было заходить внутрь, смотреть группу по которой катался плейбук, грепать ее по инвентарям... короче гемор! При этом в текущем состоянии репозиторий не то чтобы был плох, нет, им вполне можно было пользоваться, но я понимал, что команда у нас растет, а репозиторию меньше года и что дальше будет только хуже. В итоге назрел план небольшой революции и перекроя репозитория. конечный результат - после истории №2.
#ansible
источник
Пятничный деплой
Разбираемся с примитивом синхронизации sync.Cond в Go. Более подробно примитивы синхронизации описаны в данной статье (входит в серию о проблемах многопоточности, параллелизме и concurrency, опубликованную ранее).
источник
Пятничный деплой
о структуре ansible репозитория (часть 2)

Проблема №2: кросс инвентарные переменные. А вот это нужно для того чтобы можно было из любого инвентаря воспользоваться нужной общей переменной. Например вы создаете виртуалку и хотите чтобы после ее разворота можно было сразу обратиться по доменному имени. Вы добавляете роль управления днс именами в плейбук... а как авторизоваться? как хороший пацан вы написали универсальную роль и не захардкодили в ней параметр с токеном. Или другой пример - база данных пользователей, если вы катаете их ансиблом (хейтеры, отстаньте), то чтобы катать их на разные инвентари и не дублировать, нужно либо иметь один плейбук который будет только что и делать что настраивать пользователей и вы будете запускать его с лимитами по нужным хостам..... ну, да, звучит ужасно. Либо - хранить где-то снаружи ямл с ключами и хешами юзеров. Общие ссл сертификаты. адрес консула. Ну и итд итп, это много где используется. С самого начала такой файл был организован как group_vars/all.yml в корне ансибла. По сути этой бы проблемы не было, если бы не способ решения первого пункта. Для справки как это вообще работало: запускаемый плейбук читает свою директорию. и у него нет никаких проблем залезть в соседнюю с ним папку group_vars и забрать all.yaml а потом сходить в inventory/i_name/ и там прочитать group_vars, host_vars... и так мы получали все нужные переменные при запуске....

А теперь к решению. Для того чтобы сделать красиво я рассмотрел вариант убрать все плейбуки по инвентарям в папку playbooks/i_name. Сказано - сделано. и в этот момент мгновенно перестали работать роли и кросс-инвентарные переменные. Решение вопроса было осуществлено с помощью симлинка. т.е. мы взяли и слинковали в каждом инвентаре кросс-инвентарный файл с переменными. а в ansible.cfg нужно добавить вот эти строки:

[defaults]
roles_path = roles:~/.ansible/roles:/etc/ansible/roles

добавление ~/.ansible/roles нужно для того чтобы подцеплялись galaxy роли.
А конечная структура вышла вот такой:

.
├── inventories
│   ├── global.yml
│   ├── inventory1
│   │   ├── group_vars
│   │   │   ├── all
│   │   │   │   ├── global.yml -> ../../../global.yml
│   │   │   │   └── local.yml
│   │   │   ├── group1.yml
│   │   │   ├── ...
│   │   │   └── groupN.yml
│   │   ├── host_vars
│   │   │   ├── host1.yml
│   │   │   ├── ...
│   │   │   └── hostN.yml
│   │   └── hosts
│   └── inventory2
│       ├── group_vars
│       │   ├── all
│       │   │   ├── global.yml -> ../../../global.yml
│       │   │   └── local.yml
│       │   ├── group1.yml
│       │   ├── ...
│       │   └── groupN.yml
│       ├── host_vars
│       │   ├── host1.yml
│       │   ├── ...
│       │   └── hostN.yml
│       └── hosts
├── playbooks
│   ├── inventory1
│   │   ├── play1.yml
│   │   ├── ...
│   │   └── playN.yml
│   └── inventory2
│       ├── play1.yml
│       ├── ...
│       └── playN.yml
├── roles
│   ├── role1
│   ├── ...
│   └── roleN
├── ansible.cfg
├── tabpy.yml
├── test.yaml
├── wireguard.yml
└── zookeeper.yml

Запуск плейбука осуществляется из директории с ансиблом такой командой:

ansible-playbook -i inventories/inventory1/hosts playbooks/inventory1/play1.yml -bD [--tags, ...]
Строка полностью влезает в консоль и не переносится на вторую, что вполне сохраняет удобство. Кроме того такой подход к хранению плейбуков является обратно-совместимым. вы можете оставить часть плейбуков в корневой директории.

Остается до сих пор проблема того, что в нашем кросс-инвентарном файле может быть довольно много переменных. На текущий момент в качестве решения я думаю о том чтобы сделать symlink кросс-платформенных переменных не на файл global.yml, а на директорию, all -> all. в директори можно хранить множество разделенных по смыслу файлов и все они будут подсасываться во время работы. а файл специфичных для инвентаря переменных вынести по классике в group_vars/all.yml. Но это - тема для будущей революции =)

#ansible
источник
2021 April 17
Пятничный деплой
​​Совсем мало стало ансибла на нашем канале...
Исправляемся, мастер-класс по написанию Ansible роли для новичков и не только.

#ansible
источник
2021 April 18
Пятничный деплой
Полезные консольные Linux утилиты
https://habr.com/ru/post/553000/?utm_source=habrahabr&utm_medium=rss&utm_campaign=553000
Tags: *nix, linux, утилиты
Author chemtech #habr
источник
Пятничный деплой
Spaghetti — это интерактивный веб-инструмент, который помогает понять зависимости программы Go, а также изучить и оценить различные возможные меры по устранению зависимостей.

Он отображает полные зависимости исходных пакетов, организованные в виде дерева на основе структуры каталогов пространства имен пакет / модуль.

https://proglib.io/w/23bb0ab8
источник
2021 April 19
Пятничный деплой
Установка полноценного кластера #kubernetes на основе #k3s

#kubernetes на основе #k3s

https://habr.com/ru/company/southbridge/blog/551214/

PS: Если работаете с k3s, то возможно вам будет интересно взглянуть на k3d и k0s

#k8s #k3d #k0s
источник
Пятничный деплой
Pro K8s

ksniff - плагин kubectl, который позволяет перехватывать трафик с любого pod в вашем кластере Kubernetes. Использует для этой цели Wireshark.

👉 https://bit.ly/3tsUzvW

#kubernetes
источник
Пятничный деплой
[Перевод] Масштабирование Kubernetes в Pinterest: через сбои и аварии
https://habr.com/ru/post/552818/?utm_source=habrahabr&utm_medium=rss&utm_campaign=552818
Tags: Блог компании ITSumma, IT-инфраструктура, API, Облачные сервисы, Kubernetes, Pinterest, масштабирование, k8s, kube-apiserver, etcd, кластер, квота ресурсов, KubeAPI, Operator Framework, алгоритм текущего ведра, Kubelet, EventRateLimit, boltdb, flamegraph
Author ITSumma #habr
источник
2021 April 20
Пятничный деплой
Возможно пригодится для тестов. Простой фаззинг SQL таблиц. 🤓

https://github.com/PumpkinSeed/sqlfuzz
источник
Пятничный деплой
The worst so-called “best practice” for Docker

https://pythonspeed.com/articles/security-updates-in-docker
источник
Пятничный деплой
​​Статья
CPU limits and aggressive throttling in Kubernetes

Вы видели, как ваше приложение зависает или не отвечает на health check? Это могло быть из-за ограничения квоты CPU.
источник
Пятничный деплой
«И все за одного» — суть работы тимлида

Многие читали роман А. Дюма про героев того времени, про мушкетёров. А возможно, смотрели и одноимённый фильм. И наверняка кричали своим друзьям во дворе: «Один за всех и все за одного». Наверняка вы ещё тогда этого не знали, но этой же фразой можно описать работу руководителя команды разработки.

Тимлидом может стать любой, кто достиг middle- или senior- уровня в разработке и готов развиваться дальше. Для управления командой важны понимание основ коммуникации с людьми, умение расставлять приоритеты, навыки делегирования и контроль выполнение задач.

Если сейчас всех навыков нет, но есть желание их прокачать - этому можно обучиться на курсе Skillbox «Профессия TeamLead».
Обучение проводят практикующие тимлиды-разработчики. Они поделятся с вами своим опытом и навыками взаимодействия с командой, помогут прокачать ваши soft skills и стать эффективным руководителем.

📌 Курс рассчитан на 6 месяцев
📌 Оплата после обучения
Все подробности по ссылке: https://clc.am/Iaw-AA
источник
2021 April 21
Пятничный деплой
Pro K8s
Kubernetes production best practices

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

Здоровенный такой чеклист 👍 и к тому же кликабельный 🔥

👉 https://learnk8s.io/production-best-practices

#kubernetes
источник