Хмарний вітрильник
Open in Telegram
Простір для розвитку ДевОпс інженерів Деталі про програму менторства: https://dosvit.com.ua Питання, пропозиції: @eugene_koshmanov
Show more377
Subscribers
-224 hours
-37 days
-530 days
Posts Archive
#docker #containerization
🐳 Розбираємо основні елементи Docker: Dockerfile, Docker image та Docker Container 🐳
Раніше ми розповіли вам, що таке докер, але для того щоб ним ефективно оперувати треба знати три основні компоненти:
1️⃣ Dockerfile
Що це? Dockerfile - це текстовий файл, що містить всі команди, необхідні для створення образу Docker. Наприклад, уявімо, ви написали застосунок на пайтоні, тоді приклад докерфайлу буде таким:
FROM python:3.8
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "./app.py"]
Роль: подібно до рецепта, він вказує Docker, як зібрати образ вашого додатку, включаючи базовий образ, залежності, виконувані команди тощо.
2️⃣ Docker Image
Що це? Docker Image - це шаблон на основі докерфайлу, який використовується для створення контейнера.
Для того щоб створити імедж, можна запустити таку команду:
docker build -t [your_image_name] .
Роль: Містить усе необхідне для запуску додатку (код, бібліотеки, змінні середовища, конфігураційні файли тощо). Можна зберігати в репозиторіях (наприклад, Docker Hub або у AWS ECR).
3️⃣ Docker Container
Що це? Контейнер - це вже запущений екземпляр образу Docker.
Наприклад, щоб підняти контейнер на сервері, можна використати наступну команду:
docker run -d -p 5000:5000 --name my-running-app your_image_name
Роль: Забезпечує ізольоване середовище, де додаток може виконуватися. Контейнери легкі, оскільки вони ділять ядро ОС хоста, але ізольовані від інших процесів.
🔍 Зв'язок між ними?
Створюєте Dockerfile ➡️ З нього будується Docker Image ➡️ З цього образу запускається Docker Container.
Детальніше про окремі нюанси для докерфайлів, імеджів та контейнерів дивіться у документації докеру або ж чекайте наступних наших постів)
📕 Домашнє завдання для новачків: спробуйте самостійно розібрати для себе що означає кожна команда та параметр, наведені у цьому пості
☁️Хмарний вітрильник☁️#docker #Containerziation
🐋 Розбираємось з Docker Compose
Як ми розповідали раніше, докер є дуже крутою штукою для універсального деплою застосунків, але часто також у вакансіях окрім самого докеру проскакує і докер компоуз — що то за звір такий?
🔍 Що таке Docker Compose?
Docker Compose – це інструмент, який дозволяє легко запускати додатки з декількома контейнерами Docker. Він використовує YAML-файл для конфігурації сервісів вашого додатку. Це означає, що всі контейнери, мережі та томи можуть бути описані в одному файлі, що значно спрощує процес розгортання та управління складними додатками.
❔Як це працює?
За допомогою Docker Compose ви можете описати всі елементи вашого додатку (наприклад, веб-сервер, базу даних, кеш-сервер) та як вони взаємодіють. Це дозволяє запускати ваш додаток однією командою (docker-compose up) замість того, щоб запускати кожен контейнер окремо з купою команд типу порт мепінгу, додавання волюмів, назви і таке інше.
📝 Приклад Docker Compose файлу
Наприклад, якщо ви збілдили імедж з минулого поста про елементи докеру, ви можете написати власний docker-compose.yaml файл:
version: '3'
services:
your_app:
image: your_image_app:latest
ports:
- "5000:5000"
Далі, вам треба буде всього лише запустити докер компоуз написавши команду docker-compose up .
ℹ️ Це дуже простенький приклад докер компоуз файлу, окрім іншого, ви можете задавати різні параметри (у цьому прикладі - порт мепінг 5000:5000) через .env файли, але про це поговоримо у наступних постах)
⭐️ Застосування
Docker Compose підходить у випадках, коли не треба використовувати ані Docker Swarm, ані Kubernetes, тобто в тих моментах де треба швидко розгорнути контейнери без зайвих інфраструктурних приготувань. По суті докер компоуз дає змогу дотримуватись принципу "інфраструктура як код" і записати сам контейнер як набір інструкцій та параметрів, необхідних для успішного розгортання контейнеру.
☁️Хмарний вітрильник ☁️#AWS #Networking
🌐 AWS Public IP vs Elastic IP – що вам потрібно знати
Сьогодні поговоримо про два ключові поняття у світі AWS - Public IP і Elastic IP. Часто ці терміни можуть викликати плутанину, але розуміння їх відмінностей є критично важливим для ефективного управління вашими AWS ресурсами. Давайте розберемося!
🔹 Public IP
Тимчасовість: головна риса Public IP в AWS - її тимчасовий характер. Це означає, що кожного разу, коли ви зупиняєте та запускаєте EC2 інстанс, цій машині присвоюється нова Public IP.
Використання: підходить для тимчасових або випробувальних сценаріїв, де постійність IP-адреси не є критичною.
🔹 Elastic IP
Стабільність: На відміну від Public IP, Elastic IP в AWS є статичною та зберігає свою постійність. Ви може призначити Elastic IP конкретному EC2 інстансу, і вона залишиться з ним, навіть якщо інстанс буде зупинений.
Використання: еластична IP-адреса є важливою для середовищ, які вимагають стабільності, наприклад, для хостингу веб-серверів або для систем, що потребують надійного з'єднання.
🤔Висновок
Отже, Public IP є тимчасовою білою адресою для EC2 інстансів, однак за неї платити не треба. Інше річ Elastic IP - ви можете його призначити на будь-який інстанс у будь-який час, але ви за нього платите окремо від EC2. Більше того, якщо ви не використовуєте Elastic IP, але ви його собі взяли — вам буде нараховуватись додаткова плата за простой. Тому при виборі з цих двох типів адрес у Амазоні, варто спиратись на доцільність сталості IP адреси та ціну.
☁️Хмарний вітрильник☁️
#AWS
🔍 Що таке Amazon S3 бакет?
S3, або ж Simple Storage Service, - це сервіс зберігання статичних даних.
"Бакет" у S3 - це по суті базова одиниця зберігання, схожа на папку або директорію у традиційних файлових системах.
✅ Особливості S3 бакетів:
💪Масштабованість: S3 автоматично масштабується в залежності від потреб, тому ви можете зберігати необмежену кількість даних.
🚪Доступність та надійність: S3 забезпечує високу доступність та надійність, автоматично реплікуючи дані у різних місцях.
🔐Безпека: захист даних забезпечується за допомогою різних методів, включаючи шифрування даних та контроль доступу.
⚖️Гнучкість управління даними: S3 надає можливості для налаштування правил зберігання, архівації та видалення даних.
👨💻 Де використовують S3 Бакети?
🌐Хостинг статичних веб-сайтів: S3 може зберігати HTML, CSS та інші файли, необхідні для сайту.
📂Резервне копіювання та архівація: чудово підходить для зберігання великих об'ємів даних з можливістю швидкого доступу.
📝Big Data та аналітика: S3 забезпечує зберігання та аналіз великих даних.
🎥Медіа-хостинг: часто використовується для зберігання та доставки мультимедійного контенту.
☁️Хмарний вітрильник☁️
💰On-demand vs Spot instances на AWS
🔸Доволі багато новачків у сфері девопс при дослідженні типів інстансів не можуть до кінця зрозуміти в чому різниця між On-demand та Spot інстансами на Амазоні. Давайте коротко про це роз'яснимо:
🔹 On-Demand Instances: ідеально підходять для проектів зі стабільними вимогами до обчислювальних ресурсів. Ви платите за годину без довгострокових зобов'язань. Гарантовано отримуєте необхідні ресурси (інстанси), коли вони вам потрібні.
🔹 Spot Instances: підходять для проектів з гнучкими часовими рамками. Вони пропонують високі знижки (до 90%) в обмін на можливість AWS забрати ці інстанси, коли ціна на них зросте вище бажаної вами. Чудовий вибір для задач, які можна перервати, наприклад, для аналізу даних чи резервного копіювання.
👍 Вибір між ними залежить від вашого бюджету та задач, де вимагається гнучкість у використанні фінансів або там, де не вимагається безперервна робота сервісів.
☁️Хмарний вітрильник☁️
Між іншим, якось так виглядає різниця між TCP та UDP, наочно😂
☁️Хмарний вітрильник☁️
#Monitoring
🔍 Моніторинг в DevOps та різниця між Prometheus та Grafana
Часто вимогах до вакансій, особливо десь в кінці, прописано що треба знати моніторинг, наприклад, Grafana+Prometheus.
🤔Але взагалі кажучи, навіщо потрібен моніторинг у девопсі?
💻Уявіть собі, ви сидите за власним комп'ютером і він чомусь почав підвисати. Ви заходите у "Диспетчер задач" (якщо це вінда) та перевіряєте, чи є там якась програма, яка сильно грузить вашу машину і чи можна її закрити.
💻А тепер уявіть, що ви девопс і у вас таких комп'ютерів (серверів) десь десь від ста штук. Заходити на кожний сервер та перевіряти вручну його стан, відверто кажучи, не дуже раціональне рішення. При цьому майте на увазі, що неполадки не серверах не виникають за розкладом, а тому їх можна досить легко прогавити.
✅Саме для цього і треба моніторинг — практика централізованого збору логів та метрик, та їх інтерактивне зображення у зрозумілому вигляді, наприклад, графіках чи сповіщеннях про аларми.
Найчастіше для моніторингу використовуються саме прометеус та графана. Для новачка іноді важко зрозуміти, хто за що відповідає, тож коротко: прометеус займається збором метрик та логів на вашій машині, а графана займається їх упорядкуванням у дешборди — місця де можна ці дані подивитись в зрозумілому вигляді.
ℹ️ Важливо: насправді існують багато інших інструментів моніторингу, як-от CloudTrail, CloudWatch, AlertManager або Grafana Loki, але Grafana+Prometheus є основою основ з якої як правило і починають вивчати суть моніторингу.
📕 Домашнє завдання для новачків: спробуйте на власному комп'ютері встановити прометеус та графану і використати для графани ось цей шаблон дешборду (хоча ви можете і самі собі його зробити 😏)
☁️Хмарний вітрильник☁️
#Networks
🌐 TCP vs UDP: розбираємо основні відмінності 🌐
У світі мережевих технологій існує два основних протоколи, які ви часто зустрінете, це TCP (Transmission Control Protocol) та UDP (User Datagram Protocol). Хоча обидва використовуються для відправлення даних в інтернеті, вони мають важливі відмінності.
Якщо коротко, уявіть двох поштарів: один приїздить саме під ваш дім, перевіряє чи ціла ваша посилка та акуратно кладе її біля ваших дверей. Другий же просто на велосипеді проїзжає уздовж вашої вулиці та швиряє вашу посилку до ваших дверей. Чи буде вона ціла і чи взагалі вона потрапила куди треба — одному богу відомо.
Так от, перший поштар — це TCP. Другий — UPD. Давайте трошки детальніше глянемо на їх відмінності:
🔹 TCP (Transmission Control Protocol):
Надійність: гарантує доставку даних завдяки підтвердженню отримання.
Встановлення з'єднання: перед передачею даних встановлює з'єднання.
Порядок даних: забезпечує, що пакети даних прибувають у правильному порядку.
Швидкість: часто повільніше UDP через додаткові перевірки.
Використання: веб-браузери, електронна пошта, файлообмін.
🔹 UDP (User Datagram Protocol):
Швидкість: швидше за TCP, оскільки менше перевірок.
Немає встановлення з'єднання: дані відправляються без попереднього встановлення з'єднання.
Ненадійність: не гарантує доставку пакетів.
Без порядку: пакети можуть прибувати в довільному порядку.
Використання: стрімінг відео, онлайн-ігри, VoIP (голосовий зв'язок через Інтернет).
☁️Хмарний вітрильник☁️
#docker #containerization
🐳 Введення в Docker - технологію контейнеризації 🐳
Якщо подивитись на вакансії в сфері DevOps, то докер є обов'язковою технологією. Без знання докеру та контейнеризації в цілому взагалі важко уявити як може працювати сучасний ІТ сектор.
🤔 То що таке Docker?
Docker - це платформа для розробки, розгортання та запуску додатків у контейнерах. Контейнери дозволяють упакувати додаток з усіма його залежностями в стандартний, ізольований блок, що забезпечує консистентність середовища незалежно від інфраструктури.
🐳Приклад використання
Уявіть ви написали простий чат-бот для телеграму. Але вам би хотілось запускати його, наприклад, з амазону. Ви копіюєте весь код на EC2 інстанс, пробуєте запустити і... Бачите що треба багато чого довстановити: від кернела пайтону до якихось додаткових модулів, які вже за замовчуванням є на вашій локальній машині, але нема на інстансі. Зрозуміло, що кожен раз, коли треба оновити додаток, встановлювати додатково нові модулі чи оновлювати старі не є хорошою ідеєю, особливо якщо це робиться руками.
Саме для цього і придумали докер з контейнеризацією — всунути додаток в умовний контейнер, який буде запускатись на будь-якому сервері.
💡 Основні переваги:
Портативність: запускайте ваші додатки однаково на будь-якій ОС та інфраструктурі.
Ефективність: швидке розгортання та масштабування, ви можете в подальшому для розширення запускати не один контейнер, а, наприклад, десять таких.
Ізоляція: кожен контейнер має своє ізольоване середовище, а тому якісь неполадки та баги в одному контейнері не призведуть до фейлу інших.
Про те, як детальніше ця технологія працює радимо почитати документацію докеру, ну... Або чекати наступного посту на цю тему😊
☁️Хмарний вітрильник☁️
#AWS
☀️ Розбираємося з видами EBS на AWS ☀️
Коли тільки знайомишся з EC2 інстансами стикаєшся з таким поняттям як EBS і не завжди зрозуміло що воно з себе представляє.
🔍То що ж це таке?
💿 EBS (Elastic Block Store) — це по-суті диск як і у всіх комп'ютерів(в нашому випадку — EC2 інстансів), де можна зберігати свої дані. Серед них ми б хотіли вирізнити ключові типи EBS:
1️⃣ General Purpose SSD (gp2 і gp3): це стандартне універсальне рішення для більшості робочих навантажень. gp3 надає кращу продуктивність та ціну порівняно з gp2.
2️⃣ Provisioned IOPS SSD (io1 та io2): для інтенсивних I/O операцій (операцій запису/зчитування інформації з диску). io2 пропонує кращу довговічність та IOPS на гігабайт даних.
3️⃣ Throughput Optimized HDD (st1): добре підходить для великих, послідовних робочих навантажень читання/запису.
4️⃣ Cold HDD (sc1): економічний варіант для нечастого використовуваних даних.
🔍 Тож як вибрати вірний диск?
gp3: багатоцільові робочі навантаження та бази даних.
io1/io2: високопродуктивні бази даних та транзакційні системи.
st1: для Big Data, Data Warehouses.
sc1: для архівування даних та резервного копіювання.
💡 Порада: завжди враховуйте ваші специфічні потреби у продуктивності та вартості перед вибором типу EBS.
☁️Хмарний вітрильник☁️
🔐Ротація секретів у Terraform
Чи знаєш ти, що у тераформі створені секрети можна автоматично змінювати за заданим часом?
Для цього треба до власного секрету додати наступний блок:
resource "time_rotating" "secrets_rotation" {
rotation_days = 10
}
Це означає, що після 10 днів з моменту деплою тераформ коду, після terraform plan ресурс з таким блоком буде апдейтнутим, наприклад, для секретів у Azure це виглядатиме так:
resource "time_rotating" "password_rotation" {
rotation_days = 10
}
resource "azuread_application_password" "app_password" {
application_object_id = azuread_application.my_application.object_id
rotate_when_changed = {
rotation = time_rotating.password_rotation.id
}
}
☁️Хмарний вітрильник☁️