Классический паттерн для статичных данных в поде — init-контейнер, который копирует файлы из образа в shared volume перед стартом основного контейнера. Работает, но требует лишнего контейнера, лишней логики копирования и синхронизации версий образа с приложением. Image volumes, стабильные с релиза Kubernetes 1.35, убирают этот слой полностью.
Как это работает
Kubernetes напрямую монтирует содержимое OCI-образа как read-only volume внутри пода, без выполнения самого образа как контейнера.
apiVersion: v1
kind: Pod
metadata:
name: app-with-image-volume
spec:
containers:
- name: app
image: my-app:latest
volumeMounts:
- name: config-data
mountPath: /etc/app-config
volumes:
- name: config-data
image:
reference: registry.example.com/app-config:v3
Образ app-config:v3 не запускается как процесс — его файловая система просто становится содержимым /etc/app-config внутри контейнера app.
Чем это лучше init-контейнера для этой задачи
| Критерий | Init-контейнер | Image volume |
|---|---|---|
| Дополнительный процесс в поде | Да, запускается и завершается | Нет, монтирование без выполнения |
| Логика копирования файлов | Нужен скрипт cp/rsync | Не нужна, файлы уже там |
| Версионирование данных отдельно от приложения | Через отдельный тег образа init-контейнера | Через отдельный тег image volume |
| Подходит для больших read-only датасетов | Не оптимально, лишние ресурсы на копирование | Да, прямое монтирование без дублирования |
Практическое применение
Основной сценарий — конфигурация, ML-модели, статичные датасеты или шаблоны, которые логически отделены от кода приложения, но должны версионироваться и распространяться как OCI-артефакт, а не как часть основного образа. Требует совместимого container runtime — стоит проверить поддержку заранее.
Итоговый чеклист
Image volumes стали стабильными в Kubernetes 1.35 после нескольких релизов в бете, начиная с 1.31.
Основное преимущество — исключение init-контейнера и логики копирования именно для статичных read-only данных.
Требует совместимого container runtime, поддержку стоит проверить до миграции существующих манифестов с init-контейнерами.