 Docker 到 Kubernetes 高可用的 3 條路)
MediaMTX 部署完整指南從單機(jī) Docker 到 Kubernetes 高可用的 3 條路【免費(fèi)下載鏈接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/me/mediamtxMediaMTX 是一款支持 SRT、WebRTC、RTSP、RTMP、HLS 等多協(xié)議的實(shí)時(shí)媒體服務(wù)器既能轉(zhuǎn)推直播流也能錄制和回放。按本指南的 MediaMTX Docker 部署路線走一遍先用一條命令在單機(jī)上跑起來(lái)再改掉 mediamtx.yml 里最關(guān)鍵的幾個(gè)開(kāi)關(guān)最后把服務(wù)升級(jí)到 Kubernetes 集群。零基礎(chǔ)也能走完全程。一、先選路線單機(jī)還是集群這一步做完你會(huì)知道自己該用哪種方式部署避免一上來(lái)就堆復(fù)雜度。方案適用場(chǎng)景維護(hù)成本Docker 單機(jī)一臺(tái)機(jī)器、一條或幾條流、先跑通驗(yàn)證業(yè)務(wù)低一條命令起容器Docker Compose單機(jī)上要同時(shí)管 mediamtx 和周邊服務(wù)數(shù)據(jù)庫(kù)、反代等低一個(gè) compose 文件管全部Kubernetes 集群流數(shù)量大、要高可用、需要自動(dòng)擴(kuò)縮容較高要維護(hù)整套資源清單推薦路徑先用 Docker 單機(jī)驗(yàn)證業(yè)務(wù)跑順了再遷到 K8s。兩階段的配置基本通用遷移成本低。二、最快上手一條命令部署 MediaMTX這一步做完你會(huì)得到一個(gè)正在監(jiān)聽(tīng)全部常用端口的 mediamtx 容器并且能用瀏覽器或播放器確認(rèn)它在服務(wù)。docker pull bluenviron/mediamtx docker run -d --name mediamtx --restart unless-stopped \ -p 1935:1935 \ -p 8554:8554 \ -p 8888:8888 \ -p 8889:8889 \ -p 8890:8890 \ -p 9997:9997 \ -p 9998:9998 \ -v $(pwd)/mediamtx.yml:/mediamtx.yml:ro \ -v $(pwd)/recordings:/recordings \ bluenviron/mediamtx各端口對(duì)應(yīng)關(guān)系記一下1935RTMP8554RTSP8888HLS8889WebRTC8890SRT9997控制 API9998Metrics 指標(biāo)配置文件可以不用改倉(cāng)庫(kù)里自帶的 mediamtx.yml 就是完整默認(rèn)配置拷出來(lái)直接掛載即可。跑完執(zhí)行下面這步驗(yàn)證訪問(wèn)http://localhost:9997/v3/info能返回 JSON 說(shuō)明控制 API 活著用 VLC 打開(kāi)rtsp://localhost:8554/你的流名或推一路流到rtmp://localhost:1935/你的流名試讀如果單機(jī)還要帶周邊服務(wù)把上面的docker run換成 Compose 更省事服務(wù)、端口、卷都寫在一個(gè)文件里docker compose up -d即可。三、mediamtx.yml 必動(dòng)的 6 個(gè)配置項(xiàng)這一步做完你會(huì)清楚哪些開(kāi)關(guān)真正影響行為改配置不再靠猜。完整配置不用看新手容易改錯(cuò)的就這 6 處配置項(xiàng)作用建議值logLevel日志詳細(xì)程度error / warn / info / debug生產(chǎn)用info排查問(wèn)題時(shí)臨時(shí)調(diào)debugrtsp、rtmp、hls、webrtc、srt各協(xié)議服務(wù)的總開(kāi)關(guān)用到哪個(gè)開(kāi)哪個(gè)yes不用的關(guān)掉rtspAddress、rtmpAddress、hlsAddress、webrtcAddress、srtAddress各協(xié)議監(jiān)聽(tīng)地址保持默認(rèn)端口即可改端口要同步改客戶端api/metrics控制 API 與指標(biāo)服務(wù)開(kāi)關(guān)都開(kāi)yes后面監(jiān)控探活都要靠它們r(jià)ecord、recordFormat是否錄制及格式fmp4/mp4/mpegts需要留存錄像才開(kāi)格式推薦fmp4recordPath、recordDeleteAfter錄像存放路徑模板與保留時(shí)長(zhǎng)路徑用/recordings/%path/%Y-%m-%d_%H-%M-%S-%f保留期按合規(guī)要求設(shè)如7d錄制相關(guān)配置放在pathDefaults下對(duì)所有路徑生效。只給個(gè)別流單獨(dú)設(shè)置時(shí)才需要在paths里建同名段落覆蓋。四、集群升級(jí)MediaMTX 上 Kubernetes這一步做完你會(huì)拿到一套多副本的部署請(qǐng)求先進(jìn) Service再被分發(fā)到后端任意一個(gè) mediamtx Pod錄像落到共享存儲(chǔ)上。資源按這個(gè)順序kubectl apply依賴才不會(huì)斷kubectl apply -f namespace.yaml kubectl apply -f pvc.yaml kubectl apply -f configmap.yaml kubectl apply -f deployment.yaml kubectl apply -f service.yaml清單本身不復(fù)雜真正要盯住的是這 3 個(gè)點(diǎn)探活liveness 和 readiness 都打控制 API 的/v3/info9997 端口比打媒體端口可靠。示例livenessProbe: httpGet: path: /v3/info port: api initialDelaySeconds: 30 periodSeconds: 10副本數(shù)replicas從 2 起步配RollingUpdate策略保證升級(jí)不中斷。注意 mediamtx 是多播式服務(wù)同一路流的推流端和拉流端可能落在不同 Pod 上客戶端要支持按流名重新路由或改用單推流入口。存儲(chǔ)錄像目錄掛 ReadWriteMany 的 PVC如 nfs 類 storageClass多 Pod 共享寫入recordDeleteAfter負(fù)責(zé)自動(dòng)清理別忘了配。Service 把 1935 / 8554 / 8888 / 8889 / 8890 / 9997 / 9998 逐個(gè)聲明為端口條目即可協(xié)議默認(rèn) TCPWebRTC 還要放通 UDP 范圍SRT 走 8890。五、生產(chǎn)環(huán)境清單集群跑起來(lái)之后把下面 4 項(xiàng)逐項(xiàng)過(guò)一遍每項(xiàng)一兩句話就能落地監(jiān)控Prometheus 直接抓 9998 端口的/metricsPod 上打prometheus.io/scrape注解或建 ServiceMonitor告警盯連接數(shù)與進(jìn)程存活。自動(dòng)擴(kuò)縮容HPA 指向 deploymentCPU 利用率 70% 左右觸發(fā)擴(kuò)容minReplicas2、maxReplicas按預(yù)算設(shè)。網(wǎng)絡(luò)策略NetworkPolicy 只放行媒體端口的入向流量和 DNS 出向其余全拒縮小暴露面。TLS對(duì)外暴露的 RTSP / SRT / WebRTC 配置各自的 TLS 證書項(xiàng)證書可用 cert-manager 簽發(fā)并自動(dòng)續(xù)期避免手寫證書過(guò)期翻車。更多協(xié)議細(xì)節(jié)SRT 參數(shù)、WebRTC 打洞等建議直接翻倉(cāng)庫(kù)里的 docs/ 目錄按協(xié)議查對(duì)應(yīng)章節(jié)。六、出問(wèn)題先查這里現(xiàn)象常見(jiàn)原因處理動(dòng)作客戶端連接超時(shí)端口沒(méi)映射或被 NetworkPolicy 攔截核對(duì)docker port或 Service 端口條目檢查策略放行推流成功但播放無(wú)畫面客戶端協(xié)議/端口與開(kāi)關(guān)不匹配如用了沒(méi)開(kāi)的協(xié)議對(duì)照mediamtx.yml里各協(xié)議開(kāi)關(guān)和*Address錄像目錄是空的record沒(méi)開(kāi)或錄制路徑不可寫確認(rèn)pathDefaults.record: yes檢查掛載卷權(quán)限Pod 反復(fù)重啟探活路徑寫錯(cuò)或資源不足被 OOM確認(rèn)探活打/v3/info看kubectl describe pod的退出碼日志看不懂日志級(jí)別是 error細(xì)節(jié)沒(méi)打出來(lái)把logLevel臨時(shí)調(diào)到debug復(fù)現(xiàn)后調(diào)回升級(jí)后舊連接全斷滾動(dòng)更新時(shí)客戶端沒(méi)重連客戶端加重連邏輯或降低maxUnavailable到這里單機(jī)到集群的完整鏈路就走完了。下一步可以按這個(gè)順序推進(jìn)給自己的一路真實(shí)業(yè)務(wù)流做 24 小時(shí)錄制壓測(cè)給/metrics配上至少兩條告警進(jìn)程存活、連接數(shù)突增演練一次 PVC 備份與恢復(fù)確認(rèn)真出事時(shí)拿得回錄像【免費(fèi)下載鏈接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/me/mediamtx創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考