我试着在OCI上运行WebRTC(SFU形式)~OKE编

首先

前次提交的webrtc演示是在OCI上的VM实例上构建的。

 

这次我们将使用OKE+Redis来构建WebRTC服务器。

在OKE上构建WebRTC服务器。

在将Livekit运行在Kubernetes上之前,请查阅以下官方网页获取相关信息。

 

livekit_kubernates.jpg

构成图

5.jpg

创建集群

1.jpg
2.jpg
4.jpg

构建Redis

3.jpg

创建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是一个非常吸引人的开源软件,所以我希望能再次发布新的验证结果。

广告
将在 10 秒后关闭
bannerAds