Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Kubernetes v137 otslezhivanie vremeni poslednego ispolzovaniya persistentvolumec
Dev48

© 2026 · All rights reserved.

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

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

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

Источник: Kubernetes

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

25 сентября 2026 г.

В Kubernetes v1.37 функция PersistentVolumeClaimUnusedSinceTime переведена в статус бета-версии (включена по умолчанию). Благодаря этой функции контроллер защиты 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 дней (см. пример запроса ниже).

Что изменилось при переходе от альфа- к бета-версии?

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

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

Поскольку функция находится в статусе бета-версии и включена по умолчанию в 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) в будущих выпусках. Если у вас есть отзывы об этой функции, пожалуйста, откройте issue в репозитории 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)
← Все статьи

Ещё в разделе «Облака и инфраструктура»

Все →
Новый навык обнаруживает риски ИИ-агентов, устраняет их и доказывает эффективность исправлений
Microsoft

Новый навык обнаруживает риски ИИ-агентов, устраняет их и доказывает эффективность исправлений

Мы создаем Copilot как новую операционную систему для работы, охватывающую любую модель, любой форм-фактор и любую задачу. Сегодня мы объявляем о самом масштабном обновлении Copilot на сегодняшний день, объединяющем четыре компонента [Читать далее]
Microsoft

Мы создаем Copilot как новую операционную систему для работы, охватывающую любую модель, любой форм-фактор и любую задачу. Сегодня мы объявляем о самом масштабном обновлении Copilot на сегодняшний день, объединяющем четыре компонента [Читать далее]

Представляем новый Copilot с функциями Home, Code и Autopilot
Microsoft

Представляем новый Copilot с функциями Home, Code и Autopilot

Microsoft объединяет бизнес-ИИ в единое приложение в стремлении конкурировать с AnthropicПресса
Microsoft

Microsoft объединяет бизнес-ИИ в единое приложение в стремлении конкурировать с Anthropic

Интеллектуальная обработка документов, выходящая за рамки шаблонов: на базе AWS Agentic AI
HCLTech

Интеллектуальная обработка документов, выходящая за рамки шаблонов: на базе AWS Agentic AI

Инженерные услуги в области медицинской полупроводниковой техники
HCLTech

Инженерные услуги в области медицинской полупроводниковой техники

Ещё от Kubernetes

В центре внимания: SIG Apps
Kubernetes

В центре внимания: SIG Apps

Kubernetes v1.37: Укрепление защиты хранилищ контейнеров с помощью параметров bind mount и прав доступа emptyDir
Kubernetes

Kubernetes v1.37: Укрепление защиты хранилищ контейнеров с помощью параметров bind mount и прав доступа emptyDir

Kubernetes v1.37: Менеджеры ресурсов уровня Pod перешли в стадию бета-тестирования
Kubernetes

Kubernetes v1.37: Менеджеры ресурсов уровня Pod перешли в стадию бета-тестирования

API отслеживания измененных блоков (CBT) в Kubernetes — различия в бета-версии
Kubernetes

API отслеживания измененных блоков (CBT) в Kubernetes — различия в бета-версии