company_banner
  • Прогресс shell-operator и addon-operator: хуки как admission webhooks, Helm 3, OpenAPI, хуки на Go и многое другое

      Shell-operator и addon-operator — Open Source-проекты компании «Флант» для администраторов Kubernetes, представленные в апреле 2019 года. Первый призван упростить создание K8s-операторов: для этого с ним достаточно писать простые скрипты (на Bash, Python и т.п.) или любые бинарники, которые будут вызываться в случае наступления определённых событий в Kubernetes API. Второй (addon-operator) — его «старший брат», цель которого — упростить установку Helm-чартов в кластер, используя для их настройки хуки shell-operator’а.

      В последний раз мы рассказывали о возможностях shell-operator по состоянию на релиз v1.0.0-beta.11 (летом прошлого года), если не считать последовавшего доклада на KubeCon EU’2020, который знакомил с проектом тех, кто о нём ещё не знает. (К слову, этот доклад мы по-прежнему рекомендуем всем желающим разобраться, как shell-operator облегчает жизнь при создании операторов, и увидеть наглядные примеры его применения.)

      За минувшее время и shell-operator, и addon-operator получили множество интересных новшеств, которым и посвящена эта статья.

      Читать далее
      • +31
      • 1,1k
      • 1
    • Поддержание аккуратной истории в Git с помощью интерактивного rebase

      • Перевод

      Interactive rebase — один из самых универсальных инструментов Git'а. В этой статье от автора Git-клиента Tower рассказывается, как корректировать сообщения при коммитах и исправлять свои ошибки.

      Читать далее
    • Аварии как опыт #1. Как сломать два кластера ClickHouse, не уточнив один нюанс

        Про некоторые свои failure stories мы уже писали и раньше, но теперь мне выпала честь формально открыть специальный цикл из таких статей. Ведь аварии, их причины и последствия — это тоже часть нашей жизни, и исследовать эту «тёмную сторону» не менее интересно, чем всё остальное. Тем более, что они всё больше влияют даже на повседневный быт, так что из любой аварии можно и нужно извлекать уроки. Да и читатели не раз просили нас рассказывать о таком почаще — давайте попробуем!

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

        Перейдем к технической стороне…

        Читать далее
        • +46
        • 5,9k
        • 5
      • Выводы Grofers после двух лет Kubernetes в production

        • Перевод
        Прим. перев.: эта статья — опыт миграции на Kubernetes одного из крупнейших в Индии онлайн-магазинов продуктов. В ней Vaidik Kapoor, software engineer из Grofers, рассказывает о главных ошибках и препятствиях этого долгого путешествия, а также делится своими мыслями о целесообразности и плюсах подобного переезда в целом.

        Почти два года назад мы решили отказаться от развертывания приложений на EC2 с конфигурациями, управляемыми через Ansible, и перейти к контейнеризации и оркестровке приложений с помощью Kubernetes. За это время большую часть инфраструктуры уже перенесли в Kubernetes. Миграция была сопряжена со своими вызовами: от технических, связанных с необходимостью обеспечивать работу гибридной инфраструктуры до завершения миграции, до обучения всей команды совершенно новой парадигме работы.

        В данной публикации я хочу поразмышлять о полученном опыте и поделиться уроками, извлеченными из него. Надеюсь, это поможет вам принимать более взвешенные решения и повысит шансы на успех в аналогичных затеях.
        Читать дальше →
        • +46
        • 7,6k
        • 4
      • Практические истории из наших SRE-будней. Часть 3

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



          Новый выпуск посвящён опыту с неожиданно затянувшейся миграцией одного Linux-сервера, знакомству с Kubernetes-оператором для ClickHouse, способу ускорить восстановление данных в сломавшейся реплике PostgreSQL и последствиями обновления CockroachDB. Если вы тоже думаете, что это может быть полезно или хотя бы просто интересно, добро пожаловать под кат!
          Читать дальше →
        • Headlamp — новый GUI для работы с Kubernetes

          • Перевод
          Прим. перев.: месяц назад компания Kinvolk выпустила свой интерфейс для управления Kubernetes-кластерами. Новый Open Source-проект, пополнив уже немалочисленные ряды подобных решений, сочетает в себе классический подход к дизайну интерфейсов, возможность запуска локально и внутри кластера, а также высокую расширяемость, что — вместе с достаточно богатым набором функций — делает его интересным хотя бы для первичного знакомства. В этом анонсе его авторы рассказывают, почему Headlamp стал именно таким.



          Читая материалы по Kubernetes, вы наверняка неоднократно сталкивались с примерами различных kubectl-команд и хитрых конфигов на YAML. У людей, хорошо разбирающихся в K8s, такой подход, без сомнения, не вызывает никакого отторжения. Но в век повсеместного распространения веб-интерфейсов его нельзя назвать дружественным к обычным пользователям. Он усложняет процесс познания для новичков и выступает барьером для тех, кто не особо хорошо знаком с Kubernetes.

          Конечно, существуют различные графические интерфейсы для K8s, в том числе Kubernetes Dashboard, являющийся частью самого upstream Kubernetes. (Прим. перев.: О многих из существующих решений мы уже рассказывали в этом сравнении.) Однако, исследуя все многообразие вариантов, мы не сумели подобрать решение, которое бы полностью нас устраивало.
          Читать дальше →
          • +32
          • 5,3k
          • 4
        • Service mesh — это всё ещё сложно

          • Перевод
          Прим. перев.: эта небольшая статья Lin Sun из IBM в блоге CNCF — занятная иллюстрация тех сложностей, над преодолением которых сейчас трудятся инженеры популярных реализаций service mesh. С ними становится понятным, почему порог вхождения у этих продуктов остаётся довольно большим.

          В августе этого года на конференции ServiceMeshCon EU мы с William Morgan из Linkerd выступили с совместным докладом под названием «Service mesh is still hard». William рассказал об инновациях в Linkerd, в то время как я затронула нововведения в Istio. Оба проекта, очевидно, активно работают над тем, чтобы упростить переход обычных пользователей на service mesh.


          Этот слайд (из видео с недавним выступлением William Morgan и Lin Sun) лаконично подытоживает актуальные плюсы и минусы сервисных сеток

          Сегодня service mesh стали более зрелыми, чем были год или пару лет назад. Однако они по-прежнему сложны для понимания большинства пользователей.
          Читать дальше →
        • Настраиваем Continuous Integration для Jenkins и Bitbucket с werf

          • Tutorial


          Утилита werf создана так, чтобы её было легко интегрировать с любыми CI/CD-системами. Подробнее об этом процессе в общем случае читайте в эпилоге этой статьи, но основное её содержимое — практический пример по организации CI в Jenkins и Bitbucket.

          Подразумевается, что в результате наших действий мы ожидаем получить следующее:

          1. Shared Library для Jenkins, чтобы все сценарии CI хранились в одном месте и их можно было править единым коммитом.
          2. Интеграцию Jenkins с Bitbucket, чтобы запускать CI по коммиту в определенные ветки или по созданию тега.

          Поехали!
          Читать дальше →
          • +38
          • 2,4k
          • 7
        • elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch

            Рады представить наш новый Open Source-проект — elasticsearch-extractor. Это простой веб-интерфейс, решающий единственную задачу: извлечение заданного индекса из снапшота Elasticsearch. Почему такой проект вообще появился?

            Зачем


            Представьте, что у вас есть большое количество однотипных инсталляций Elasticsearch в Kubernetes, где хранятся и анализируются многочисленные логи от приложений и инфраструктуры. Схема довольно обычная:
            Читать дальше →
          • Quake III Arena, Kubernetes (k3s) и Raspberry Pi

            • Перевод
            • Tutorial
            Прим. перев.: казалось бы, еще недавно сочетание из заголовка казалось невозможным безумием. Мир не стоит на месте, и это безумие стало не просто возможным, а даже по-настоящему простым в реализации. Подтверждение читайте ниже в переводе соответствующей инструкции от Johan Siebens — облачного архитектора из Бельгии.



            Вчера у себя в ленте я увидел этот твит от Chris Campbell:


            Ох, воспоминания… Quake III Arena — один из моих самых любимых шутеров от первого лица.

            В прошлом я потратил (и потерял) немало времени, играя в эту динамичную игру с друзьями и врагами. Теперь, благодаря проекту QuakeKube от Capital One Tech, для нее открыт мир контейнеров и Kubernetes.
            Читать дальше →
          • Kubernetes 1.20: обзор основных новшеств

              Этой ночью, 8 декабря (по американскому времени), состоялся новый релиз Kubernetes — 1.20. По традиции нашего блога, рассказываем о наиболее значимых изменениях в новой версии.



              Информация, использованная для подготовки этого материала, взята из таблицы Kubernetes enhancements tracking, CHANGELOG-1.20, обзора Sysdig, а также соответствующих issues, pull requests, Kubernetes Enhancement Proposals (KEP).
              Читать дальше →
              • +43
              • 7,2k
              • 3
            • Не паникуйте: Kubernetes и Docker

              • Перевод
              Прим. перев.: свежая публикация в блоге Kubernetes — оперативный ответ на ту шумиху, что поднялась вокруг грядущего релиза K8s, в котором поддержка Docker будет объявлена устаревшей. Представляем вашему вниманию её перевод.



              Начиная с версии v1.20, Kubernetes отказывается от Docker как от исполняемой среды контейнеров.

              Но не паникуйте. Не все так страшно, как представляется на первый взгляд.

              TL;DR. Kubernetes отказывается от Docker в пользу сред выполнения на базе Container Runtime Interface (CRI), разработанного специально для Kubernetes. Образы для Docker продолжат работать во всех средах выполнения как обычно.
              Читать дальше →
            • Продвинутая Helm-шаблонизация: выжимаем максимум



                Стандартной Helm-библиотеки и привычных подходов к написанию Helm-чартов обычно хватает для автоматизации несложных приложений. Но когда количество и сложность Helm-чартов растут, то минималистичных Go-шаблонов и неоднозначной стандартной Helm-библиотеки быстро перестаёт хватать. В этой статье речь пойдет о том, как сделать ваши Helm-шаблоны гораздо более гибкими и динамичными, реализуя свои собственные «функции» в Helm, а также эксплуатируя tpl.

                NB. Всё описанное было проверено с werf, но так как шаблоны в этой утилите практически идентичны Helm-шаблонам, то и всё нижеприведенное будет полностью или почти полностью совместимо с обычным Helm обеих версий (v2 и v3).

                А теперь разберем, как получить от Helm-шаблонов всё, что можно… и даже всё, что нельзя!
                Читать дальше →
              • Post Mortem по масштабному сбою Amazon Kinesis в US-EAST-1 (25 ноября)

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

                В этом материале мы хотели бы рассказать подробности о перебоях в обслуживании, случившихся в регионе Northern Virginia (US-EAST-1) 25 ноября 2020.

                Amazon Kinesis позволяет в реальном времени собирать, обрабатывать и анализировать потоковые данные. Помимо непосредственного использования клиентами, он задействован в ряде сервисов AWS. Эти сервисы также пострадали от сбоя. Триггером (но не основной причиной) данного события стало относительно небольшое добавление мощностей к сервису, начавшееся в 2:44 утра PST и завершившееся в 3:47.
                Читать дальше →
              • Обзор инструментов для chaos engineering в Kubernetes. Часть 2: Litmus Chaos, Chaos Toolkit, KubeInvaders и другие



                  Это вторая и заключительная часть знакомства с доступными сегодня Open Source-утилитами для организации хаос-инжиниринга в Kubernetes-кластерах. В первой статье было вкратце рассказано о появлении самой дисциплины — chaos engineering, — а также рассмотрены kube-monkey, chaoskube и Chaos Mesh. Теперь этот список пополнится обзором Litmus Chaos, Chaos Toolkit, мини-подборкой из хаос-игр и перечислением пяти других вариантов, заслуживающих внимания инженеров, заинтересованных в разовой или постоянной проверке своей инфраструктуры на устойчивость.
                  Читать дальше →
                  • +38
                  • 1,3k
                  • 2
                • Обзор инструментов для chaos engineering в Kubernetes. Часть 1: kube-monkey, chaoskube, Chaos Mesh



                    Хаос-инжиниринг для Kubernetes становится всё популярнее, и это закономерно: ведь такая инфраструктура создавалась быть готовой к тому, чтобы в любой момент что-нибудь «отстрелило». А значит — это замечательное свойство надо проверять в реальных проектах.

                    Благо, уже сегодня можно найти не одно Open Source-решение, помогающее в подобных экспериментах. Представляем вашему вниманию их обзор. Он получился весьма объёмным, поэтому был разбит на две части: в этой мы рассмотрим три популярных проекта.
                    Читать дальше →
                  • Как в Smarkets улучшили мониторинг для своих Kubernetes-кластеров

                    • Перевод
                    Прим. перев.: автор этой статьи — ведущий инженер по инфраструктуре в Smarkets, что позиционирует себя как «одну из самых прибыльных [по доходам на каждого сотрудника] компаний в Европе». Работая с большой и чувствительной к мониторингу инфраструктурой на базе Kubernetes, инженеры компании нашли своё счастье с VictoriaMetrics, которая помогла им решить проблемы с Prometheus, возникшие после добавления новых K8s-кластеров.

                    Мониторинг внутренних endpoint'ов и API Kubernetes может быть проблематичным, особенно если стоит задача использовать автоматизированную инфраструктуру как сервис. Мы в Smarkets еще не достигли этой цели, но, к счастью, уже довольно близки к ней. Я надеюсь, что наш опыт в этой области поможет и другим реализовать нечто подобное.

                    Мы всегда мечтали о том, чтобы разработчики прямо «из коробки» получали возможность мониторинга для любого приложения или сервиса. До перехода на Kubernetes эта задача выполнялась либо с помощью метрик Prometheus, либо с помощью statsd, который пересылал статистику на базовый хост, где она конвертировалась в метрики Prometheus. Наращивая применение Kubernetes, мы начали разделять кластеры, и нам захотелось сделать так, чтобы разработчики могли экспортировать метрики напрямую в Prometheus через аннотации к сервисам. Увы, эти метрики были доступны только внутри кластера, то есть их нельзя было собирать глобально.

                    Эти ограничения стали «бутылочным горлышком» для нашей конфигурации, существовавшей до полного перехода на Kubernetes. В конечном итоге они заставили пересмотреть архитектуру и способ мониторинга сервисов. Как раз об этом путешествии и пойдет речь ниже.
                    Читать дальше →
                    • +26
                    • 2,1k
                    • 1
                  • Обзор операторов PostgreSQL для Kubernetes. Часть 2: дополнения и итоговое сравнение



                      На прошлую статью, где мы рассмотрели три оператора PostgreSQL для Kubernetes (Stolon, Crunchy Data и Zalando), поделились своим выбором и опытом эксплуатации, — поступила отличная обратная связь от сообщества*.

                      Продолжая эту тему, мы добавили в обзор два других решения, на которые нам указали в комментариях: StackGres и KubeDB, — и сделали сводную таблицу сравнения. Также за время эксплуатации оператора от Zalando у нас появились новые интересные кейсы — спешим поделиться и ими.
                      Читать дальше →
                      • +34
                      • 3,6k
                      • 5
                    • Запускаем тесты на GitLab Runner с werf — на примере SonarQube



                        Если в качестве инфраструктуры, где разворачивается приложение, выступает Kubernetes, можно сказать, что существует два способа запуска тестов (и других утилит для анализа кода) в CI/CD:

                        • непосредственно в кластере K8s — с помощью отдельных Job или Helm hooks;
                        • «снаружи» K8s — например, на сервере сборки/деплоя или локально у разработчиков.

                        Первый подход мы достаточно подробно описывали на интересном примере с базами данных в статье «Как мы выносили СУБД (и не только) из review-окружений в статическое». В этой статье рассмотрен более простой путь — запуск вне K8s-кластера. Делать мы это будем на примере SonarQube-тестов в рамках CI/CD, построенного на базе GitLab с использованием werf.
                        Читать дальше →
                      • Загадочная ситуация с TIME в MySQL

                        • Перевод
                        Прим. перев.: Этот детальный анализ одной, казалось бы, не очень значительной детали в реализации внутри MySQL вызвал закономерные дискуссии о правильности в подходах к разработке известного Open Source-проекта в целом. О том, что же, собственно, выяснил португальский инженер, он повествует в формате, приближенном к детективу…

                        Многие в 2020 году стали жертвой странного феномена восприятия времени, но некоторые системы управления базами данных манипулируют временем гораздо дольше. Впервые я обратил на это внимание, когда мой друг в одном из своих проектов (Accord — популярный бот для Discord) столкнулся со следующим исключением от коннектора MySQL при использовании с EF Core:

                        MySqlException: Incorrect TIME value: '960:00:00.000000'

                        Будучи не слишком сведущим в MySQL (т.к. предпочитаю PostgreSQL по причинам, которые скоро станут очевидными), я на секунду подумал, что неправильным здесь является число часов. Разумно предположить, что значения TIME ограничены 24 часами или что для значений, охватывающих нескольких дней, требуется другой синтаксис — например, 40:00:00:00 будет представлять 40 дней. Но действительность оказалась куда сложнее и запутаннее.
                        Читать дальше →

                      Самое читаемое