동적 리소스의 관측성
동적 리소스의 관측성 (Observability of Dynamic Resources)
이 페이지는 DRA(Dynamic Resource Allocation)로 동적으로 할당된 리소스의 상태와 건강 상태를 관측하는 방법을 설명해요.
동적 리소스 관측 방법
동적으로 할당된 리소스의 상태를 확인하는 방법은 다음 중 하나를 사용하면 돼요.
- kubelet 장치 메트릭
- ResourceClaim status
- 장치 건강 모니터링 (Device health monitoring)
kubelet 장치 메트릭
PodResourcesLister kubelet gRPC 서비스는 사용 중인 장치를 모니터링하게 해줘요. DynamicResource 메시지는 장치 이름과 claim 이름 같은 동적 리소스 할당에 특화된 정보를 제공해요.
ResourceClaim 장치 상태 (ResourceClaim device status)
기능 상태: Kubernetes v1.37부터 Stable, 기본 활성화
DRA 드라이버는 ResourceClaim의 status.devices 필드에 각 할당 장치에 대한 드라이버별 장치 상태 데이터를 보고할 수 있어요. 예를 들어 네트워크 인터페이스 장치에 할당된 IP 주소를 나열할 수 있어요. 이 필드를 업데이트하려면 특정 RBAC 권한이 필요해요. 드라이버가 추가하는 정보의 정확성은 드라이버에 달려 있으니, 평가 후 이 필드를 유일한 장치 정보 소스로 신뢰할지 결정해야 해요.
DRAResourceClaimDeviceStatus feature gate를 끄면 status.devices 필드는 ResourceClaim을 저장할 때 자동으로 지워져요.
장치 건강 모니터링 (Device Health Monitoring)
기능 상태: Kubernetes v1.36부터 Beta, 기본 활성화
특수 하드웨어에서 실행되는 stateful 애플리케이션은 장치가 실패하거나 비정상이 되는 시점을 아는 것이 중요해요. 이 기능을 쓰려면 ResourceHealthStatus feature gate가 활성화돼 있어야 하고, DRA 드라이버가 DRAResourceHealth gRPC 서비스를 구현해야 해요.
DRA 드라이버가 할당된 장치가 비정상임을 감지하면 이 상태를 kubelet에 보고하고, 이 건강 정보는 Pod의 status에 직접 노출돼요. kubelet은 각 컨테이너의 allocatedResourcesStatus 필드에 그 컨테이너에 할당된 각 장치의 건강 상태를 채워요. 각 항목은 선택적인 message 필드를 포함할 수 있어요.
kubelet이 시간 초과 내에 DRA 드라이버로부터 건강 업데이트를 받지 못하면 장치 건강은 "Unknown"으로 표시돼요. 드라이버는 DeviceHealth gRPC 메시지의 health_check_timeout_seconds 필드로 시간 초과를 장치별로 설정할 수 있고, 지정하지 않으면 기본 30초를 사용해요.
주의: Pod가 종료된 후(Failed 상태 등)에는 Pod status에서 장치 건강 상태가 업데이트되지 않아요.
리소스 풀 상태 (Resource pool status)
기능 상태: Kubernetes v1.36부터 Alpha, 기본 비활성화
ResourcePoolStatusRequest API로 리소스 풀의 장치 가용성을 조회할 수 있어요. 클러스터의 DRA 리소스 풀에서 얼마나 많은 장치가 사용 가능/할당됨/사용 불가능인지 보여줘요.
apiVersion: resource.k8s.io/v1alpha3
kind: ResourcePoolStatusRequest
metadata:
name: check-gpus
spec:
driver: example.com/gpu
kubectl wait --for=condition=Complete resourcepoolstatusrequest/check-gpus --timeout=30s
kubectl get resourcepoolstatusrequest/check-gpus -o yaml
kubectl delete resourcepoolstatusrequest/check-gpus
status에는 poolCount, pools(각각 driver/poolName, generation, resourceSliceCount, totalDevices, allocatedDevices, availableDevices, unavailableDevices, nodeName 등을 포함), conditions(Complete/Failed)가 포함돼요. 이 기능은 DRAResourcePoolStatus feature gate로 제어되며, ResourcePoolStatusRequest 리소스에 대한 명시적 RBAC 권한이 필요해요(기본 ClusterRole에는 없음).
파티션 요약 (Partition summary)
기능 상태: Kubernetes v1.37부터 Alpha, 기본 비활성화
GPU 같은 단일 물리 장치가 여러 파티션 유형(예: 전체 GPU와 절반 크기 MIG 슬라이스)으로 광고될 수 있어요. 이런 파티션들은 같은 기반 용량을 공유하므로 단순 장치 개수로는 각 유형을 얼마나 더 할당할 수 있는지 알 수 없어요. 파티셔너블 풀의 경우 partitionSummary 뷰가 이 질문에 답해요. 각 파티션 유형에 대해 attribute, type, total, allocatable을 보고해요.
장치 메타데이터
DRA는 컨테이너가 장치의 속성과 네트워크 데이터를 읽을 수 있도록 DeviceMetadata 스트림을 제공해요. 즉시(immediate) 메타데이터는 드라이버가 claim 준비 중 제공하고, 지연(deferred) 메타데이터는 드라이버가 나중에 UpdateRequestMetadata로 원자적으로 교체하고 generation을 증가시켜요. 메타데이터는 consuming 컨테이너 수명 동안 사용 가능하며, claim이 unprepared 된 후에는 제거돼요.