Огляд проекту
В іншому проекті, що ґрунтується на реальному сценарії, мені довелося діяти як DevOps-інженер і показати новому члену команди, як розгорнути додаток на Kubernetes-кластері.
Цей кластер є частиною проекту Cloud Bootcamp, і я підготував нового члена команди до розгортання програми для голосування, яка була розроблена для MultiCloud Experience — онлайн-заходу, де учасники мали можливість ознайомитися з хмарними технологіями.
Архітектура рішення
Я розгорнув його на хмарі Microsoft Azure, де спочатку завантажив Docker-образ програми до Azure Container Registry (ACR), а потім використав сервіс Azure Kubernetes Service (AKS) для розгортання кластера, керованого Microsoft Azure.
Під час цього процесу я мав можливість попрактикуватися у використанні інструментів, таких як Azure Cloudshell та Azure CLI. Завдання охоплювало адміністрування, надання та впровадження ресурсів, таких як Azure Container Registry та Azure Kubernetes Service через інтерфейс командного рядка (CLI). Також я вперше працював зі створенням і керуванням віртуальними машинами в Azure VM та організацією груп ресурсів в Azure.
Ця діяльність була здійснена у три основні етапи:
1. Створення віртуальної машини (VM) та тестування доступу через Cloud Shell
На цьому етапі ми створили VM, на якій було повністю виконано реалізацію програми для голосування через командний рядок (Azure CLI).
a. Створення групи ресурсів;
b. Створення Ubuntu Server 22.04 LTS VM з розміром Standard_B1s;
c. Налаштування користувача доступу через SSH з відповідним ключем доступу;
d. Налаштування портів доступу через SSH;
e. Тестування доступу через Cloud Shell;
Доступ до VM через Cloud Shell
2. Підготовка віртуальної машини для налаштування контейнерних образів програми
a. Оновлення списку пакетів VM (sudo apt update);
b. Встановлення базових інструментів (sudo apt install):
i. Unzip;
ii. Docker;
iii. Docker Compose.
c. Завантаження програми та її ресурсів (wget);
d. Розгортання програми (Docker і Docker Compose);
e. Налаштування портів для доступу до програми (порт: 8080).
Підготовка VM
3. Створення Azure Container Registry та реалізація Azure Kubernetes Service для запуску програми
a. Встановлення Azure CLI:
i. Увійшов в Azure CLI;
b. Встановлення Kubectl.
Встановлення CLI та Kubectl
c. Створення Azure Container Registry (ACR):
i. Увійшов в ACR;
ii. Налаштування тегів;
iii. Завантаження образів програми;
d. Створення Kubernetes-кластера на Azure (AKS);
i. Налаштування облікових даних для входу в кластер;
ii. Тестування прав доступу;
iii. Розгортання програми;
e. Тестування роботи програми на кластері.
Створення ACR та Kubernetes кластера
Екран AKS кластера
Програма для голосування, що працює
Інфраструктура як код за допомогою мови програмування
• На відміну від файлів YAML/JSON, Pulumi дозволяє використовувати цикли, умови та функції.
• Його підхід «software engineering» сприяє повторному використанню коду (модулі, бібліотеки тощо).
2. Управління різними постачальниками послуг
• Pulumi підтримує більшість основних хмарних сервісів (AWS, Azure, GCP, Kubernetes), подібно до Terraform.
• Ідеально підходить для оркестрації як IaaS-ресурсів (віртуальних машин), так і PaaS-сервісів або контейнеризованих рішень.
3. Повна автоматизація
• Ви можете інтегрувати Pulumi у ваші CI/CD пайплайни.
• Pulumi порівнює фактичний стан та бажаний стан і застосовує тільки необхідні зміни (аналог «plan» / «apply», як у інших інструментах).
5. Terraform: беззаперечний стандарт
Після Pulumi, Terraform, розроблений HashiCorp, залишается одним із найбільш широко використовуваних інструментів IaC в індустрії. Його декларативний підхід через мову HCL (HashiCorp Configuration Language) є потужним і досить доступним.
1. Декларативна мова та мультихмарність
• Terraform підтримує сотні постачальників послуг (AWS, Azure, GCP, VMware, Kubernetes тощо).
• Його модель «plan/apply» дозволяє переглядати зміни перед їх розгортанням, зменшуючи ризик критичних помилок.
2. Просунута модульність
• Terraform заохочує створення модулів, що інкапсулюють налаштування компонента (VPC, кластер, база даних тощо).
• Модулі можна повторно використовувати, що забезпечує надійний фундамент для команд, які працюють над кількома проектами одночасно.
3. Екосистема та спільнота
• Велика кількість прикладів, модулів «під ключ» та дискусій на форумах.
• Ідеально підходить для швидкого навчання та впровадження кращих практик.
4. Доповнюваність з іншими інструментами
• Terraform керує ресурсами (інстансами, мережами тощо), а ви можете продовжувати використовувати Ansible або SaltStack для налаштування ваших машин після їх створення.
• Багато робочих процесів поєднують Terraform (IaC, provisioning) та інші рішення для конфігурації (Ansible, Salt) для повної DevOps-методології.
6. Поради для створення вашої траєкторії IaC
1. Оцінка розміру та складності вашої інфраструктури
• Кілька серверів або VM: скрипт Paramiko або Ansible може бути достатнім.
• Декілька десятків/сотень машин: SaltStack або структурований Ansible, навіть Pulumi/Terraform для повного управління хмарними ресурсами.
2. Систематичне версіонування та тестування
• Зберігайте ваш IaC (будь то SaltStack, Ansible, Pulumi або Terraform) в репозиторії Git.
• Налаштуйте тести або CI/CD дії (lint, validate, plan/preview) для передбачення проблем.
3. Модулювання та документація
• Організуйте ваш код в ролі (Ansible), стани (Salt), модулі (Terraform/Pulumi).
• README або коротка документація про загальну архітектуру завжди корисні для нових членів команди.
4. Координація provisioning та конфігурації
• Pulumi або Terraform для створення ресурсів (інстанси, мережі…).
• Ansible або SaltStack для програмного налаштування.
• Ви отримаєте повну та узгоджену лінію інструментів.
7. Висновок: DevOps
Кожен із цих інструментів відповідає конкретним потребам, одночасно входячи в загальний підхід Інфраструктура як код. Незалежно від того, чи потрібно керувати кількома серверами локально, чи величезним мультихмарним ресурсом, цей фундамент DevOps гарантує відслідковуваність, повторюваність та узгодженість, що є основою надійності розгортання в продуктивному середовищі.
Перекладено з: … as Code : Infrastructure