我试着在OCI上运行WebRTC(SFU形式)~OKE编
首先
前次提交的webrtc演示是在OCI上的VM实例上构建的。
这次我们将使用OKE+Redis来构建WebRTC服务器。
在OKE上构建WebRTC服务器。
在将Livekit运行在Kubernetes上之前,请查阅以下官方网页获取相关信息。
构成图
创建集群
构建Redis
创建Docker镜像
创建Dockerfile和config文件。
FROM oraclelinux:8
RUN dnf update -y && \
dnf install -y curl && \
curl -sSL https://get.livekit.io | bash && \
dnf clean all
# ソフトウェアのインストール後に不要なファイルを削除し、イメージのサイズを小さくする
RUN rm -rf /var/cache/dnf
# configファイル(後述)を指定します
COPY config.yaml /home/opc/config.yaml
# Dockerfile内でEXPOSEを使用して、ポートを明示的に公開する
EXPOSE 7880 7881 7882
# CMD命令はDockerがコンテナーを実行するために使用するデフォルトの実行可能ファイルを設定します
# LiveKitサーバを起動します
CMD ["/bin/sh", "-c", "livekit-server --dev --config /home/opc/config.yaml --bind 0.0.0.0"]
port: 7880
log_level: info
rtc:
tcp_port: 7881
port_range_start: 50000
port_range_end: 60000
# use_external_ip should be set to true for most cloud environments where
# the host has a public IP address, but is not exposed to the process.
# LiveKit will attempt to use STUN to discover the true IP, and advertise
# that IP with its clients
use_external_ip: true
redis:
# redis is recommended for production deploys
address: <your_redis_domain>:6379
use_tls: true
keys:
# key value pairs
# your_api_key: <api_secret>
devkey: secret
# when enabled, LiveKit will expose prometheus metrics on :6789/metrics
#prometheus_port: 6789
turn:
enabled: false
# domain must match tls certificate
# defaults to 3478. If not using a load balancer, must be set to 443.
tls_port: 3478
使用docker命令将Docker镜像推送到容器注册表中。
docker image build -t livekit/server:v1.0 .
docker image tag livekit/server:v1.0 <your_ocir_endpoint>/livekit/server:v1.0
docker image push <your_ocir_endpoint>/livekit/server:v1.0
应用pod和service
首先创建deployment.yaml和service.yaml文件。
kind: Deployment
apiVersion: apps/v1
metadata:
name: livekit
spec:
replicas: 2
selector:
matchLabels:
app: livekit
template:
metadata:
labels:
app: livekit
version: v1
spec:
hostNetwork: true
containers:
- name: livekit
image: <your_ocir_endpoint>/livekit/server:v1.0
imagePullPolicy: IfNotPresent
ports:
- name: port-7880
containerPort: 7880
- name: port-7881
containerPort: 7881
env:
- name: REDIS_TLS
value: "true"
kind: Service
apiVersion: v1
metadata:
name: livekit
labels:
app: livekit
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "50"
spec:
type: LoadBalancer
selector:
app: livekit
ports:
- name: app-7880
protocol: TCP
port: 7880
targetPort: 7880
- name: app-7881
protocol: TCP
port: 7881
targetPort: 7881
之后,我将申请。
kubectl apply -f ./deployment.yaml
kubectl apply -f ./service.yaml
一旦到达这里,确认pod正在运行。
如果pod状态为Running,就可以先行确认OK。
masahito_i@codeeditor:work (ap-tokyo-1)$ kubectl get node,pod,svc
NAME STATUS ROLES AGE VERSION
node/10.0.10.3 Ready node 5h7m v1.26.2
node/10.0.10.7 Ready node 5h7m v1.26.2
NAME READY STATUS RESTARTS AGE
pod/livekit-84b748756b-ntgms 1/1 Running 0 4h38m
pod/livekit-84b748756b-tqm9n 1/1 Running 0 4h38m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP,12250/TCP 5h12m
service/livekit LoadBalancer 10.96.53.178 <lb_global_ip> 7880:32414/TCP,7881:30339/TCP 4h37m
动作验证 zuò
我们已经成功搭建了Livekit的WebRTC服务器。
我们将使用之前在上一篇文章中创建的演示应用程序进行功能验证。
请注意,由于只对后端进行了更改,从VM切换到了OKE+Redis,因此演示界面完全没有变化。
为了在一点多节点上运行,我们引入了Redis。在演示运行后,我们可以查看Redis的内容,确认livekit正在进行发布/订阅。
<redis_endpoint>:6379> keys *
1) "rooms"
2) "participant_signal:CO_kNCJVmkgWdE4"
3) "participant_rtc:isvtest|27brjq1fang"
4) "participant_signal:CO_FgATGsY2mvJu"
5) "nodes"
6) "participant_rtc:0NXZ0Z3cpB|vZzczQnYhdGN3cD"
7) "participant_rtc:0NXZ0Z3cpB|10WO0YXNvVmcxA"
8) "participant_rtc:isvtest|774gabt3s6o"
9) "room_node_map"
10) "participant_rtc:isvtest|1reo5v49m5"
11) "participant_rtc:0NXZ0Z3cpB|nZGMyVmZrJzawRD"
12) "participant_rtc:isvtest|4pk2kfer0fg"
13) "participant_rtc:0NXZ0Z3cpB|n5WYmFTcqJnY3ID"
14) "participant_signal:CO_DX5Zef44WYUQ"
15) "participant_signal:CO_Q9qDsYHbKJgG"
最后
我使用了WebRTC的开源软件Livekit在OKE+redis上搭建了多节点服务器。Livekit是一个非常吸引人的开源软件,所以我希望能再次发布新的验证结果。