Модуль 9.4: Патерни об'єктних сховищ (S3 / GCS / Blob)
Складність: [MEDIUM] | Час на виконання: 2 год | Передумови: Модуль 9.1 (Бази даних), основи Kubernetes PersistentVolumes
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У січні 2024 року медіа-компанія зберігала 4.2 петабайта відео у бакетах S3. Їхня система обробки відео працювала на EKS — 60 подів постійно перекодовували файли. Все працювало, але рахунок за S3 складав $127 000 на місяць. Молодший інженер помітив, що до 78% цих даних ніхто не звертався більше трьох місяців. Вони впровадили правила життєвого циклу (Lifecycle policies), перенісши старі відео в архів. Місячні витрати впали до $41 000 — економія у $86 000 на місяць за рахунок зміни 15 рядків конфігурації.
Об’єктні сховища здаються простими: “завантажив файл і все”. Але для Kubernetes-додатків патерни інтеграції набагато глибші. Якщо ви не розумієте різницю між прямим доступом через SDK, монтуванням бакета як диска та підписаними посиланнями — ви або витратите забагато грошей на трафік, або створите діру в безпеці.
Цей модуль навчить вас правильно використовувати S3, GCS та Azure Blob зсередини вашого кластера. Ви дізнаєтеся, як надавати права подам без паролів, як монтувати бакети як файлову систему для старих додатків та як оптимізувати витрати так, щоб ваш бюджет не “танув” щомісяця.
Патерни доступу до сховища
Розділ «Патерни доступу до сховища»Є три основні способи, як поди працюють з об’єктним сховищем:
- SDK/API Access (Найпопулярніший): Ваш код використовує бібліотеку (boto3, google-cloud-storage) для читання та запису файлів через API.
- CSI Driver Mount (Ілюзія диска): Ви монтуєте бакет як звичайну папку (напр.
/mnt/data) всередину контейнера. Додаток думає, що це диск, але “за лаштунками” це S3 або GCS. - Pre-signed URL (Клієнтський доступ): Ваш под генерує тимчасове посилання і віддає його браузеру користувача. Користувач завантажує файл прямо з хмари, не навантажуючи ваш кластер.
Монтування бакетів через CSI Drivers
Розділ «Монтування бакетів через CSI Drivers»Іноді вашому додатку потрібні саме шляхи до файлів, а не виклики API (напр. для навчання моделей ML або роботи legacy-софту).
AWS Mountpoint for S3 та GCS FUSE дозволяють підключити бакет як том. Але будьте обережні: Об’єктне сховище — це не диск.
- Воно не підтримує блокування файлів (locking).
- Воно повільне при випадковому читанні/запису (random I/O).
- Ніколи не використовуйте це для баз даних! Тільки для обробки великих наборів даних або медіафайлів.
Підписані посилання (Pre-Signed URLs)
Розділ «Підписані посилання (Pre-Signed URLs)»Це “кілер-фіча” для безпеки та продуктивності. Замість того, щоб ваш сервер качав файл із S3 і пересилав його клієнту (витрачаючи свій трафік та пам’ять):
- Под генерує криптографічно підписану URL-адресу.
- Ця URL діє, наприклад, лише 15 хвилин.
- Користувач качає файл напряму з мережі Google/Amazon.
Оптимізація витрат (Lifecycle)
Розділ «Оптимізація витрат (Lifecycle)»Об’єктне сховище коштує дешево, якщо даних небагато. Але коли їх петабайти — ціна росте експоненціально.
| Рівень (Tier) | Коли використовувати | Ціна |
|---|---|---|
| Hot / Standard | Активні дані, картинки сайту | Висока |
| Infrequent Access | Бекапи, до яких рідко заглядають | Середня |
| Archive / Glacier | Дані для аудиту (раз на рік) | Дуже низька |
Порада: Завжди налаштовуйте автоматичне видалення незавершених multipart-завантажень. Це “сміття”, яке часто накопичується і за яке ви платите, хоча файлів не бачите.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Монтування для БД | Сплутали об’єктне сховище з диском EBS | Використовуйте EBS або Managed Disks для баз; бакети — тільки для файлів |
| Підписані URL на 30 днів | Скопіювали приклад з інтернету | Ставте мінімально необхідний час (1-4 години) |
| Використання ключів (Access Key) | Простіше прописати в коді | Використовуйте Workload Identity / IRSA; права мають належати ServiceAccount |
| Відсутність Lifecycle правил | ”Потім почистимо” | Налаштуйте автоматичну архівацію з першого дня створення бакета |
Тест
Розділ «Тест»1. Чому не варто використовувати CSI-драйвер бакета для папки з логами бази даних?
Тому що об’єктні сховища не забезпечують атомарності запису та блокування файлів (POSIX compliance). База даних може легко пошкодити власні файли, якщо спробує писати в них через такий “диск”.
2. Як підписані посилання (Pre-signed URLs) допомагають економити гроші?
Вони дозволяють зняти навантаження з вашого кластера. Трафік іде напряму від хмарного сховища до клієнта. Ви не платите за передачу даних “Сховище -> Под” і не витрачаєте CPU/RAM подів на проксіювання великих файлів.
Практична вправа: Робота зі сховищем
Розділ «Практична вправа: Робота зі сховищем»- Створіть бакет у вашій хмарі.
- Налаштуйте IAM-роль для вашого ServiceAccount, щоб він міг тільки писати (PutObject) у цей бакет.
- Напишіть скрипт, який генерує посилання на завантаження файлу терміном на 5 хвилин.
- Налаштуйте Lifecycle Rule, щоб видаляти всі файли з папки
tmp/через 7 днів.
Наступний модуль
Розділ «Наступний модуль»Переходьте до Модуля 9.5: Просунуті сервіси кешування — ви навчитеся інтегрувати Redis та Memcached, розберетеся зі стратегіями кешування та дізнаєтеся, як Envoy може працювати як sidecar-кеш для ваших мікросервісів.