Kubernetes v1.33: Бета-версія Image Volumes з підтримкою subPath

У релізі Kubernetes v1.33 Image Volumes, які вперше були представлені як Alpha функція в v1.31 відповідно до KEP-4639, тепер перейшли в стадію Beta. Цей етап забезпечує покращену стабільність, розширене управління subPath та підтримку більшої кількості середовищ виконання, що відкриває нові можливості для використання в продуктивних системах з контейнерним зберіганням.
Статус функції та сумісність із середовищами виконання
Хоча функція має статус Beta, Image Volumes залишаються вимкненими за замовчуванням через ImageVolumes feature gate. Адміністратори повинні явно активувати цю функцію, щоб експериментувати або впроваджувати її в продуктивних кластерах. Станом на сьогодні, сумісність із середовищами виконання виглядає наступним чином:
- CRI-O: Підтримка Alpha з v1.31; повна підтримка Beta з v1.33.
- containerd: Alpha інтеграція в PR #10579, вийшла в v2.1.0. Підтримка Beta розвивається в рамках PR #11578.
- Docker Engine (dockershim): Відмова в Kubernetes; вітаються внески з боку спільноти.
- Інші CRI-сумісні середовища виконання: Адаптація та інтеграція залежать від пріоритетів окремих SIG та постачальників.
Що нового в Beta
Основною новинкою для Beta є підтримка subPath та subPathExpr в Image Volumes. Нові валідації та семантика монтування включають:
- noexecтільки для читання: Image Volumes зберігають незмінність та запобігають виконанню коду з шарів зображення, що відповідає посиленій безпеці контейнерів.
- Сувора санітарія шляхів: Kubernetes та середовища виконання тепер відхиляють абсолютні шляхи або послідовності на кшталт ../, щоб уникнути атак через обходи директорій.
- Зворотний зв’язок про помилки середовища виконання: Якщо цільовий підкаталог не існує, створення контейнера завершується невдачею з чіткими подіями kubeletта статусними повідомленнями поду.
- Послідовні метрики: Три нові лічильники kubeletдозволяють моніторити впровадження та надійність:
- kubelet_image_volume_requested_total
- kubelet_image_volume_mounted_succeed_total
- kubelet_image_volume_mounted_errors_total
Технічні деталі: реалізація subPath
Image Volumes використовують API монтування шарів контейнерного середовища для відкриття певного піддерева файлової системи без повного витягування зображення. Це економить дискові операції вводу/виводу та зменшує затримки при запуску. Коли вказується subPath, Kubernetes викликає операцію Mount середовища виконання з прапором --source-layer, вирізаючи знімок шару через накладні монтування. Прапори монтування noexec,ro вводяться під час монтування kubelet, забезпечуючи незмінність від реєстру зображень до простору імен поду.
Матриця підтримки середовищ виконання
Підтримка Image Volumes відстежується SIG Node та внесками спільноти:
- CRI-O v1.31+: Alpha; v1.33: Beta з розширеннями subPathExpr.
- containerd v2.1.0: Alpha функції доступні вже; v2.2.x включатиме стабільні прапори --subpathта нову архітектуру плагінаImageVolumeManager.
- Сценарії контейнерів Windows: Експериментальний прототип обговорюється, відстежуючи KEP-5099.
Приклад використання
Нижче наведено приклад монтування конкретного каталогу з назвою dir з контейнерного зображення:
apiVersion: v1
kind: Pod
metadata:
  name: image-volume-subpath
spec:
  containers:
  - name: shell
    image: debian:bookworm
    command: ["sleep","infinity"]
    volumeMounts:
    - name: artifact-volume
      mountPath: /mnt/data
      subPath: dir
  volumes:
  - name: artifact-volume
    image:
      reference: quay.io/crio/artifact:v2
      pullPolicy: IfNotPresent
Застосуйте та перевірте:
kubectl apply -f image-volumes-subpath.yaml
kubectl attach -it image-volume-subpath -- /bin/bash
cat /mnt/data/fileПерспективи експертів та найкращі практики
“Image Volumes у стадії Beta є суттєвим кроком до незмінного, контейнерного зберігання,” зазначає Мішель Оу, провідний інженер у провідному постачальнику хмарних послуг. “Рекомендуємо активувати функціональні можливості в кластері стадії, впровадити нові метрики та перевірити відповідність середовища виконання через журнали kubelet.”
Основні рекомендації:
- Активуйте --feature-gates=ImageVolumes=trueлише після оцінки готовності середовища виконання.
- Використовуйте subPathExprдля динамічного монтування, керованого змінними середовища, наприкладsubPathExpr: "${POD_NAME}-logs".
- Моніторте kubelet_image_volume_mounted_errors_total, щоб рано виявити відсутні шляхи у ваших CI/CD процесах.
Плани на майбутнє та додаткова література
Оглядаючись у майбутнє до Kubernetes v1.34 та далі, SIG Node оцінює:
- Підтримку записуваних накладок для розширених робочих процесів створення та налагодження.
- Прямий вибір OCI-шарів через анотації, минаючи повне завантаження зображень.
- Інтеграцію з CSI-драйверами для реплікації зображень між регіонами.
Додаткова література
- Використання Image Volume з Pod
- imageогляд обсягу
- KEP-4639 (відстеження дизайну та реалізації)