在 Red Hat OpenShift 叢集中部署應用程式
使用 Red Hat® OpenShift® on IBM Cloud® 叢集,可以使用單一指令從遠端檔案或儲存庫(如 GitHub)部署應用程式。 此外,叢集隨附可用來協助操作叢集的各種內建服務。
將您的應用程式移至 Red Hat OpenShift
若要在 Red Hat OpenShift on IBM Cloud 群集中建立應用程式,您可以使用 Red Hat OpenShift 主控台或 CLI。
在部署應用程式時看到錯誤?Red Hat OpenShift 的預設設定與社群 Kubernetes 不同,例如更嚴格的安全上下文限制。 請詳閱《 您可能需要修改應用程式的常見情境 》,以便您能將其部署至 Red Hat OpenShift 叢集上。
透過主控台部署應用程式
您可以使用開發人員視角,透過 Red Hat OpenShift 主控台中的各種方法建立應用程式。 如需詳細資訊,請參閱 Red Hat OpenShift 文件。
- 從 主控台,選擇您的群集。
- 按一下 Red Hat OpenShift Web 主控台。
- 從視景切換器中,選取 開發人員。 Red Hat OpenShift Web 主控台會切換至「開發人員」視景,且功能表現在提供 + 新增、拓蹼及 建置等項目。
- 點擊「+新增」。
- 在 新增 窗格功能表列中,從下拉清單中選取您要在其中建立應用程式的 專案。
- 按一下您要用來新增應用程式的方法,然後遵循指示。 例如,按一下 從 Git。
透過 CLI 部署應用程式
若要在 Red Hat OpenShift on IBM Cloud 群集中建立應用程式,請使用 oc new-app 指令。 舉例來說,您可能會引用一個公開的 GitHub repo、一個以 .git 結尾的 URL 的公開 GitLab repo,或是其他本機或遠端 repo。 如需更多資訊,請 試用教學 並檢閱
Red Hat OpenShift 文件。
oc new-app --name <app_name> https://github.com/<path_to_app_repo> [--context-dir=<subdirectory>]
new-app指令的作用是什麼?new-app指令從原始碼建立建置配置和應用程式映像檔,建立用於將容器部署到叢集裡 Pod 的部署配置,以及建立用於公開叢集裡應用程式的服務。 如需建置程序及 Git以外其他來源的相關資訊,請參閱 Red Hat OpenShift 文件。
使用標籤將應用程式部署至特定工作者節點
當您部署應用程式時,應用程式 Pod 會任意地部署至叢集裡的各種工作者節點。 有時,您可能希望限制應用程式 Pod 部署到的工作節點。 例如,您可能希望應用程式 Pod 僅部署到特定工作者節點儲存區中的工作者節點,因為這些工作者節點位於裸機機器上。 若要指定應用程式 Pod 必須部署至其中的工作者節點,請將親緣性規則新增至應用程式部署。
開始之前
若要將應用程式部署至特定的工作節點,
-
取得您要將應用程式 Pod 部署至其中的工作者節點儲存區的 ID。
ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID -
列出工作者節點儲存區中的工作者節點,並記下其中一個專用 IP 位址。
ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID -
說明工作者節點。 在標籤輸出中,請注意工作者節點儲存區 ID 標籤
ibm-cloud.kubernetes.io/worker-pool-id。本主題中的步驟使用工作者節點儲存區 ID,僅將應用程式 Pod 部署至該工作者節點儲存區內的工作者節點。 若要使用不同的標籤將應用程式 Pod 部署至特定工作者節點,則就要注意此標籤。 例如,若只要將應用程式 Pod 部署至特定專用 VLAN 上的工作者節點,請使用
privateVLAN=標籤。oc describe node <worker_node_private_IP>輸出範例
NAME: 10.xxx.xx.xxx Roles: <none> Labels: arch=amd64 beta.kubernetes.io/arch=amd64 beta.kubernetes.io/instance-type=b3c.4x16.encrypted beta.kubernetes.io/os=linux failure-domain.beta.kubernetes.io/region=us-south failure-domain.beta.kubernetes.io/zone=dal10 ibm-cloud.kubernetes.io/encrypted-docker-data=true ibm-cloud.kubernetes.io/ha-worker=true ibm-cloud.kubernetes.io/iaas-provider=softlayer ibm-cloud.kubernetes.io/machine-type=b3c.4x16.encrypted ibm-cloud.kubernetes.io/sgx-enabled=false ibm-cloud.kubernetes.io/worker-pool-id=00a11aa1a11aa11a1111a1111aaa11aa-11a11a ibm-cloud.kubernetes.io/worker-version=1.35_1534 kubernetes.io/hostname=10.xxx.xx.xxx privateVLAN=1234567 publicVLAN=7654321 Annotations: node.alpha.kubernetes.io/ttl=0 ... -
在應用程式部署中,針對工作執行池 ID 標籤 新增一則親和性規則。
範例 YAML
apiVersion: apps/v1 kind: Deployment metadata: name: with-node-affinity spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ibm-cloud.kubernetes.io/worker-pool-id operator: In values: - <worker_pool_ID> ...在範例 YAML 的「親和性」區段中,
ibm-cloud.kubernetes.io/worker-pool-id代表key,而<worker_pool_ID>則代表value。 -
套用已更新的部署配置檔。
oc apply -f with-node-affinity.yaml -
驗證應用程式 Pod 已部署至正確的工作者節點。
- 列出叢集裡的 Pod。
oc get pods -o wide ``` 輸出範例 ```sh {: screen} NAME READY STATUS RESTARTS AGE IP NODE cf-py-d7b7d94db-vp8pq 1/1 Running 0 15d 172.30.xxx.xxx 10.176.48.78 ``` 2. 在輸出中,識別應用程式的 Pod。 記下 Pod 所在工作者節點的 **NODE** 專用 IP 位址。 在前一個範例輸出中,應用程式 Pod `cf-py-d7b7d94db-vp8pq` 位於具有 IP 位址 `10.xxx.xx.xxx` 的工作者節點上。 3. 列出您在應用程式部署內所指定工作者節點儲存區中的工作者節點。 ```sh {: pre} ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID ``` 輸出範例 ```sh {: screen} ID Public IP Private IP Machine Type State Status Zone Version kube-dal10-crb20b637238bb471f8b4b8b881bbb4962-w7 169.xx.xxx.xxx 10.176.48.78 b3c.4x16 normal Ready dal10 1.8.6_1504 kube-dal10-crb20b637238bb471f8b4b8b881bbb4962-w8 169.xx.xxx.xxx 10.176.48.83 b3c.4x16 normal Ready dal10 1.8.6_1504 kube-dal12-crb20b637238bb471f8b4b8b881bbb4962-w9 169.xx.xxx.xxx 10.176.48.69 b3c.4x16 normal Ready dal12 1.8.6_1504 ``` 如果您已根據另一個因素建立應用程式親緣性規則,請改為取得該值。 例如,若要驗證應用程式 Pod 是否已部署至特定 VLAN 上的工作節點,請執行 `ibmcloud oc worker get --cluster CLUSTER_NAME_OR_ID --worker WORKER_ID`,以查看該工作節點所處的 VLAN。 {: tip} 4. 在輸出中,驗證具有您在前一個步驟中所識別之專用 IP 位址的工作者節點已部署在此工作者節點儲存區。
在 NVIDIA GPU 伺服器上部署應用程式
如果您具有 GPU 機型,則可以加快運算密集工作負載 (例如 AI、機器學習、推理等) 所需的處理時間。
在下列步驟中,您將學習如何部署需要 GPU 的工作負載。 不過,您也可以部署無需在 GPU 和 CPU 之間處理工作負載的應用程式。
您也可以使用 此 Kubernetes 演示 嘗試數學密集型工作負載,例如 TensorFlow 機器學習框架。
必要條件
開始之前
-
建立使用 GPU 特性的 叢集 或工作者節點儲存區。 請記住,設定裸機機器可能需要多個營業日才能完成。 如需可用特性的清單,請參閱下列鏈結。
-
請確認您已被指派一個 服務存取角色, 該角色會授予相應的「Kubernetes」RBAC 角色,以便您能夠在叢集中管理 Kubernetes 資源。
僅限專用叢集限制: 如果您的叢集沒有公用網路連線功能,則必須容許公用網路連線功能或將映像檔從外部登錄及映像檔串流鏡映至 icr.io。 在下列範例中,GPU 應用程式使用 OLM Marketplace 搭配映像檔串流。 如果您的群集無法存取 NVIDIA 註冊表 ( nvcr.io ),則本範例就無法運作。
您必須使用 NVIDIA GPU 操作員版本 1.3.1 或更新版本。 當您安裝 Node Feature Discovery 操作員時,請選擇與您的 Red Hat OpenShift 集群版本相符的更新通道。 不要透過其他方法安裝操作員,例如 Helm 圖表。
RHEL 9 工作站節點:如果您要在 RHEL 9 工作節點上安裝 NVIDIA GPU 驅動程式,您必須套用變通方案來啟用所有必要的 Extended Update Support (EUS) 套件庫。 NVIDIA GPU Operator 預設無法啟用所有必要的 EUS 儲存庫,這會導致驅動程式安裝失敗。 如需詳細資訊,請參閱 為何我的 NVIDIA GPU 驅動程式在 RHEL 9 工作節點上安裝失敗?
若您在安裝「Node」功能探索操作員或「NVIDIA」GPU 操作員時遇到問題,請聯絡 NVIDIA 技術支援以獲取協助,或在「NVIDIA」GPU 操作員儲存庫中提交問題。
部署工作量
-
建立 YAML 檔案。 在此範例中,
Job的 YAML 檔案透過建立一個短暫存在的 Pod 來管理類似批次的工作負載,該 Pod 會持續執行直至指令完成並成功終止。對於 GPU 工作負載,您必須在工作 YAML 檔案中指定
resources: limits: nvidia.com/gpu欄位。apiVersion: batch/v1 kind: Job metadata: name: nvidia-devicequery labels: name: nvidia-devicequery spec: template: metadata: labels: name: nvidia-devicequery spec: containers: - name: nvidia-devicequery image: nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda11.7.1-ubuntu20.04 imagePullPolicy: IfNotPresent resources: limits: nvidia.com/gpu: 2 restartPolicy: Never了解您的 YAML 組件 元件 說明 meta 資料及標籤名稱 請輸入工作名稱與標籤,並在檔案的元資料以及「 spec template」的元資料中使用相同的名稱。 例如,nvidia-devicequery。containers.image提供容器是其執行中實例的映像檔。 在此範例中,該值設為使用 DockerHub CUDA 裝置查詢映像檔: nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda11.7.1-ubuntu20.04。containers.imagePullPolicy若要僅在工作節點上尚未存在該映像時才拉取新映像,請指定 IfNotPresent``。resources.limits對於 GPU 機器,您必須指定資源限制。 Kubernetes 裝置外掛程式會將預設資源請求設定為符合該限制。
- 您必須將金鑰指定為
nvidia.com/gpu。 - 輸入您要求的 GPU 總數,例如
2。 請注意,容器 Pod 不共用 GPU,且 GPU 不能過度確定。 例如,如果您只有 1 部mg1c.16x128機器,則在該機器中您只有 2 個 GPU,且最多可以指定2。
- 您必須將金鑰指定為
-
套用 YAML 檔案。 例如:
oc apply -f nvidia-devicequery.yaml -
請透過篩選具有「
nvidia-devicequery」標籤的 Pod,來檢查該工作 Pod。 驗證 STATUS 為 Completed。oc get pod -A -l 'name in (nvidia-devicequery)'輸出範例
NAME READY STATUS RESTARTS AGE nvidia-devicequery-ppkd4 0/1 Completed 0 36s -
說明 Pod,以查看 GPU 裝置外掛程式如何排定 Pod。
- 在
Limits及Requests欄位中,查看您所指定的資源限制符合裝置外掛程式自動設定的要求。 - 在事件中,驗證已將 Pod 指派給 GPU 工作者節點。
oc describe pod nvidia-devicequery-ppkd4 ``` 輸出範例 ```sh {: screen} NAME: nvidia-devicequery-ppkd4 Namespace: default ... Limits: nvidia.com/gpu: 1 Requests: nvidia.com/gpu: 1 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 1m default-scheduler Successfully assigned nvidia-devicequery-ppkd4 to 10.xxx.xx.xxx ... ``` - 在
-
若要驗證工作已使用 GPU 來運算其工作負載,您可以檢查日誌。
oc logs nvidia-devicequery-ppkd4輸出範例
/cuda-samples/sample Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "Tesla P100-PCIE-16GB" CUDA Driver Version / Runtime Version 11.4 / 11.7 CUDA Capability Major/Minor version number: 6.0 Total amount of global memory: 16281 MBytes (17071734784 bytes) (056) Multiprocessors, (064) CUDA Cores/MP: 3584 CUDA Cores GPU Max Clock rate: 1329 MHz (1.33 GHz) Memory Clock rate: 715 Mhz Memory Bus Width: 4096-bit L2 Cache Size: 4194304 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total shared memory per multiprocessor: 65536 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Enabled Device supports Unified Addressing (UVA): Yes Device supports Managed Memory: Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 175 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.4, CUDA Runtime Version = 11.7, NumDevs = 1 Result = PASS在此範例中,您看到使用 GPU 來執行工作,因為 GPU 已在工作者節點中排程。 如果限制設為 2,則只會顯示 2 個 GPU。
現在您已部署測試 GPU 工作負載,您可能想要設定叢集以執行依賴於 GPU 處理的工具,例如 IBM Maximo Visual Inspection。
在 Intel AI Accelerator (Gaudi 3) 機器上部署應用程式
此功能僅限白名單帳戶使用。 若要申請存取權限,請參閱 申請存取允許清單上的功能。
完成下列範例,以部署 Intel Gaudi 的 PyTorch 容器影像,該影像可使用 resource.limits 欄位擷取 Gaudi 裝置。 開始之前,請確認您的叢集符合以下要求。
- 4.18 及後續版本
- 僅 VPC 群集
- 僅 RHCOS 工作節點
- Intel Gaudi 基本操作器 v1.20.1 及更新版本
如需更多資訊和範例,請參閱 Habana 文件和 快速入門範例。
- 複製以下工作組態範例,並將其儲存為一個名為
config.yamlapiVersion: batch/v1 kind: Job metadata: name: habanalabs-gaudi-demo spec: template: spec: hostIPC: true restartPolicy: OnFailure containers: - name: habana-ai-base-container image: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest workingDir: /root command: ["hl-smi"] securityContext: capabilities: add: ["SYS_NICE"] resources: limits: habana.ai/gaudi: 8 memory: 409Gi hugepages-2Mi: 9500Mi - 在您的叢集中執行此工作。
oc apply -f config.yaml - 等待 Pod 啟動,然後驗證工作是否完成。
範例oc get po -n defaultNAME READY STATUS RESTARTS AGE habanalabs-gaudi-demo-kmdcp 0/1 Completed 0 2m32s - 描述工作吊艙以獲得更多詳細資訊。
oc describe po habanalabs-gaudi-demo-kmdcpName: habanalabs-gaudi-demo-kmdcp Namespace: default Priority: 0 Service Account: default Node: test-csrq76620trmo9r8j7u0-btsstagevpc-gaudi3s-00013059/10.180.0.83 Start Time: Tue, 27 May 2025 14:41:50 -0400 Labels: batch.kubernetes.io/controller-uid=c3b33c8a-5fef-4312-9d59-c8b13c03313a batch.kubernetes.io/job-name=habanalabs-gaudi-demo controller-uid=c3b33c8a-5fef-4312-9d59-c8b13c03313a job-name=habanalabs-gaudi-demo Annotations: cni.projectcalico.org/containerID: 7c883dfa9c681ee2c4128b1a5412d4dc181842d0de2a4b7b8019eefc06df37ca cni.projectcalico.org/podIP: cni.projectcalico.org/podIPs: Status: Succeeded IP: 172.17.151.97 IPs: IP: 172.17.151.97 Controlled By: Job/habanalabs-gaudi-demo Containers: habana-ai-base-container: Container ID: cri-o://d75288e9b467f3f820e05e770bbc3d9a2b11cbf8155a54a129fc083d5d507571 Image: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest Image ID: vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0@sha256:cd599626a8f4d1c3a7b354ccf4ef73e19196f09030d02261d4900bf3467a964c Port: <none> Host Port: <none> Command: hl-smi State: Terminated Reason: Completed Exit Code: 0 Started: Tue, 27 May 2025 14:41:53 -0400 Finished: Tue, 27 May 2025 14:41:54 -0400 Ready: False Restart Count: 0 Limits: habana.ai/gaudi: 8 hugepages-2Mi: 9500Mi memory: 409Gi Requests: habana.ai/gaudi: 8 hugepages-2Mi: 9500Mi memory: 409Gi Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-8vn42 (ro) Conditions: Type Status PodReadyToStartContainers False Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-8vn42: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true ConfigMapName: openshift-service-ca.crt ConfigMapOptional: <nil> QoS Class: Burstable Node-Selectors: <none> Tolerations: node.kubernetes.io/memory-pressure:NoSchedule op=Exists node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 53s default-scheduler Successfully assigned default/habanalabs-gaudi-demo-kmdcp to test-csrq76620trmo9r8j7u0-btsstagevpc-gaudi3s-00013059 Normal AddedInterface 52s multus Add eth0 [172.17.151.97/32] from k8s-pod-network Normal Pulling 52s kubelet Pulling image "vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest" Normal Pulled 50s kubelet Successfully pulled image "vault.habana.ai/gaudi-docker/1.21.0/ubuntu22.04/habanalabs/pytorch-installer-2.6.0:latest" in 2.146s (2.146s including waiting). Image size: 5188441181 bytes. Normal Created 50s kubelet Created container: habana-ai-base-container Normal Started 50s kubelet Started container habana-ai-base-container - 取得 pod 記錄,查看 Gaudi 裝置的詳細資訊。
輸出範例oc logs habanalabs-gaudi-demo-kmdcp+-----------------------------------------------------------------------------+ | HL-SMI Version: hl-1.21.0-fw-59.2.1.0 | | Driver Version: 1.20.1-366eb9c | | Nic Driver Version: 1.20.1-213b09b | |-------------------------------+----------------------+----------------------+ | AIP Name Persistence-M| Bus-Id Disp.A | Volatile Uncor-Events| | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | AIP-Util Compute M. | |===============================+======================+======================| | 0 HL-325L N/A | 0000:e9:00.0 N/A | 0 | | N/A 36C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 1 HL-325L N/A | 0000:c1:00.0 N/A | 0 | | N/A 37C P0 226W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 2 HL-325L N/A | 0000:b7:00.0 N/A | 0 | | N/A 36C P0 225W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 3 HL-325L N/A | 0000:ad:00.0 N/A | 0 | | N/A 40C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 4 HL-325L N/A | 0000:a3:00.0 N/A | 0 | | N/A 36C P0 228W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 5 HL-325L N/A | 0000:df:00.0 N/A | 0 | | N/A 39C P0 229W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 6 HL-325L N/A | 0000:d5:00.0 N/A | 0 | | N/A 36C P0 231W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | 7 HL-325L N/A | 0000:cb:00.0 N/A | 0 | | N/A 38C P0 227W / 900W | 672MiB / 131072MiB | 0% 0% | |-------------------------------+----------------------+----------------------+ | Compute Processes: AIP Memory | | AIP PID Type Process name Usage | |=============================================================================| | 0 N/A N/A N/A N/A | | 1 N/A N/A N/A N/A | | 2 N/A N/A N/A N/A | | 3 N/A N/A N/A N/A | | 4 N/A N/A N/A N/A | | 5 N/A N/A N/A N/A | | 6 N/A N/A N/A N/A | | 7 N/A N/A N/A N/A | +=============================================================================+
在 AMD MI300x 機器上部署應用程式
Red Hat CoreOS 4.18 以及之後的 VPC
-
要安裝必要的操作員,您必須 允許出站流量到 Red Hat Marketplace 和 OperatorHub。
-
在群集中安裝下列操作員:
-
安裝作業器後請依照 AMD 說明文件 設定驅動程式。 注意:不需要從 allowlist 中移除 in-tree
amdgpu核心模組。
- 複製下列 Pod 設定範例,並將其儲存為一個名為
config.yamlapiVersion: v1 kind: Pod metadata: name: amd-smi spec: containers: - image: docker.io/rocm/rocm-terminal:latest name: amd-smi command: ["/bin/bash"] args: ["-c","amd-smi version && amd-smi monitor -ptum"] resources: limits: amd.com/gpu: 8 requests: amd.com/gpu: 8 restartPolicy: Never - 在您的叢集中部署該 Pod。
oc apply -f config.yaml - 等待 Pod 啟動,然後驗證工作是否完成。
範例oc get po -n defaultNAME READY STATUS RESTARTS AGE amd-smi 0/1 Completed 0 19m - 描述工作吊艙以獲得更多詳細資訊。
oc describe po amd-smiName: amd-smi Namespace: default Priority: 0 Node: test-d18ofps20v1lr6in6ta0-btsstagevpc-gx3d208-00001687/10.240.1.4 Start Time: Mon, 07 Jul 2025 13:32:18 -0500 Labels: <none> Annotations: cni.projectcalico.org/containerID: 5b5d39f8ebe5ea14250af02031084961285f8b210eea14d2c22704784d957de3 cni.projectcalico.org/podIP: cni.projectcalico.org/podIPs: Status: Succeeded IP: 172.17.55.73 IPs: IP: 172.17.55.73 Containers: amd-smi: Container ID: cri-o://3260f5a2788cc189adbe53d3d49c1bdccc7001df27f0c747d6fa86a3068c9eda Image: docker.io/rocm/rocm-terminal:latest Image ID: docker.io/rocm/rocm-terminal@sha256:72b323c5d56c511ea75f7353d0fee04e637390dd4874d414020284627a658014 Port: <none> Host Port: <none> Command: /bin/bash Args: -c amd-smi version && amd-smi monitor -ptum State: Terminated Reason: Completed Exit Code: 0 Started: Mon, 07 Jul 2025 13:32:20 -0500 Finished: Mon, 07 Jul 2025 13:32:20 -0500 Ready: False Restart Count: 0 Limits: amd.com/gpu: 8 Requests: amd.com/gpu: 8 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tshnq (ro) Conditions: Type Status PodReadyToStartContainers False Initialized True Ready False ContainersReady False PodScheduled True Volumes: kube-api-access-tshnq: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true ConfigMapName: openshift-service-ca.crt ConfigMapOptional: <nil> QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 19m default-scheduler Successfully assigned default/amd-smi to test-d18ofps20v1lr6in6ta0-btsstagevpc-gx3d208-00001687 Normal AddedInterface 19m multus Add eth0 [172.17.55.73/32] from k8s-pod-network Normal Pulling 19m kubelet Pulling image "docker.io/rocm/rocm-terminal:latest" Normal Pulled 19m kubelet Successfully pulled image "docker.io/rocm/rocm-terminal:latest" in 782ms (782ms including waiting). Image size: 3016399213 bytes. Normal Created 19m kubelet Created container: amd-smi Normal Started 19m kubelet Started container amd-smi - 取得 pod 日誌以查看 AMD GPU 詳細資訊。
輸出範例oc logs amd-smiAMDSMI Tool: 25.3.0+ede62f2 | AMDSMI Library version: 25.3.0 | ROCm version: 6.4.0 | amdgpu version: 6.10.5 | amd_hsmp version: N/A WARNING: User is missing the following required groups: render. Please add user to these groups. GPU POWER GPU_T MEM_T GFX_CLK GFX% MEM% MEM_CLOCK 0 141 W 40 °C 36 °C 140 MHz 0 % 0 % 900 MHz 1 144 W 42 °C 33 °C 138 MHz 0 % 0 % 900 MHz 2 140 W 38 °C 34 °C 142 MHz 0 % 0 % 900 MHz 3 142 W 39 °C 34 °C 140 MHz 0 % 0 % 900 MHz 4 140 W 38 °C 35 °C 138 MHz 0 % 0 % 900 MHz 5 142 W 36 °C 30 °C 138 MHz 0 % 0 % 900 MHz 6 137 W 40 °C 35 °C 138 MHz 0 % 0 % 900 MHz 7 137 W 38 °C 32 °C 142 MHz 0 % 0 % 900 MHz