Pull to refresh
59
0
Eugene Glotov @KIVagant

User

Send message

Создание динамических параметров в Jenkins job, или как сделать вашу задачу user-friendly

Reading time4 min
Views19K

Доброго времени суток, Хабр!


Сегодня я хотел бы поделиться одним из способов, как с помощью Active Choices Plugin сделать задачу в Jenkins наиболее унифицированной и понятной для пользователя.


Введение


Такая аббревиатура как DevOps уже давно не является чем-то новым для IT сообщества. У многих людей фраза «сделать DevOps» ассоциируется с какой-то волшебной кнопкой, при нажатии на которую код приложения автоматически превращается в развернутое и протестированное приложение (все на самом деле сложнее, но мы абстрагируемся от всех процессов).


Итак, нам поступил заказ сделать такую волшебную кнопку, чтобы администраторы могли развертывать приложение по одному щелчку. Имеются различные виды реализации данной задачи: начиная от написания бота для какого-либо из мессенджеров и заканчивая разработкой отдельного приложения. Тем не менее цель у всего этого одна – сделать запуск сборки и развертывания приложения наиболее прозрачным и удобным.


В нашем случае мы будем использовать Jenkins.

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments15

Теория программирования: Вариантность

Reading time13 min
Views40K

Здравствуйте, меня зовут Дмитрий Карловский и я… хочу поведать вам о фундаментальной особенности систем типов, которую зачастую или вообще не понимают или понимают не правильно через призму реализации конкретного языка, который ввиду эволюционного развития имеет много атавизмов. Поэтому, даже если вы думаете, что знаете, что такое "вариантность", постарайтесь взглянуть на проблематику свежим взглядом. Начнём мы с самых основ, так что даже новичок всё поймёт. А продолжим без воды, чтобы даже профи было полезно для структурирования своих знаний. Примеры кода будут на псевдоязыке похожем на TypeScript. Потом будут разобраны подходы уже нескольких реальных языков. А если же вы разрабатываете свой язык, то данная статья поможет вам не наступить на чужие грабли.


а вдруг там лис?

Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments62

6 занимательных системных багов при эксплуатации Kubernetes [и их решение]

Reading time10 min
Views17K


За годы эксплуатации Kubernetes в production у нас накопилось немало занимательных историй, как баги в различных системных компонентах приводили к неприятным и/или непонятным последствиям, влияющим на работу контейнеров и pod'ов. В этой статье мы сделали подборку некоторых наиболее частых или интересных из них. Даже если вам никогда не повезёт столкнуться с такими ситуациями, читать о подобных кратких детективах — тем более, «из первых рук» — всегда занятно, разве не так?..
Читать дальше →
Total votes 59: ↑58 and ↓1+57
Comments7

Представляем библиотеку kubedog для слежения за ресурсами Kubernetes

Reading time6 min
Views8.3K
Рады анонсировать новую Open Source-разработку компании «Флант» для DevOps-специалистов и не только — kubedog. Это написанная на Go библиотека и CLI на её основе для отслеживания событий ресурсов Kubernetes и сбора их логов.


На данный момент библиотека поддерживает слежение за следующими ресурсами: Pod (и Container), Job, Deployment, StatefulSet и DaemonSet. События и логи передаются через callback’и.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments5

RabbitMQ против Kafka: отказоустойчивость и высокая доступность

Reading time20 min
Views33K


В прошлой статье мы рассмотрели кластеризацию RabbitMQ для обеспечения отказоустойчивости и высокой доступности. Теперь глубоко покопаемся в Apache Kafka.

Здесь единицей репликации является раздел (partition). У каждого топика один или несколько разделов. В каждом разделе есть лидер с фолловерами или без них. При создании топика указывается количество разделов и коэффициент репликации. Обычное значение 3, это означает три реплики: один лидер и два фолловера.
Читать дальше →
Total votes 48: ↑45 and ↓3+42
Comments3

Введение в аннотации типов Python. Продолжение

Reading time4 min
Views67K


Автор иллюстрации — Magdalena Tomczyk


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

Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments33

Введение в аннотации типов Python

Reading time6 min
Views272K

Введение



Автор иллюстрации — Magdalena Tomczyk


Вторая часть


Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики). И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа.


Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:



Аннотации типов просто считываются интерпретатором Python и никак более не обрабатываются, но доступны для использования из стороннего кода и в первую очередь рассчитаны для использования статическими анализаторами.


Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.


В этой статье я хочу объяснить основы использования аннотаций типов и рассмотреть типичные примеры, реализуемые аннотациями из пакета typing.

Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments50

Введение в Data classes

Reading time7 min
Views207K

Одна из новых возможностей, появившихся в Python 3.7 — классы данных (Data classes). Они призваны автоматизировать генерацию кода классов, которые используются для хранения данных. Не смотря на то, что они используют другие механизмы работы, их можно сравнить с "изменяемыми именованными кортежами со значениями по умолчанию".



Введение


Все приведенные примеры требуют для своей работы Python 3.7 или выше

Большинству python-разработчикам приходится регулярно писать такие классы:


class RegularBook:
    def __init__(self, title, author):
        self.title = title
        self.author = author

Уже на этом примере видна избыточность. Идентификаторы title и author используются несколько раз. Реальный класс же будет ещё содержать переопределенные методы __eq__ и __repr__.


Модуль dataclasses содержит декоратор @dataclass. С его использованием аналогичный код будет выглядеть так:


from dataclasses import dataclass

@dataclass
class Book:
    title: str
    author: str
Читать дальше →
Total votes 48: ↑46 and ↓2+44
Comments19

Файл дескриптор в Linux с примерами

Reading time14 min
Views100K
Однажды, на одном интервью меня спросили, что ты будешь делать, если обнаружишь неработающий сервис из-за того, что на диске закончилось место?

Конечно же я ответил, что посмотрю, чем занято это место и если возможно, то почищу место.
Тогда интервьюер спросил, а что если на разделе нет свободного места, но и файлов, которые бы занимали все место, ты тоже не видишь?

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

Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?

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

«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».

Интервьюер остался доволен, а я нет.

Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?
Читать дальше →
Total votes 136: ↑136 and ↓0+136
Comments20

Эволюционирующие клеточные автоматы

Reading time22 min
Views37K


Соединим клеточные автоматы с генетическим алгоритмом и посмотрим, что из этого получится.

В статье присутствуют Gif (трафик!) и контрастные картинки. У эпилептиков может случиться эпилептический припадок.
Читать дальше →
Total votes 130: ↑129 and ↓1+128
Comments34

Terraformer — Infrastructure To Code

Reading time5 min
Views15K
image
Хотел бы рассказать про новый CLI tool который я написал для решения одной старой проблемы.

Проблема


Terraform уже давно стал стандартом в Devops/Cloud/IT сообществе. Вещь очень удобная и полезная чтоб заниматся infrastructure as code. Есть много прелестей в Terraform а так же много вилок, острых ножей и граблей.
С Terraform очень удобно делать новые вещи и потом ими управлять, менять или удалять. А что делать тем у кого есть огромная инфраструктура в облаке и не создано через Terraform? Переписывать и пересоздавать все облако как то дорого и небезопасно.
Я сталкивался с такой проблемой на 2 работах, самый простой пример когда хочешь что все было в гите виде терраформ файлов, а у тебя 250+ бакетов и писать их для терраформа руками как то много.
Есть issue еще с 2014 года в terrafom которую закрыли в 2016 с надеждой что будет import.

Вообщем все как на картинке только справа налево
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments14

Чек-лист: что нужно было делать до того, как запускать микросервисы в prod

Reading time9 min
Views50K

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


К сожалению, некоторые невысокие программисты всерьёз полагают, что Dockerfile с какой-нибудь вообще любой командой внутри — это уже сам по себе микросервис и его можно деплоить хоть сейчас. Докеры крутятся, лавешка мутится. Такой подход оборачивается проблемами начиная с падения производительности, невозможностью отладки и отказами обслуживания и заканчивая кошмарным сном под названием Data Inconsistency.


Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.


English version is also available.

Читать дальше →
Total votes 138: ↑135 and ↓3+132
Comments71

RabbitMQ против Kafka: два разных подхода к обмену сообщениями

Reading time18 min
Views303K

В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

Читать дальше →
Total votes 87: ↑82 and ↓5+77
Comments41

Как попасть в Hell из-за Helm, но ухватиться за соломинку

Reading time3 min
Views3.3K
— Усталым хипстерам глаголим истину.

Все мы (то есть я) любим тянуть всё новое и блестящее в продакшн, чтобы, наконец-то, заменить одни проблемы другими. Нам (то есть мне) и посвящается эта история.

Чтобы понять и простить дальнейший текст вам понадобятся поверхностные знания как работать с Kubernetes на уровне пользователя и какие-нибудь слухи про Helm.
Читать дальше →
Total votes 13: ↑9 and ↓4+5
Comments5

Что происходит в Kubernetes при запуске kubectl run? Часть 2

Reading time14 min
Views13K


Прим. перев.: Вторая и заключительная часть перевода материала, озаглавленного в оригинале как «What happens when… Kubernetes edition!» и рассказывающего о том, какие процессы (каких компонентов и в какой последовательности) происходят в Kubernetes на примере выполнения команды, разворачивающей в кластере 3 пода с nginx.

Если первая часть была посвящена работе kubectl, kube-apiserver, etcd и инициализаторам, то теперь речь пойдёт про контроллеры Deployments и ReplicaSets, информаторы, планировщик и kubelet. Напомню, что мы остановились на моменте, когда переданный пользователем (через kubectl) запрос был авторизован и выполнен в Kubernetes, новые объекты (ресурсы) — созданы и сохранены в базу данных (etcd), после чего — инициализированы (т.е. стали видимыми для apiserver).
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments2

Иллюстрированное руководство по устройству сети в Kubernetes. Части 1 и 2

Reading time6 min
Views52K
Прим. перев.: Автор статьи — Amanpreet Singh — называет себя «всё ещё начинающим в мире сетей», однако именно это и побудило его разобраться в их базовом устройстве в Kubernetes (который он использует в production), а затем — поделиться с сообществом очень доступным материалом с наглядными иллюстрациями. В оригинале он разбит на две части, однако в этом переводе мы объединили их в одну статью.



Вот вы запустили множество сервисов в кластере Kubernetes и пожинаете плоды… или хотя бы собираетесь это сделать. Однако, даже несмотря на существование ряда утилит для настройки кластера и управления им, вам всё же интересно, как всё работает «под капотом». Куда смотреть, если что-то сломается? По себе знаю, что это важно.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments3

Учимся надежно управлять Kubernetes

Reading time14 min
Views17K

Недавно мы создали распределенную систему планирования cron-заданий на основе Kubernetes – захватывающей новой платформы для управления кластером контейнеров. Сейчас Kubernetes занимает лидирующие позиции и предлагает множество интересных решений. Одно из основных его достоинств – то, что инженерам не нужно знать, на каких машинах работают их приложения.
Распределенные системы по-настоящему сложны, и управление их службами – одна из самых больших проблем, с которыми сталкиваются операционные группы. Внедрить новое программное обеспечение в производство и научиться надежно управлять им – задача, к которой стоит относиться серьезно. Чтобы понять, почему обучение работе с Kubernetes важно (и почему это сложно!), мы предлагаем ознакомиться с фантастическим одночасовым переключением, вызванным ошибкой в Kubernetes.


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

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments1

Удивительно полезный инструмент: lsof

Reading time9 min
Views122K
Я привык искать проблемы в коде или в системе, пользуясь логами или показателями мониторинга, которые выводятся на симпатичных панелях управления с простым и понятным интерфейсом. Однако, если по какой-то причине данные на панель управления не поступают, или логи какой-нибудь службы недоступны, отладка усложняется. Теперь подобных проблем немного, встречаются они редко, но они, всё же, случаются. Поэтому и в наше время весьма ценно знание инструментов, которые помогают понять, что не так с неким процессом на каком-нибудь компьютере.

image
Читать дальше →
Total votes 73: ↑69 and ↓4+65
Comments30

Фантастические инди-игры: Odyssey, Kerbal Space Program, ChromaGun и другие

Reading time4 min
Views28K


Инди-игры — это прибежище для программистов, которые мечтают делать игры, но не хотят быть мелким винтиком в большой игровой корпорации. Конечно, в инди-сфере бюджеты просто смешные по меркам крупных издателей и разработчиков, но зато признания — и окупаемости с прибылью — добиваются по-настоящему талантливые игры, а не те, в раскрутку которых вбуханы мегабаксы. Не поймите неправильно: большой бюджет вовсе не компенсирует бездарность. Но всё же талант и с небольшими вложениями может сделать игру, которая западёт в душу, а бездушной корпоративной машине и щедрые инвестиции не гарантируют всенародной геймерской любви. В общем, мы же тут на Гиктаймсе за прогрессивное светлое будущее, поэтому собрали горстку фантастических инди-игр, которые многим из нас пришлись по душе.

Total votes 29: ↑27 and ↓2+25
Comments41

Как создавалась онлайн-платформа для изучения английского языка

Reading time5 min
Views8.4K
image

EnglishDom — онлайн-школа английского языка по скайпу, обучаем с 2010 года. Сейчас в нашем штате более 300 человек, мы провели 600 000+ скайп-уроков и помогли 10 000 студентов достичь своих целей в изучении английского языка.

В сентябре 2017 года мы разработали и запустили собственную онлайн-платформу для изучения английского языка — EnglishDom Class. Как мы ее создавали, расскажем в этой статье.
Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments10

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity