~/guides/kubernetes-1-35-image-volumes-vs-init-containers

YAML

Image Volumes в Kubernetes 1.35: конец init-контейнерам ради статичных данных

Как стабильный в 1.35 тип volume позволяет монтировать OCI-образ напрямую в под, без bootstrap-скриптов и кастомных init-контейнеров.

Классический паттерн для статичных данных в поде — 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-контейнерами.