Автоматизація серверів VK Cloud: Terraform, cloud-init і High-IOPS

Ручне налаштування серверів у хмарі обертається простоями та різними стендами в команди. Ми налаштовуємо VK Cloud Servers під ключ: описуємо інфраструктуру як код, щоб середовища піднімалися однаково й передбачувано. Час на підготовку стенда скорочується в рази, а відновлення після збою займає хвилини замість годин.
Часті запитання

Налаштування VK Cloud Servers: де ручна робота дає збій

Налаштування серверів у хмарі через вебконсоль здається швидким, поки стенд один.

До третього середовища з'являються розбіжності: на тестовій машині відкрито порт, якого немає в продакшні, версія системної бібліотеки відрізняється, а правило брандмауера живе лише в чиїйсь вкладці браузера. Відтворити такий стенд з нуля вже не можна — можна лише «приблизно згадати», що робили руками.

Ціна проявляється в найневдаліший момент.

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

Ручна конфігурація серверів погана ще й накопиченням. Кожна термінова правка «на живій машині» не потрапляє в опис, наступна правка спирається на попередню — і через кілька місяців ніхто не береться точно сказати, чим бойовий контур відрізняється від резервного.

Автоматизація серверів VK Cloud знімає цей клас відмов: параметри вузла описуються декларативно, а первинне налаштування виконується сценарієм під час першого запуску, а не вручну в консолі.

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

Вимірюваний ефект: швидкість збирання, відновлення, відмови

До автоматизації підйом тестового середовища з'їдав половину робочого дня: інженер вручну розгортав вузли, доставляв залежності й правив конфігурації під конкретну задачу.

Тепер середовище описано як код і піднімається цілком за 8–12 хвилин — разом із мережею, дисками, балансувальником і первинним налаштуванням. Той самий набір застосовується для гілки розробки, приймального стенда й навантажувальних прогонів.

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

Зараз вузол, що впав, перестворюється з опису інфраструктури за 5–7 хвилин, стан даних підтягується зі знімків, а попередня конфігурація залишається в історії й доступна для відкату однією командою.

Окремо зникає цілий клас відмов, який не лікується швидким відновленням, — розбіжність налаштувань між середовищами.

Ручні правки «тільки на проді», забуті залежності, розбіжні параметри сервісів більше не накопичуються: будь-яка зміна проходить через той самий опис і рев'ю, що й код. Інфраструктура в VK Cloud стає відтворюваною — стенд, зібраний через місяць з нуля, збігається з поточним.

Стабільність середовищ перестає залежати від того, хто саме вносив зміни.

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

Способи опису інфраструктури: порівняння підходів

Усі чотири підходи розв'язують одну задачу — привести сервер до потрібного стану, але по-різному переживають зміни.

Вибір залежить від того, як часто змінюється середовище, скільки машин у контурі й наскільки важлива повторюваність результату під час наступного розгортання — зокрема під час налаштування серверів VK Cloud.

Варіант Коли підходить Обмеження
Декларативний опис (Terraform) Інфраструктура з кількох сервісів, потрібні однакові середовища й передбачуваний відкат Потребує ведення стану й дисципліни: правки в панелі керування розходяться з описом
Скрипти первинного налаштування (cloud-init) Машина піднімається із загального образу, потрібно доінсталювати пакети, завести користувачів і ключі Для довгої логіки слабко підходить: повторний прогін не завжди дає той самий стан
Готові образи машин Одна роль у десятків машин, важлива швидкість запуску Образ застаріває, оновлення потребує перезбирання й повторного тестування
Ручне збирання Разовий стенд або нестандартне середовище, яке не повторюється Не відтворюється: стан сервера ніде не зафіксовано

На практиці підходи комбінують: декларативний опис задає машини, мережу й диски, cloud-init доводить їх до робочого стану, а готовий образ скорочує запуск до мінімуму. У сумі це дає конфігурацію через код і шаблони середовищ, які переносяться між проєктами без ручних правок. Ручне збирання залишається доречним лише там, де відтворення не потрібне.

Етапи впровадження: від аудиту до передачі в підтримку

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

  1. Аудит інфраструктури. Інвентаризація: які сервери реально працюють, які томи й мережі до них підключено, хто й за якими ключами має доступ, де фактична конфігурація розходиться з документацією. Без цього кроку опис ресурсів просто переносить помилки в код.
  2. Проєктування схеми середовищ. Визначаємо кількість контурів, ізоляцію мереж, які навантаження потребують дисків класу High-IOPS, а які обходяться стандартними. Схема фіксується до написання маніфестів.
  3. Опис ресурсів. Сервери, мережі, балансувальники й томи описуються декларативно в Terraform, первинне налаштування системи — через cloud-init. Стан зберігається в сховищі з обмеженим доступом, модулі перевикористовуються між середовищами.
  4. Налаштування ролей і доступів. Окремі облікові записи для автоматизації й для людей, права за принципом мінімальної достатності, ключі видаються під конкретну роль. Ручні правки в консолі закриваємо — інакше наступне застосування їх відкотить.
  5. Перевірка конфігурації. Копія контуру розгортається з нуля, видаляється й збирається заново, план змін звіряється з поточною інфраструктурою. Так перевіряється відтворюваність і відсутність прихованих залежностей.
  6. Передача в супровід. Команда отримує документацію, регламент змін і зрозумілу схему відкату; масштабування, ротація ключів і оновлення виконуються за інструкцією без участі авторів схеми.

Що передаємо на руки: конфігурації, схеми, регламенти

Проєкт для нас закінчується не викаткою, а моментом, коли ваша команда може сама підняти середовище, внести зміну й відновити сервіс без нас.

Тому разом із робочою інфраструктурою ви отримуєте артефакти в репозиторії — їх читають, рев'юять і версіонують нарівні з кодом застосунку.

  • Опис інфраструктури — декларативні файли VK Cloud Servers: мережа, підмережі, диски, групи безпеки, балансувальник. Стан зберігається віддалено з блокуванням, щоб два одночасні застосування не розійшлися.
  • Схеми середовищ — що відрізняється між стендами, де перевизначаються параметри, як підняти копію продакшн-контуру для перевірки змін.
  • Політики доступу — ролі для інженерів і сервісних облікових записів, принцип мінімальних прав, порядок видачі й відкликання ключів і доступів до консолі.
  • Регламент резервного копіювання — розклад знімків дисків, глибина зберігання, перевірка відновлення на окремому стенді, порядок відкату до попередньої точки.
  • Шаблони первинного налаштування — сценарії cloud-init: облікові записи, монтування дисків, встановлення агентів, щоб нова машина вводилася в експлуатацію без ручних кроків.
  • Документація із супроводу — інструкції для чергової зміни: що означає сигнал моніторингу, як розширити диск, як відкотити реліз, куди дивитися насамперед.

Список артефактів фіксуємо в акті передачі: за кожним пунктом видно, де він лежить і хто його власник.

Кейс: перевели ручні стенди у відтворювану схему

Команда збирала тестові стенди руками: машини піднімали через вебпанель, диски прив'язували за інструкцією, доступи налаштовували після першого запуску.

Кожен стенд виходив трохи іншим, розбіжності спливали вже на прийманні, а розбір займав дні — описи середовищ жили в головах двох інженерів.

Ми перенесли опис інфраструктури в декларативні конфігурації: мережа, диски класу High-IOPS під бази й первинне налаштування вузлів стали частиною коду.

VK Cloud дала програмний інтерфейс, до якого конфігурації звертаються напряму, — ручний клік по панелі перестав бути кроком розгортання.

Що міряли До Після
Збирання стенда під навантажувальний тест половина дня за кроками з документа одна команда, хвилини
Розбіжності між середовищами знаходили на прийманні конфігурація версіонується разом із кодом
Відновлення після збою вузла збирання заново вручну вузол замінюється описом
Повторювані відмови неправильний клас диска, забуті правила доступу перевіряються до застосування змін

Окремо зникли збої, які повторювалися найчастіше: неправильний клас диска під базу, пропущені правила доступу й вузли, підняті не в тому сегменті мережі.

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

Що робити, якщо частину інфраструктури вже зібрано вручну?

Так, так буває майже завжди: частину машин у VK Cloud піднято руками, частину — скриптами, і переписувати все одразу ніхто не готовий.

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

Наявні машини підтягуються в опис через імпорт стану. Конфігурація звіряється з фактичною, і план змін має показувати відсутність правок — якщо він пропонує перестворити диск або мережевий інтерфейс, отже, опис розійшовся з реальністю.

Правимо тоді опис, а не машину: так ресурс переходить під керування без перезавантаження й без простою.

Нові ресурси описуються одразу й повністю: мережі, диски, правила доступу, первинне налаштування через cloud-init.

Наявні підключаються як джерела даних — вони читають параметри, але не претендують на володіння, тому випадкове застосування не знесе те, що ми поки не готові забрати.

Середовища тримаємо зворотно сумісними: ті самі модулі з різними наборами змінних, щоб зміна спочатку перевірялася на тестовому контурі й лише потім ішла в бойовий. Перенесення йде частинами, за групою машин, зі збереженням можливості повернутися до попереднього стану.

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

Часті технічні питання перед стартом робіт

Перед стартом робіт сумніви в інженерних команд зазвичай ті самі: як влаштовані доступи, що відбувається з даними під час збою, хто відповідає за інфраструктуру після передачі. Нижче — короткі відповіді за кожним пунктом.

Як видаються доступи й що залишається в команди замовника?

Працюємо через окремі облікові записи з ролями за принципом мінімальних прав: зміна мережевої периметрової зони й доступ до секретів розділені та видаються різним людям.

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

Як влаштовано резервне копіювання і чи перевіряється відновлення?

Копії знімаються за розкладом і зберігаються окремо від робочого контуру, з обмеженим строком життя — реєстр не зростає безкінечно. Відновлення перевіряємо на тестовому контурі: інакше не можна стверджувати, що копія справді піднімається.

Чи можна перенести свої образи й нестандартні дискові томи?

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

Що буде, якщо провайдер змінить інтерфейси керування?

Такі зміни неминучі. Ми ізолюємо їх в окремому шарі опису інфраструктури, тому правка стосується одного модуля, а не всієї конфігурації. Контроль змін — через рев'ю та історію правок: відхилення від описаного стану видно й відкочується.

Що входить у супровід інфраструктури після впровадження?

Передаємо опис, схеми, політики та інструкції з типових операцій, навчаємо команду. Далі — підтримка після впровадження в узгодженому режимі: оновлення, реакція на інциденти, планові перевірки відмовостійкості.

Обговоримо задачу: повернемося з оцінкою та планом

Обговорення задачі починається з опису того, що є зараз: скільки серверів і середовищ, як вони створюються — руками через панель керування чи вже частково декларативно. Цього достатньо, щоб оцінити проєкт автоматизації та запропонувати порядок кроків, не випитуючи зайвих деталей.

Що корисно зазначити в заявці:

  • скільки серверів, середовищ і команд користуються інфраструктурою зараз;
  • які ділянки автоматизуємо першими: мережу, диски, розгортання застосунків, доступи;
  • вимоги до дисків і характеру навантаження — від цього залежить клас томів;
  • чи є регламент щодо доступів, секретів і журналювання змін;
  • чи потрібне перенесення наявних машин або піднімаємо лише нові;
  • який режим підтримки інфраструктури очікується після запуску.

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

Перший крок майже завжди — пілотний контур: один сервіс описується декларативно цілком, від мережі й томів до первинного налаштування через cloud-init, щоб перевірити підхід на реальному навантаженні.

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

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139