Чи пропонують Докер та Кубернетес "Кращу архітектуру"?

Привіт, я знову з іншою статтею. Але цього разу я в настрої розв’язую деякі міфи.

Світ змінюється щосекунди, як і технологія. Щодо Докера та Кубернетів, то ви повинні слухати багато речей. Особливо порівняння між їх архітектурою. Багатьох людей цікавить, що з них краще?

Є багато інших питань, і я згадую всі їх. Чому? Єдина причина - це допоможе вам зрозуміти Кубернетів та Докера. То як Docker і Kubernetes змінили розробку програмного забезпечення? Чи пропонує хтось із них сильну архітектуру? Чи можливо уніфікувати процеси розвитку та інтеграції? Якщо так, то які обмеження? Чи це зменшить ускладнення для розробників?

Перш за все, зрозумійте, що порівняння між Докером та Кубернетом не так просто, як ви думаєте. Що краще? Докер чи Кубернети? Я вважаю, що "немає кращого", оскільки вони обидва різні. Докер - автобус, а Кубернетес - автобусний порт. То що важливо? Безумовно, обидва важливі. Вам потрібно обоє.

Тож у цій статті ми пройдемо шлях від реального життя до процесів розвитку, до архітектури та назад до реального життя.

Далі ми визначимо різні компоненти та принципи, які є частиною архітектури. Зрештою, висновок може вас здивувати або порадувати. Це залежить від вашого сприйняття та досвіду роботи з Докером та Кубернетом.

Перший перехід від реального життя до робочих процесів розвитку

Чи знаєте ви, чому важливі процеси розвитку? Якщо немає процесів розвитку, немає чітко спрямованого узагальненого підходу. Процес розробки скорочує час між народженням ідеї до її доставки. Це спрощує процес і підтримує якість.

Існує два типи ідей, одна - хороша, а друга - погана. Не існує третього типу проміжної ідеї в розвитку. Ідея може бути хорошою чи поганою, але її можна виміряти лише реалізацією. Якщо це погана ідея, ви реалізуєте та відкату! Якщо це гарна ідея, ви просто продовжуйте. Відкат контролюється роботом, тобто автоматизацією.

З усього цього безперервна інтеграція та система доставки постали як рятівник. Це полегшило справи. Якщо у вас є ідея та код, реалізуйте її! Але є одна незначна проблема з інтеграцією та системою доставки. Цей процес важко формалізувати, відриваючись від технологій та бізнес-процесів, характерних для вашої компанії.

То як же ця проблема була вирішена?

Тепер ця проблема була вирішена за допомогою Докера та Кубернетів. Обидва вони постали як Месія. Рівень абстракції та ідеологічний підхід вирішили майже 80% проблеми. Майте на увазі, 80% - це дуже хороший відсоток у секторі розвитку. 20% все ще є, і для вирішення цього потрібно бути творчим генієм. Це залежить від типу програми та способу її вирішення.

Докер вирішує проблему розвитку робочого процесу. Докер пропонує простий процес і достатній для більшості робочих середовищ.

Джерело зображення: https://cdn-images-1.medium.com/max/800/0*nDrc_jeOKTMS7akB.

За допомогою такого підходу можна все автоматизувати та уніфікувати.

Ознайомлення з середовищем розвитку

Перш за все, проект повинен містити файл docker-compose.yml. Перевага цього файлу полягає в тому, що він зніме тягар запуску програми / послуги на локальній машині. Розробнику не потрібно думати про це. Насправді для запуску програми достатньо простої докер-композиції. Команда також піклується про залежності, заповнюючи базу даних пристосуваннями, завантажуючи локальний код всередині контейнера, дозволяючи відстежувати код і відповідати на очікуваний порт.

На додаток до всього цього, вам також не потрібно турбуватися про початок, внесення змін, вибір рамки тощо. Кожне і все попередньо описано в стандартних інструкціях. Це продиктовано шаблонами сервісів відповідно до таких налаштувань, як frontend, backkend та работники.

Час автоматичного тестування

Ви чули про "Чорну скриньку"? Він записує все, навіть останні секунди перед аварією літака. Що трапилось? Як це відбулося? Все це отримується з чорної скриньки. Точно так само тут і чорна скринька.

Джерело зображення: https://cdn-images-1.medium.com/max/800/0*B5Qn9D5W4lscB86h.

Як і оригінальна чорна скринька, і наша чорна коробка зберігає все. Усі бінарні дані, 1 або 0 тощо, зберігаються у чорному полі. То як же відбувається автоматизація? Це просто, у вас є набір команд, а docker-compose.yml описує всі його залежності. Це призводить до автоматизації та уніфікованого тестування. Не потрібно зосереджуватися на деталях впровадження.

Поставка систем

Джерело зображення: https://cdn-images-1.medium.com/max/800/0*DC5Ubn7Y5seJPeSO.

Місце і час установки проекту не мають значення. Немає різниці в тому, яку частину всієї екосистеми ви збираєтеся встановити. Результат процесу установки завжди буде однаковим. Найважливіше - це «безсилля». Зі свого боку вкажіть змінні, які керують установкою.

Для цього існує алгоритм. Перелічимо його поетапно.

(1) Зберіть зображення з Dockerfiles.

(2) Використовуйте мета-проект для доставки зображень. Їх слід доставити Kubernetes через Kube API. Необхідні вхідні параметри:

(a) Кінцева точка API Kube

(b) Таємний предмет, що змінюється в різних контекстах (місцевий / демонстраційний зал / постановка / виробництво)

Назви систем та теги зображень Docker для цих систем.

Наприклад, розглянемо мета-проект, що складається з усіх систем і служб. Це означає, що проект описує розташування екосистеми, а також описує, як до неї надходять оновлення. Для цього я буду використовувати іграшки Ansible для інтеграції з API Kube. Але є й інші варіанти! Загалом, для управління архітектурою потрібно мислити в централізованому напрямку. Коли ви впевнені в цьому, ви зможете зручно керувати послугами / системами.

Установка середовища необхідна в салоні (для ручних перевірок та налагодження системи), постановці (для середовищ, що живуть поблизу, та інтеграції) та виробництві (власне середовище для кінцевого користувача).

Постійна доставка та інтеграція

Ви щаслива людина, якщо дотримуєтесь уніфікованого способу тестування зображень Docker. Це допоможе вам безпроблемно інтегрувати функціональну гілку у висхідний або головний гілки сховища git. Єдине, про що слід подбати - це підтримувати послідовність інтеграції та доставки. Якщо випусків немає, як би ви запобігли «стану гонки» в одній системі з декількома гілками паралельних функцій?

То яке рішення? Процес повинен розпочатися тоді, коли немає конкуренції.

Етапи:

(1) Оновіть гілку функцій до вище за течією.

(2) Побудувати зображення.

(3) Перевірте вбудовані зображення.

(4) Почніть і дочекайтеся завершення кроку-2 і доставки зображень.

(5) Якщо етап 4 не вдається, поверніть екосистему до попереднього кроку.

(6) Поєднайте функціональну гілку вгорі за течією. Відправте його в сховище.

Якщо будь-який з перерахованих вище кроків не вдасться, процес доставки негайно припиняється. Завдання повертається розробнику, поки воно не буде вирішено. Цей же процес може працювати з більш ніж одним сховищем. Кожен з кроків повинен бути виконаний аналогічно, але для кожного сховища. Наприклад, крок 1 для сховища A і крок для сховища B тощо.

Kubernetes надає вам свободу розгортати оновлення по частинах. Численні тести на АБ можуть розгорнутись та пройти аналіз ризику. Kubernetes внутрішньо розділяє служби та програми.

Системи відкату

З деяких найважливіших здібностей міцного архітектурного каркаса, одна з них - здатність відкатати. Існує ряд явних та неявних нюансів. Давайте подивимось на них:

(1) Служба повинна мати можливість налаштувати своє середовище, а також відкати.

(2) Якщо відкат неможливий, послуга має бути поліморфною. Він повинен підтримувати як стару, так і нову версії коду.

(3) Після будь-якої послуги після відкату повинна бути сумісна зворотна сумісність.

У кластері Kubernetes стани відкату легко. Але це працюватиме лише в тому випадку, якщо ваш мета-проект містить інформацію про цей знімок. Складні алгоритми відкату доставки не перешкоджають, але є необхідними.

Тож за яких обставин слід запускати механізм відкату?

(1) Коли відсоток помилок додатків високий після випуску.

(2) Після запуску прийому сигналів від ключових точок моніторингу.

(3) Коли випробування на куріння не спрацьовують.

(4) Це можна зробити вручну.

Заходи безпеки

Зробити бронезахисну екосистему непросто. Це неможливо зробити, лише дотримуючись одного робочого процесу. Архітектурна база повинна бути достатньо надійною для вирішення будь-яких питань. Kubernetes має деякі хороші вбудовані механізми контролю доступу, мережевої політики, аудиту подій тощо. Є деякі інструменти для захисту інформації, і вони виявилися чудовими в плані захисту.

Наступний крок - від робочих процесів розвитку до архітектури

Архітектурна база, яка пропонує гнучкість, масштабованість, доступність, надійність, захист від загроз тощо, є майже обов'язковою. Це важлива річ. Фактично ця потреба призвела до нової концепції. Будь-які здогадки? Так, DevOps. Це призвело до повної концепції інфраструктури автоматизації та оптимізації.

Тепер настав час змінити архітектуру з монолітичної на мікросервісну. Він пропонує величезні переваги архітектури, орієнтованої на сервіс. Принаймні, для Докера та Кубернетів ідеологічно неправильно використовувати монолітну архітектуру. Я неодмінно обговорюю деякі моменти архітектури мікросервісів. Щоб отримати поглиблені знання про DevOps, будь ласка, прочитайте цю статтю про DevOps.

Тепер ми швидко обговоримо основні критичні компоненти та рішення хорошої архітектури.

Критичні компоненти

Номер 1- Служба посвідчення особи:

Мікросервіс ідентичності означає "ідентичність як мікросервіс". Послуги легкі. Він надає модульність та забезпечує гнучкість у застосуванні. Мікросервіс ідентичності є потужним і має доступ до всіх профільних даних. Він здатний забезпечити все необхідне в основі всіх програм.

Якщо ви хочете бути клієнтом великих корпоративних платформ, таких як IBM, Google, Microsoft тощо, доступ буде оброблятися службами постачальника. Але що робити, якщо ви хочете власного рішення? Список у наступному розділі допоможе вам визначитися.

Номер 2- Автоматичне надання послуг:

Побудовані послуги не залежать одна від одної. Це призводить до легкої розробки та меншої кількості помилок. Це також допомагає в пошуку інших служб у динамічній та автоматизованій схемі.

Kubernetes зменшує потребу в додаткових компонентах. Але все-таки потрібно автоматизувати додавання нових машин. Ось список інструментів:

(1) KOPS - допомагає встановити кластер на AWS або GCE.

(2) Teraform - допомагає керувати інфраструктурою для будь-якого середовища.

(3) Відповідна - пропонує автоматизацію будь-якого типу.

Я особисто рекомендую Ansible, оскільки він допомагає вам працювати як з серверами, так і з об'єктами Kubernetes.

Число 3- сховище Git та відстеження завдань:

З репозиторіями Git можна легко вирішити завдання. Основна ідея - мати невеликий сховище. Він виконує функції трекера навколишнього середовища. Вміст містить тип версій, які слід використовувати для різних служб. Кращою системою управління джерелом для цього є «git».

Слід створити належне робоче місце для роботи в команді та зберігання коду для всіх важливих дискусій. Якщо ви хочете отримати безкоштовну послугу, перейдіть на Redmine. Ще, Джира - платна послуга і є досить корисною. Для сховища коду Герріт - чудовий вибір, безкоштовно!

Номер 4- Реєстр Докер:

Реєстр докерів - це тип зберігання та передачі вмісту. Він містить ім'я зображень Docker і доступний у різних тегах. Для взаємодії з реєстром користувач повинен запускати команди push та pull.

Система управління зображеннями докера є досить важливою. Система також повинна підтримувати доступ для користувачів та групи користувачів. Для цього виберіть хмарне рішення або якусь приватну розміщену службу. Хороший варіант - гавань Vmware.

Номер 5- CI / CD та надання послуг:

Лише безперервна інтеграція та служба доставки з'єднують компоненти, про які говорилося раніше. Постійна доставка означає, що послуга є простою і позбавленою будь-якої логіки. Послуга CI / CD повинна реагувати лише на події зовнішнього світу, такі як зміни у сховищі git тощо.

Служба інтеграції відповідає за автоматичне тестування сервісу, доставку послуги, відкат, видалення послуги та створення зображень.

Число 6- Збір та аналіз журналу:

У будь-якій програмі мікросервісу важливо відстежувати проблему. Відстеження можливо за допомогою ведення журналу. Таким чином, ведення журналів та моніторинг дають вам цілісне уявлення про систему.

Журнали стають доступними, записуючи їх у STDOUT або STDERR кореневого процесу. Дані журналів повинні бути доступними при необхідності. Він також повинен містити записи з минулого.

Число 7- Відстеження, моніторинг та оповіщення:

Такі інструменти, як Opentracing та Zipkin, допомагають зрозуміти помилку. Як, де ти пішов не так? Ці інструменти допоможуть вам відповісти на такі запитання. Невдачі трапляються, і їх відстеження важливо.

Далі моніторинг поділяється на три рівні. Це фізичний рівень, рівень кластера та рівень обслуговування. Немає можливостей для помилок при моніторингу. Такі інструменти, як Прометей та OpsGenie, виявились досить корисними для моніторингу. OpsGenie також оповіщає та повідомляє про проблеми на всіх рівнях. Таким чином, відстеження, моніторинг та оповіщення ніколи не слід сприймати легко. Вони є оборонною частиною програми.

Номер 8- шлюз API з єдиним входом:

У мікросервісах усі дзвінки повинні проходити лише через шлюз API. Це допомагає підтримувати безпеку. Він також відповідає за маршрутизацію запитів API. Таким чином, шлюз API є точкою входу для всіх відповідних мікросервісів. Один вхід означає сеанс. Це якась послуга аутентифікації користувача. Відповідно до імені, облікові дані для входу встановлюються один раз або одноразово. Потім він може використовуватися для доступу до декількох додатків.

Потрібен надійний сервіс для виконання таких завдань, як авторизація, автентифікація, реєстрація користувача, єдиний вхід тощо. Послуга інтегрується в шлюз API і все обробляється через нього.

Номер 9 - Автобус подій:

Якщо екосистема має сотні послуг, з ними потрібно дбати обережно. Міжслужбова комунікація є обов'язковою, і немає помилок. Потік даних повинен бути упорядкований. Шина подій відноситься до добре спрямованого потоку подій від однієї мікросервісу до інших.

Номер 10 - Бази даних та державні послуги:

У додатку на основі мікросервісів, як правило, є численні сервіси. Вимоги до зберігання даних для всіх різні, залежно від ролей служби. Таким чином, деякі сервіси хороші з реляційною базою даних, а іншим може знадобитися база даних NoSQL, як MongoDB.

Докер змінив правила гри. База даних займає центральний простір, важливий у світі зберігання. Отож, що б не було рішенням, воно повинно мати можливість легко працювати в умовах Кубернету.

Повернення до реальності, від архітектури до реального життя

Я буду абсолютно чесним з вами, поділяючи свої погляди. Я вірю, що в майбутньому цілі архітектури будуть розглядатися як провали. Принципи дизайну, основи та інше все змінюється! Але вам потрібно залишатися на вершині гри. Для цього інтегруйтесь у професійну спільноту. Рано чи пізно вам доведеться адаптуватися до цих змін. Тоді чому б не почати саме зараз?

Є багато можливостей, але лише якщо ви поновлюєте себе новими технологічними оновленнями.

Тепер повернемося до назви цієї статті. Докер і Кубернети мають найкращу архітектуру? Поки що, безумовно, так. Але це може бути лише найкраща архітектура на даний момент. Прагніть більше, прагніть побудувати кращу архітектуру, кращу, ніж найкращу!

Я ділюсь кількома корисними посиланнями з усіма вами.

Стаття про докера: Підручник Докера: Контейнери, візитки та докер для початківців

Відеоурок Докер: Серія відеоуроків Докер

Стаття Kubernetes: Біблія Kubernetes для початківців та розробників

Відеоурок Kubernetes: Серія відеоуроків Kubernetes