iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Cloud Native

K8s上的機器人沙盒系列 第 11

Day 11|Sidecar 模式:把 Selkies 掛到目標 App 旁

  • 分享至 

  • xImage
  •  

承接 Day 10(Helm 部署 Selkies + gl 樣板驗證),今天進一步學習 Sidecar 模式:把 Selkies Sidecar 容器直接掛到目標應用(Isaac Sim/Isaac Lab)旁邊,讓它們共享 Pod lifecycle 與資源,並透過共享 Volume 與 Probe 達成穩定的串流服務。

A. 為什麼要用 Sidecar?

  • 同生共死:應用容器與 Selkies Sidecar 在同一個 Pod → 一起被排程、一起啟停。
  • 共享資源:可透過 EmptyDir 或 PVC 共享 socket、config、log。
  • 減少網路 hops:Sidecar 與主應用走 localhost → 延遲更低。
  • 一致入口:使用者連線永遠透過 Selkies,隱藏後端差異。

B. 基本架構(Pod 範例)

以下以 Isaac Sim headless 容器 + Selkies sidecar 為例:

apiVersion: v1
kind: Pod
metadata:
  name: isaac-selkies-demo
  namespace: robotics
  labels:
    app: isaac-selkies-demo
spec:
  restartPolicy: Never
  containers:
  - name: isaac-sim
    image: nvcr.io/nvidia/isaac-sim:2023.1.1
    command: ["bash","-lc","./runheadless.sh"]
    resources:
      limits:
        nvidia.com/gpu: 1
    volumeMounts:
    - name: shared
      mountPath: /shared

  - name: selkies-sidecar
    image: gcr.io/selkies-public/selkies-sidecar:latest
    env:
    - name: DISPLAY
      value: ":0"
    - name: TURN_REST_URL
      value: "https://turn.example.com/turn-cred"
    - name: TARGET_APP
      value: "isaac-sim"
    ports:
    - containerPort: 8080   # Signaling / WebRTC 控制
    volumeMounts:
    - name: shared
      mountPath: /shared
  
  volumes:
  - name: shared
    emptyDir: {}
  • Volume:EmptyDir /shared,可用來交換狀態或檔案。
  • GPU:只分配給 Isaac 容器,Sidecar 僅用 CPU 編碼控制流(或可設定 NVENC 編碼 GPU)。
  • 環境變數:Selkies Sidecar 指向 TURN-REST API。

C. 健康檢查與 Probe

建議為 Selkies Sidecar 與 Isaac 容器各自加上 Probe:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 30
  • Isaac 容器可設置一個簡單的 HTTP 健康檢查服務(或用檔案心跳)。
  • Probe 失敗 → Pod 自動重啟,確保 Session 穩定。

D. 訊號傳遞與共享卷

  • Session Metadata:可存放在共享卷 /shared,例如 Isaac 的狀態檔、Selkies 的 pipe/socket。
  • Log 收集:兩個容器的 log 可一起導出到 Loki/Promtail。
  • Config 注入:用 ConfigMap/Secret 掛到 /shared/config,雙方讀取同一份設定。

E. 常見問題

  • GPU 沒被分配到 Isaac:檢查 resources.limits;確認 GPU Operator 正常。
  • Sidecar 無法連線 TURN:檢查 TURN_REST_URL 是否正確,防火牆是否開放。
  • Probe 失敗反覆重啟:調整 initialDelaySeconds 與健康檢查路徑。
  • 無法顯示畫面:檢查 Isaac 是否真的有輸出到 DISPLAY;需對接 X11/Vulkan/Offscreen。

感想

ドキュメント多すぎて、読み切れん


上一篇
Day 10|Helm 部署 Selkies --- GL 樣板 App 驗證 GPU/串流
下一篇
Day 12|影像編碼調校:H.264 / VP9 / AV1、NVENC、解析度與 FPS 的平衡
系列文
K8s上的機器人沙盒12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言