Доступ до метаданих пристроїв DRA
Kubernetes v1.36 [alpha]Ця сторінка показує, як отримати доступ до метаданих пристроїв з контейнерів, які використовують динамічний розподіл ресурсів (DRA). Метадані пристроїв дозволяють робочим навантаженням дізнаватися інформацію про виділені пристрої, такі як атрибути пристроїв або деталі мережевого інтерфейсу, шляхом читання JSON-файлів за відомими шляхами всередині контейнера.
Перед тим як ознайомитися з цією сторінкою, перегляньте інформацію про Динамічний розподіл ресурсів (DRA) та про те, як виділяти пристрої для робочих навантажень.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Версія вашого Kubernetes сервера має бути v1.36.Для перевірки версії введіть kubectl version.
- Переконайтесь, що адміністратор вашого кластера налаштував DRA, підключив пристрої та встановив драйвери. Для отримання додаткової інформації дивіться Налаштування DRA в кластері.
- Переконайтесь, що драйвер DRA, розгорнутий у вашому кластері, підтримує метадані пристроїв. Драйвери, які використовують втулок kubelet DRA, активують параметри
EnableDeviceMetadataтаMetadataVersionsпід час запуску втулка. Перевірте документацію драйвера для отримання деталей.
Доступ до метаданих ресурсів за допомогою ResourceClaim
Коли ви використовуєте безпосередньо вказаний ResourceClaim для виділення пристроїв, файли метаданих пристроїв зʼявляються всередині контейнера за адресою:
/var/run/kubernetes.io/dra-device-attributes/resourceclaims/<claimName>/<requestName>/<driverName>-metadata.json
Перегляньте наступний приклад маніфесту:
apiVersion: resource.k8s.io/v1 kind: ResourceClaim metadata: name: gpu-claim spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.example.com --- apiVersion: v1 kind: Pod metadata: name: gpu-metadata-reader spec: resourceClaims: - name: my-gpu resourceClaimName: gpu-claim containers: - name: workload image: ubuntu:24.04 resources: claims: - name: my-gpu request: gpu command: - sh - -c - | echo "=== DRA device metadata ===" find /var/run/kubernetes.io/dra-device-attributes -name '*-metadata.json' -print -exec cat {} \; sleep 3600 restartPolicy: NeverЦей маніфест створює ResourceClaim з назвою
gpu-claim, який запитує пристрій з DeviceClassgpu.example.com, та Pod, який читає метадані пристрою.Створіть ResourceClaim та Pod:
kubectl apply -f https://k8s.io/examples/dra/dra-device-metadata-pod.yamlПісля запуску Podʼа перегляньте журнали контейнера, щоб побачити метадані:
kubectl logs gpu-metadata-readerВивід буде схожий на:
=== DRA device metadata === /var/run/kubernetes.io/dra-device-attributes/resourceclaims/gpu-claim/gpu/gpu.example.com-metadata.json { "kind": "DeviceMetadata", "apiVersion": "metadata.resource.k8s.io/v1alpha1", ... }Щоб переглянути повний файл метаданих, виконайте команду
execу контейнері:kubectl exec gpu-metadata-reader -- \ cat /var/run/kubernetes.io/dra-device-attributes/resourceclaims/gpu-claim/gpu/gpu.example.com-metadata.jsonВивід буде JSON-обʼєктом, що містить атрибути пристрою, такі як модель, версія драйвера та UUID пристрою. Дивіться схему метаданих для деталей структури JSON.
Доступ до метаданих ресурсів за допомогою ResourceClaimTemplate
Коли ви використовуєте ResourceClaimTemplate, Kubernetes генерує ResourceClaim для кожного Podʼа. Оскільки згенерована назва заявки непередбачувана, файли метаданих зʼявляються за шляхом, який використовує імʼя посилання на заявку Podʼа:
/var/run/kubernetes.io/dra-device-attributes/resourceclaimtemplates/<podClaimName>/<requestName>/<driverName>-metadata.json
Поле <podClaimName> відповідає полю name у записі spec.resourceClaims[] Podʼа. JSON-метадані також включають поле podClaimName, яке фіксує це зіставлення.
Перегляньте наступний приклад маніфесту:
apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: name: gpu-claim-template spec: spec: devices: requests: - name: gpu exactly: deviceClassName: gpu.example.com --- apiVersion: v1 kind: Pod metadata: name: gpu-metadata-template-reader spec: resourceClaims: - name: my-gpu resourceClaimTemplateName: gpu-claim-template containers: - name: workload image: ubuntu:24.04 resources: claims: - name: my-gpu request: gpu command: - sh - -c - | echo "=== DRA device metadata (from template) ===" find /var/run/kubernetes.io/dra-device-attributes -name '*-metadata.json' -print -exec cat {} \; sleep 3600 restartPolicy: NeverЦей маніфест створює ResourceClaimTemplate та Pod. Кожен Pod отримує власний згенерований ResourceClaim. Шлях до метаданих використовує імʼя посилання на заявку Podʼа
my-gpu.Створіть ResourceClaimTemplate та Pod:
kubectl apply -f https://k8s.io/examples/dra/dra-device-metadata-template-pod.yamlПісля запуску Podʼа перегляньте метадані:
kubectl exec gpu-metadata-template-reader -- \ cat /var/run/kubernetes.io/dra-device-attributes/resourceclaimtemplates/my-gpu/gpu/gpu.example.com-metadata.json
Читання метаданих у вашому застосунку
Go застосунки
Пакунок k8s.io/dynamic-resource-allocation/devicemetadata надає готові функції для читання файлів метаданих. Ці функції автоматично обробляють узгодження версій, декодують потік метаданих і перетворюють його на внутрішні типи, щоб ваш код працював з різними версіями схеми без ручної перевірки версій.
Для безпосередньо вказаної ResourceClaim:
import "k8s.io/dynamic-resource-allocation/devicemetadata"
dm, err := devicemetadata.ReadResourceClaimMetadata("gpu-claim", "gpu")
Для заявки, створеної з шаблону, (використовуючи імʼя посилання на заявку Pod):
dm, err := devicemetadata.ReadResourceClaimTemplateMetadata("my-gpu", "gpu")
Якщо ви знаєте конкретне імʼя драйвера, ви можете прочитати файл метаданих одного драйвера:
dm, err := devicemetadata.ReadResourceClaimMetadataWithDriverName("gpu.example.com", "gpu-claim", "gpu")
Отриманий *metadata.DeviceMetadata містить метадані заявки, запити та атрибути кожного пристрою.
Застосунки іншими мовами можуть безпосередньо читати JSON-файл і перевіряти поле apiVersion, щоб визначити версію схеми перед розбором.
Очищення
Видаліть створені ресурси:
kubectl delete -f https://k8s.io/examples/dra/dra-device-metadata-pod.yaml
kubectl delete -f https://k8s.io/examples/dra/dra-device-metadata-template-pod.yaml
Що далі
- Дізнайтеся більше про метадані пристроїв DRA
- Призначення пристроїв робочим навантаженням за допомогою DRA
- Для отримання додаткової інформації про дизайн див. KEP-5304.