Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Kubernetes v137 otslezhivanie vremeni poslednego ispolzovaniya persistentvolumec
Dev48
info@dev48.org+375 29 320-40-96WhatsApp@isky_by

© 2026 · Все права защищены.

Kubernetes v1.37: Отслеживание времени последнего использования PersistentVolumeClaim (бета-версия)

Фото: ivabalk (Pixabay) — https://pixabay.com/photos/fish-beta-aquarium-fighter-8673535/

Источник: Kubernetes•25 сентября 2026 г. в 21:25

Kubernetes v1.37: Отслеживание времени последнего использования PersistentVolumeClaim (бета-версия)

В Kubernete v1.37 функция Per i tentVolumeClaimUnu edSinceTime переведена в статус бета-версии (включена по умолчанию). Благодаря этой функции контроллер защиты Per i tentVolumeClaim (PVC) добавляет условие Unu ed («Не используется») к каждому PVC, позволяя узнать, ссылается ли на него какой-либ…

В Kubernetes v1.37 функция PersistentVolumeClaimUnusedSinceTime переведена на уровень Beta (включена по умолчанию). Благодаря этой функции контроллер защиты PersistentVolumeClaim (PVC) добавляет условие Unused (Не используется) к каждому PVC, сообщая вам, ссылается ли на него какой-либо работающий под в данный момент — без необходимости использования пользовательских инструментов или перекрестных ссылок.

Определение API для условий PVC см. в справочнике по API PersistentVolumeClaim. Читайте далее, чтобы узнать, как работает условие Unused и как его использовать.

Зачем отслеживать использование PVC?

В крупномасштабных кластерах Kubernetes пользователи часто создают PVC, а затем удаляют связанные поды без очистки хранилища, поскольку Kubernetes не удаляет PVC автоматически при удалении их подов (для защиты от случайной потери данных). Со временем такие «осиротевшие» PVC могут накапливаться, незаметно потребляя емкость хранилища и увеличивая затраты на облако.

До появления Kubernetes v1.37 было легко определить неиспользуемый PersistentVolume, но гораздо сложнее выяснить, используется ли PVC в данный момент. Для этого требовалось сопоставлять поды, PersistentVolumes и PVC за потенциально большой промежуток времени. Администраторы часто прибегали к кастомным пайплайнам мониторинга или скриптам, чтобы ответить на кажущийся простым вопрос: «Использует ли что-нибудь этот том на самом деле?»

Функция PersistentVolumeClaimUnusedSinceTime решает эту проблему, делая ответ доступным нативно в статусе PVC. Как только функция включена, каждый PVC получает условие Unused, управляемое контроллером защиты PVC.

Пользовательские сценарии

  • Администратор хранилища: «Я хочу знать, какие PVC в моем кластере не используются ни одним подом, чтобы я мог безопасно идентифицировать осиротевшие тома и запланировать их удаление».
  • DevOps-инженер: «Я хочу получить список PVC, у которых условие Unused установлено в значение True, чтобы автоматизировать очистку в средах разработки».

Как это работает?

Контроллер защиты PVC, который уже отслеживает поды для обеспечения защиты объектов хранилища, находящихся в использовании, теперь также управляет новым условием Unused в PVC.

Условие работает следующим образом:

Несколько деталей, заслуживающих внимания:

  • Завершенные поды не учитываются: Под, который завершил работу (фаза Succeeded или Failed), не приводит к тому, что PVC помечается как используемый. Это означает, что пакетные задания (batch jobs) с параметром restartPolicy: Never не помешают PVC получить статус Unused=True после их завершения.
  • Поды со статусом Pending учитываются: Даже непланируемый под (например, с невыполнимым селектором узла) по-прежнему считается использующим PVC. Намерения использовать том достаточно.
  • Несколько подов: Если несколько подов ссылаются на один и тот же PVC, условие переходит в состояние Unused=True только после удаления или завершения работы *последнего* неподтвержденного пода.

Использование lastTransitionTime для определения момента, когда PVC перешел в режим простоя

Как и любое условие Kubernetes, условие Unused содержит стандартное поле lastTransitionTime. Это означает, что вы получаете полезный бонус бесплатно: когда условие переходит из состояния False в True, lastTransitionTime точно фиксирует, когда PVC перешел в режим простоя. Вы можете использовать эту метку времени, чтобы ответить на такие вопросы, как «как долго этот PVC простаивает?» — например, чтобы найти PVC, которые простаивают более 30 дней (см. пример запроса ниже).

Что изменилось с Alpha до Beta?

В Kubernetes v1.36 эта функция была представлена на этапе Alpha, и для ее использования нужно было явно включать Feature Gate PersistentVolumeClaimUnusedSinceTime. Начиная с версии Beta в v1.37, этот Feature Gate включен по умолчанию, а сама функция имеет полное сквозное (end-to-end) тестовое покрытие.

Как использовать

Поскольку функция находится на стадии Beta и включена по умолчанию в Kubernetes v1.37, условие Unused появится в PVC автоматически. Вот пошаговое руководство, чтобы увидеть его в действии:

  • Создайте PVC:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi

Создайте PVC:

  • Через некоторое время проверьте условия PVC:kubectl get pvc my-data -o jsonpath='{.status.conditions[*]}' | jq . Вы должны увидеть условие Unused со статусом True и причиной NoPodsUsingPVC:{ "lastProbeTime": null, "lastTransitionTime": "2026-09-14T12:03:11Z", "message": "No pods are currently referencing this PVC", "reason": "NoPodsUsingPVC", "status": "True", "type": "Unused" }

Через некоторое время проверьте условия PVC:

Вы должны увидеть условие Unused со статусом True и причиной NoPodsUsingPVC:

  • Создайте под, который использует PVC:apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app image: busybox command: ["sleep", "3600"] volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: my-data

Создайте под, который использует PVC:

  • Снова проверьте условие — теперь оно должно показывать Unused=False:kubectl get pvc my-data -o jsonpath='{.status.conditions[?(@.type=="Unused")].status}' Вывод:False

Снова проверьте условие — теперь оно должно показывать Unused=False:

Вывод:

  • Удалите под и подождите, пока условие снова перейдет в состояние Unused=True:kubectl delete pod my-app kubectl get pvc my-data -o jsonpath='{.status.conditions[?(@.type=="Unused")]}' Условие должно снова показывать Unused=True с причиной NoPodsUsingPVC.

Удалите под и подождите, пока условие снова перейдет в состояние Unused=True:

Условие должно снова показывать Unused=True с причиной NoPodsUsingPVC.

Поиск неиспользуемых PVC по всему кластеру

Чтобы получить список всех PVC, которые не использовались более 30 дней, вы можете использовать следующую команду:

Примечание:

В этой команде используется jq, процессор командной строки JSON.

Что дальше?

В зависимости от отзывов и уровня внедрения проект Kubernetes планирует перевести эту функцию в статус General Availability (GA) в одном из будущих релизов. Если у вас есть отзывы об этой функции, пожалуйста, откройте тикет в репозитории kubernetes/kubernetes.

Чтобы узнать больше об этом улучшении, обратитесь к KEP-5541: PersistentVolumeClaim last used time.

Участие в разработке

Проект Kubernetes всегда приветствует новых контрибьюторов. Если вы хотите принять участие, присоединяйтесь к нам в SIG Storage.

Если вы хотите поделиться отзывом, вы можете сделать это на нашем общедоступном канале Slack (посетите https://slack.k8s.io/, чтобы получить приглашение, если оно вам нужно).

Особая благодарность контрибьюторам, которые помогли разработать и внедрить эту функцию (в алфавитном порядке):

  • Arvind Parekh (ArvindParekh)
  • Hemant Kumar (gnufied)
  • Jan Šafránek (jsafrane)
  • Kevin Hannon (kannon92)
  • Roman Bednář (RomanBednar)
← Все статьи

О чём эта статья