{"version":3,"term":{"cols":80,"rows":24,"type":"xterm-256color"},"timestamp":1789942901,"idle_time_limit":1.0,"command":"DRA_COLOR=1 bash scripts/rehearse-dra-demo.sh","env":{"SHELL":"/usr/bin/zsh"}}
[0.005462,"o","\r\n\r\n=== 1. Visão geral do cluster ===\r\n"]
[0.60269,"o","\r\nComeçamos pelos nós para confirmar onde os drivers e os Pods podem ser executados.\r\n"]
[0.603194,"o","\r\n$ kubectl --context kind-dra-demo get nodes -o wide\r\n"]
[0.073012,"o","NAME                     STATUS   ROLES           AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                       KERNEL-VERSION                  CONTAINER-RUNTIME\r\n"]
[0.000197,"o","dra-demo-control-plane   Ready    control-plane   13m   v1.37.0   \u001b[1;31m172.18.0.4\u001b[0m    <none>        Debian GNU/Linux 13 (trixie)   7.2.5-200.fc44.x86_64 (amd64)   containerd://2.3.4\r\n"]
[8e-06,"o","dra-demo-worker          Ready    <none>          13m   v1.37.0   \u001b[1;31m172.18.0.5\u001b[0m    <none>        Debian GNU/Linux 13 (trixie)   7.2.5-200.fc44.x86_64 (amd64)   containerd://2.3.4\r\n"]
[4.2e-05,"o","dra-demo-worker2         Ready    <none>          13m   v1.37.0   \u001b[1;31m172.18.0.2\u001b[0m    <none>        Debian GNU/Linux 13 (trixie)   7.2.5-200.fc44.x86_64 (amd64)   containerd://2.3.4\r\n"]
[0.610241,"o","\r\n\r\n=== 2. Drivers DRA em execução ===\r\n"]
[0.603237,"o","\r\nOs DaemonSets publicam a GPU mock e os devices de rede; ambos são somente consultados aqui.\r\n"]
[0.603335,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo get daemonset,pods\r\n"]
[0.076832,"o","NAME                                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE\r\n"]
[9.1e-05,"o","daemonset.apps/dra-example-\u001b[1;31mdriver\u001b[0m   2         2         2       2            2           <none>          13m\r\n"]
[0.000594,"o","\r\n"]
[3.5e-05,"o","NAME                           READY   STATUS    RESTARTS   AGE\r\n"]
[4.8e-05,"o","pod/dra-consumer-a             1/1     Running   0          12m\r\n"]
[1.4e-05,"o","pod/dra-consumer-b             1/1     Running   0          12m\r\n"]
[5e-05,"o","pod/dra-example-\u001b[1;31mdriver\u001b[0m-n2smv   1/1     Running   0          13m\r\n"]
[2.1e-05,"o","pod/dra-example-\u001b[1;31mdriver\u001b[0m-zlwd4   1/1     Running   0          13m\r\n"]
[0.609557,"o","\r\n$ kubectl --context kind-dra-demo --namespace kube-system get daemonset,pods -l app=dranet\r\n"]
[0.079877,"o","NAME                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE\r\n"]
[4.6e-05,"o","daemonset.apps/dranet   2         2         2       2            2           <none>          12m\r\n"]
[0.000494,"o","\r\n"]
[2e-05,"o","NAME               READY   STATUS    RESTARTS   AGE\r\n"]
[6.6e-05,"o","pod/dranet-n9xbn   1/1     Running   0          12m\r\npod/dranet-nnlmz   1/1     Running   0          12m\r\n"]
[0.610432,"o","\r\n\r\n=== 3. DeviceClass: quais devices podem ser selecionados ===\r\n"]
[0.602934,"o","\r\nEstas classes ligam os claims aos drivers gpu.example.com e dra.net.\r\n"]
[0.602888,"o","\r\n$ kubectl --context kind-dra-demo get deviceclass gpu.example.com dranet.net -o yaml | yq\r\n"]
[0.08,"o","apiVersion: v1\r\nkind: List\r\nitems:\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: DeviceClass\r\n  metadata:\r\n    name: gpu.example.com\r\n  spec:\r\n    selectors:\r\n    - cel:\r\n        expression: device.driver == 'gpu.example.com'\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: DeviceClass\r\n  metadata:\r\n    name: dranet.net\r\n  spec:\r\n    selectors:\r\n    - cel:\r\n        expression: device.driver == 'dra.net'\r\n"]
[0.609762,"o","\r\n\r\n=== 4. ResourceSlices: inventário publicado pelos nós ===\r\n"]
[0.603343,"o","\r\nCada slice mostra os devices disponíveis e em qual nó o scheduler pode encontrá-los.\r\n"]
[0.603566,"o","\r\n$ kubectl --context kind-dra-demo get resourceslices -o yaml | yq\r\n"]
[0.08,"o","apiVersion: v1\r\nkind: List\r\nitems:\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceSlice\r\n  spec:\r\n    nodeName: dra-demo-worker\r\n    driver: gpu.example.com\r\n    devices:\r\n    - name: gpu-0\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-1\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-2\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-3\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-4\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-5\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-6\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-7\r\n      capacity: {memory: {value: 80Gi}}\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceSlice\r\n  spec:\r\n    nodeName: dra-demo-worker2\r\n    driver: gpu.example.com\r\n    devices:\r\n    - name: gpu-0\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-1\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-2\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-3\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-4\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-5\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-6\r\n      capacity: {memory: {value: 80Gi}}\r\n    - name: gpu-7\r\n      capacity: {memory: {value: 80Gi}}\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceSlice\r\n  spec:\r\n    nodeName: dra-demo-worker\r\n    driver: dra.net\r\n    devices:\r\n    - name: pci-0000-01-00-0\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceSlice\r\n  spec:\r\n    nodeName: dra-demo-worker2\r\n    driver: dra.net\r\n    devices:\r\n    - name: pci-0000-01-00-0\r\n"]
[0.607016,"o","\r\n\r\n=== 5. ResourceClaimTemplates: o pedido declarado pelo workload ===\r\n"]
[0.603119,"o","\r\nOs templates pedem uma GPU e uma interface específica, incluindo nome e endereço da interface.\r\n"]
[0.602999,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo get resourceclaimtemplates -o yaml | yq\r\n"]
[0.08,"o","apiVersion: v1\r\nkind: List\r\nitems:\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaimTemplate\r\n  spec:\r\n    spec:\r\n      devices:\r\n        requests:\r\n        - exactly:\r\n            deviceClassName: gpu.example.com\r\n            selectors:\r\n            - cel:\r\n                expression: device.capacity['gpu.example.com'].memory.compareTo(quantity('10Gi')) >= 0\r\n          name: gpu\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaimTemplate\r\n  spec:\r\n    spec:\r\n      devices:\r\n        requests:\r\n        - exactly:\r\n            deviceClassName: gpu.example.com\r\n            selectors:\r\n            - cel:\r\n                expression: device.capacity['gpu.example.com'].memory.compareTo(quantity('10Gi')) >= 0\r\n          name: gpu\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaimTemplate\r\n  spec:\r\n    spec:\r\n      devices:\r\n        config:\r\n        - opaque:\r\n            driver: dra.net\r\n            parameters:\r\n              interface:\r\n                name: dranet0\r\n                addresses: [169.254.10.1/30]\r\n        requests:\r\n        - exactly:\r\n            deviceClassName: dranet.net\r\n            selectors:\r\n            - cel:\r\n                expression: device.attributes['dra.net'].ifName == 'dranet-dummy0'\r\n          name: network\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaimTemplate\r\n  spec:\r\n    spec:\r\n      devices:\r\n        config:\r\n        - opaque:\r\n            driver: dra.net\r\n            parameters:\r\n              interface:\r\n                name: dranet0\r\n                addresses: [169.254.10.2/30]\r\n        requests:\r\n        - exactly:\r\n            deviceClassName: dranet.net\r\n            selectors:\r\n            - cel:\r\n                expression: device.attributes['dra.net'].ifName == 'dranet-dummy1'\r\n          name: network\r\n"]
[0.607702,"o","\r\n\r\n=== 6. ResourceClaims: resultado da alocação ===\r\n"]
[0.602932,"o","\r\nProcure status.allocation, que registra o device escolhido, e status.networkData, com a configuração entregue pelo driver.\r\n"]
[0.602857,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo get resourceclaims -o yaml | yq\r\n"]
[0.08,"o","apiVersion: v1\r\nkind: List\r\nitems:\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaim\r\n  status:\r\n    allocation:\r\n      devices:\r\n        results:\r\n        - device: gpu-0\r\n          driver: gpu.example.com\r\n          pool: dra-demo-worker\r\n          request: gpu\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaim\r\n  status:\r\n    allocation:\r\n      devices:\r\n        results:\r\n        - device: dranet-dummy0\r\n          driver: dra.net\r\n          pool: dra-demo-worker\r\n          request: network\r\n    devices:\r\n    - device: dranet-dummy0\r\n      driver: dra.net\r\n      networkData:\r\n        interfaceName: dranet0\r\n        ips: [169.254.10.1/30]\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaim\r\n  status:\r\n    allocation:\r\n      devices:\r\n        results:\r\n        - device: gpu-0\r\n          driver: gpu.example.com\r\n          pool: dra-demo-worker2\r\n          request: gpu\r\n- apiVersion: resource.k8s.io/v1\r\n  kind: ResourceClaim\r\n  status:\r\n    allocation:\r\n      devices:\r\n        results:\r\n        - device: dranet-dummy1\r\n          driver: dra.net\r\n          pool: dra-demo-worker2\r\n          request: network\r\n    devices:\r\n    - device: dranet-dummy1\r\n      driver: dra.net\r\n      networkData:\r\n        interfaceName: dranet0\r\n        ips: [169.254.10.2/30]\r\n"]
[0.607128,"o","\r\n\r\n=== 7. Pods consumidores ===\r\n"]
[0.603301,"o","\r\nAgora conferimos os dois Pods, seus nós e o vínculo com os ResourceClaims.\r\n"]
[0.602774,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo get pods -o wide\r\n"]
[0.041799,"o","NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE               NOMINATED NODE   READINESS GATES\r\n"]
[0.000109,"o","dra-consumer-a             1/1     Running   0          12m   \u001b[1;31m10.244.1.3\u001b[0m   dra-demo-worker    <none>           <none>\r\ndra-consumer-b             1/1     Running   0          12m   \u001b[1;31m10.244.2.3\u001b[0m   dra-demo-worker2   <none>           <none>\r\n"]
[9.3e-05,"o","dra-example-\u001b[1;31mdriver\u001b[0m-n2smv   1/1     Running   0          13m   \u001b[1;31m10.244.2.2\u001b[0m   dra-demo-worker2   <none>           <none>\r\ndra-example-\u001b[1;31mdriver\u001b[0m-zlwd4   1/1     Running   0          13m   \u001b[1;31m10.244.1.2\u001b[0m   dra-demo-worker    <none>           <none>\r\n"]
[0.605965,"o","\r\n\r\n=== 8. Dentro de dra-consumer-a: GPU mock e rede ===\r\n"]
[0.602205,"o","\r\nA variável GPU_DEVICE_* confirma a alocação da GPU; ip addr confirma a interface dranet0 e seu endereço.\r\n"]
[0.602803,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo exec dra-consumer-a -- sh -c env | grep \"^GPU_DEVICE_\" || true; ip addr\r\n"]
[0.118961,"o","\u001b[1;31mGPU_DEVICE_0_TIMESLICE_INTERVAL\u001b[0m=Default\r\n\u001b[1;31mGPU_DEVICE_0\u001b[0m=gpu-0\r\n\u001b[1;31mGPU_DEVICE_GPU_0_RESOURCE_CLAIM\u001b[0m=69242d45-56f9-4534-86af-d158263e89b6\r\n"]
[1.3e-05,"o","\u001b[1;31mGPU_DEVICE_0_SHARING_STRATEGY\u001b[0m=TimeSlicing\r\n"]
[0.001959,"o","1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000\r\n    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\r\n"]
[0.000106,"o","    inet \u001b[1;31m127.0.0.1/8\u001b[0m scope host lo\r\n       valid_lft forever preferred_lft forever\r\n    inet6 ::1/128 scope host \r\n"]
[5e-06,"o","       valid_lft forever preferred_lft forever\r\n2: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue qlen 1000\r\n"]
[2e-05,"o","    link/ether 56:0c:bc:c2:43:3a brd ff:ff:ff:ff:ff:ff\r\n"]
[5.8e-05,"o","    inet \u001b[1;31m10.244.1.3/24\u001b[0m brd \u001b[1;31m10.244.1.255\u001b[0m scope global eth0\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::540c:bcff:fec2:433a/64 scope link \r\n"]
[1.4e-05,"o","       valid_lft forever preferred_lft forever\r\n"]
[9.2e-05,"o","4: \u001b[1;31mdranet0\u001b[0m: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue qlen 1000\r\n    link/ether 7a:c5:58:0b:cc:6e brd ff:ff:ff:ff:ff:ff\r\n"]
[6.4e-05,"o","    inet \u001b[1;31m169.254.10.1/30\u001b[0m brd \u001b[1;31m169.254.10.3\u001b[0m scope global \u001b[1;31mdranet0\u001b[0m\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::78c5:58ff:fe0b:cc6e/64 scope link \r\n       valid_lft forever preferred_lft forever\r\n"]
[0.610693,"o","\r\n\r\n=== 8. Dentro de dra-consumer-b: GPU mock e rede ===\r\n"]
[0.602737,"o","\r\nA variável GPU_DEVICE_* confirma a alocação da GPU; ip addr confirma a interface dranet0 e seu endereço.\r\n"]
[0.602939,"o","\r\n$ kubectl --context kind-dra-demo --namespace dra-demo exec dra-consumer-b -- sh -c env | grep \"^GPU_DEVICE_\" || true; ip addr\r\n"]
[0.117643,"o","\u001b[1;31mGPU_DEVICE_0_TIMESLICE_INTERVAL\u001b[0m=Default\r\n\u001b[1;31mGPU_DEVICE_0\u001b[0m=gpu-0\r\n\u001b[1;31mGPU_DEVICE_GPU_0_RESOURCE_CLAIM\u001b[0m=ac555a0d-eb46-4cad-81bd-e49d225edbac\r\n"]
[1.5e-05,"o","\u001b[1;31mGPU_DEVICE_0_SHARING_STRATEGY\u001b[0m=TimeSlicing\r\n"]
[0.001439,"o","1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000\r\n    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\r\n"]
[0.000103,"o","    inet \u001b[1;31m127.0.0.1/8\u001b[0m scope host lo\r\n       valid_lft forever preferred_lft forever\r\n    inet6 ::1/128 scope host \r\n       valid_lft forever preferred_lft forever\r\n"]
[7e-06,"o","2: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue qlen 1000\r\n"]
[3e-06,"o","    link/ether 02:71:d6:1b:59:c2 brd ff:ff:ff:ff:ff:ff\r\n"]
[6.5e-05,"o","    inet \u001b[1;31m10.244.2.3/24\u001b[0m brd \u001b[1;31m10.244.2.255\u001b[0m scope global eth0\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::71:d6ff:fe1b:59c2/64 scope link \r\n       valid_lft forever preferred_lft forever"]
[4e-06,"o","\r\n"]
[0.000126,"o","4: \u001b[1;31mdranet0\u001b[0m: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue qlen 1000\r\n    link/ether 0a:80:75:c3:03:53 brd ff:ff:ff:ff:ff:ff\r\n"]
[5.8e-05,"o","    inet \u001b[1;31m169.254.10.2/30\u001b[0m brd \u001b[1;31m169.254.10.3\u001b[0m scope global \u001b[1;31mdranet0\u001b[0m\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::880:75ff:fec3:353/64 scope link \r\n"]
[5.9e-05,"o","       valid_lft forever preferred_lft forever\r\n"]
[0.612544,"x","0"]
