LiveKit + Caddy 实现 WebRTC HTTPS 自动化部署
2026/9/19 19:11:56
[root@master ~]# kubectl create deployment webcluster --image myapp:v1 --dry-run=client -o yaml > repset.yml [root@master ~]# vim repset.yml apiVersion: apps/v1 kind: ReplicaSet metadata: labels: app: webcluster name: webcluster spec: replicas: 2 selector: matchLabels: app: webcluster # strategy: {} template: metadata: labels: app: webcluster spec: containers: - image: myapp:v1 name: myapp [root@master ~]# kubectl apply -f repset.yml replicaset.apps/webcluster created #打开一个新的shell [root@master ~]# watch -n 1 kubectl get pods --show-labels [root@master ~]# kubectl scale replicaset webcluster --replicas 4 replicaset.apps/webcluster scaled [root@master ~]# kubectl scale replicaset webcluster --replicas 2 replicaset.apps/webcluster scaled [root@master ~]# kubectl scale replicaset webcluster --replicas 0 replicaset.apps/webcluster scaled [root@master ~]#[root@master controler]# vim repset.yml 。。。。 spec: replicas: 4 。。。。 [root@master controler]# kubectl apply -f repset.yml [root@master ~]# watch -n 1 kubectl get pods --show-labels Every 1.0s: kubectl get pods --show-labels master: Tue Aug 25 22:01:08 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-6m6mg 1/1 Running 0 2m21s app=webcluster webcluster-dvk76 1/1 Running 0 107s app=webcluster webcluster-srchq 1/1 Running 0 2m21s app=webcluster webcluster-x4x6l 1/1 Running 0 107s app=webcluster[root@master ~]# watch -n 1 " kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps" Every 1.0s: kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps master: Tue Aug 25 22:02:18 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-6m6mg 1/1 Running 0 3m31s app=webcluster webcluster-dvk76 1/1 Running 0 2m57s app=webcluster webcluster-srchq 1/1 Running 0 3m31s app=webcluster webcluster-x4x6l 1/1 Running 0 2m57s app=webcluster ==== NAME DESIRED CURRENT READY AGE webcluster 4 4 4 3m31s[root@master ~]# kubectl create deployment webcluster --image myapp:v1 --dry-run=client -o yaml > dep.yml [root@master ~]# vim dep.yml apiVersion: apps/v1 kind: Deployment metadata: labels: app: webcluster name: webcluster spec: minReadySeconds: 5 replicas: 2 selector: matchLabels: app: webcluster # strategy: {} template: metadata: labels: app: webcluster spec: containers: - image: myapp:v1 name: myapp # resources: {} [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster created #监控部分显示效果 Every 1.0s: kubectl get pods --show-labels;echo ====;kubectl get replicasets.apps master: Tue Aug 25 22:04:46 2026 NAME READY STATUS RESTARTS AGE LABELS webcluster-6m6mg 1/1 Running 0 5m59s app=webcluster webcluster-srchq 1/1 Running 0 5m59s app=webcluster ==== NAME DESIRED CURRENT READY AGE webcluster 2 2 2 5m59s [root@master ~]# kubectl expose deployment webcluster --port 80 --target-port 80 Error from server (AlreadyExists): services "webcluster" already exists [root@master ~]# kubectl describe services webcluster Name: webcluster Namespace: default Labels: app=webcluster Annotations: <none> Selector: app=webcluster Type: NodePort IP Family Policy: SingleStack IP Families: IPv4 IP: 10.105.1.164 IPs: 10.105.1.164 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 32416/TCP Endpoints: 10.244.1.20:80,10.244.2.18:80 Session Affinity: None External Traffic Policy: Cluster Internal Traffic Policy: Cluster Events: <none> [root@master ~]# curl 10.105.1.164 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>[root@master ~]# vim dep.yml 。。。。 spec: minReadySeconds: 5 replicas: 2 selector: matchLabels: app: webcluster # strategy: {} template: metadata: labels: app: webcluster spec: containers: - image: myapp:v2 #升级为版本2 name: myapp 。。。。 [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster configured [root@master ~]# curl 10.105.1.164 Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> [root@master ~]# vim dep.yml 。。。。 spec: minReadySeconds: 5 replicas: 2 selector: matchLabels: app: webcluster # strategy: {} template: metadata: labels: app: webcluster spec: containers: - image: myapp:v1 #回滚为版本1 name: myapp 。。。。 [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster configured [root@master ~]# curl 10.105.1.164 Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> [root@master ~]# curl 10.105.1.164 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>[root@master ~]# vim dep.yml spec: minReadySeconds: 5 replicas: 6 #把pod数量设定为6方便观察 selector: [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster configured[root@master ~]# kubectl describe deployments.apps webcluster Name: webcluster Namespace: default CreationTimestamp: Tue, 25 Aug 2026 22:03:30 +0800 Labels: app=webcluster Annotations: deployment.kubernetes.io/revision: 3 Selector: app=webcluster Replicas: 6 desired | 6 updated | 6 total | 6 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 5 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=webcluster Containers: myapp: Image: myapp:v1 Port: <none> Host Port: <none> Environment: <none> Mounts: <none> Volumes: <none> Node-Selectors: <none> Tolerations: <none> Conditions: Type Status Reason ---- ------ ------ Progressing True NewReplicaSetAvailable Available True MinimumReplicasAvailable OldReplicaSets: webcluster-6c8b4bb9d7 (0/0 replicas created) NewReplicaSet: webcluster (6/6 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 8m5s deployment-controller Scaled down replica set webcluster from 4 to 2 Normal ScalingReplicaSet 4m1s deployment-controller Scaled up replica set webcluster-6c8b4bb9d7 from 0 to 1 Normal ScalingReplicaSet 3m56s deployment-controller Scaled down replica set webcluster from 2 to 1 Normal ScalingReplicaSet 3m56s deployment-controller Scaled up replica set webcluster-6c8b4bb9d7 from 1 to 2 Normal ScalingReplicaSet 3m50s deployment-controller Scaled down replica set webcluster from 1 to 0 Normal ScalingReplicaSet 3m27s deployment-controller Scaled up replica set webcluster from 0 to 1 Normal ScalingReplicaSet 3m21s deployment-controller Scaled down replica set webcluster-6c8b4bb9d7 from 2 to 1 Normal ScalingReplicaSet 3m21s deployment-controller Scaled up replica set webcluster from 1 to 2 Normal ScalingReplicaSet 3m15s deployment-controller Scaled down replica set webcluster-6c8b4bb9d7 from 1 to 0 Normal ScalingReplicaSet 64s deployment-controller (combined from similar events): Scaled up replica set webcluster from 2 to 6[root@master ~]# vim dep.yml ,,,,,,, spec: minReadySeconds: 5 replicas: 6 selector: matchLabels: app: webcluster strategy: rollingUpdate: maxSurge: 1 #更新时pod数量最多比期望值多一个 maxUnavailable: 0 #不能使用pod数量比期望值数量多0 template: metadata: labels: app: webcluster spec: containers: - image: myapp:v1 name: myapp [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster configured[root@master ~]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 2 <none> 3 <none> [root@master ~]# kubectl rollout pause deployment webcluster deployment.apps/webcluster paused [root@master ~]# vim dep.yml 。。。 containers: - image: myapp:v2 name: myapp 。。。 [root@master ~]# kubectl apply -f dep.yml deployment.apps/webcluster configured [root@master ~]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 3 <none> 4 <none> [root@master ~]# kubectl rollout resume deployment webcluster deployment.apps/webcluster resumed [root@master ~]# kubectl rollout history deployment webcluster deployment.apps/webcluster REVISION CHANGE-CAUSE 3 <none> 4 <none>[root@master controler]# kubectl create deployment daemonset --image myapp:v1 --dry-run=client -o yaml > daemonset.yml [root@master controler]# vim daemonset.yml apiVersion: apps/v1 kind: DaemonSet metadata: labels: app: daemonset name: daemonset spec: selector: matchLabels: app: daemonset template: metadata: labels: app: daemonset spec: containers: - image: myapp:v1 name: myapp #另外开启一个主机node3,并设定在初始化集群时的所有设定确保所有服务的开启 #在master中重新生成集群主机注册时需要的token [root@master ~]# kubeadm token create --print-join-command kubeadm join 192.168.106.181:6443 --token ozlv7n.5bm7z0b1msapxc3t --discovery-token-ca-cert-hash sha256:9cb037f40d64a5c3c7f6f6019f4a56cf8096f9e28a19fb9d08990d7d11ff9008 [root@master ~]# [root@node3 ~]# kubeadm join 192.168.106.181:6443 --token ozlv7n.5bm7z0b1msapxc3t --discovery-token-ca-cert-hash sha256:9cb037f40d64a5c3c7f6f6019f4a56cf8096f9e28a19fb9d08990d7d11ff9008 --cri-socket unix:///var/run/cri-dockerd.sock #当node3加入集群后会在node3中立即群星指定的pod,其原因是因为运行了daemonset #可以在master中观察pod的状态[root@master ~]# kubectl create job testjob --image busybox job.batch/testjob created [root@master ~]# kubectl create job testjob --image busybox --dry-run=client -o yaml apiVersion: batch/v1 kind: Job metadata: name: testjob spec: template: metadata: {} spec: containers: - image: busybox name: testjob resources: {} restartPolicy: Never status: {} [root@master ~]# kubectl create job testjob --image busybox --dry-run=client -o yaml > testjob.yaml [root@master ~]# vim testjob.yaml apiVersion: batch/v1 kind: Job metadata: name: testjob spec: completions: 6 parallelism: 2 backoffLimit: 4 template: spec: containers: - image: busybox name: testjob command: ["/bin/sh", "-c"] args: - | echo this is testjob message sleep 10 restartPolicy: Never [root@master ~]# kubectl apply -f testjob.yaml job.batch/testjob created [root@master ~]# kubectl logs testjob-v5j94 this is testjob message[root@master ~]# kubectl delete -f testjob.yaml job.batch "testjob" deleted from default namespace [root@master ~]# cp testjob.yaml crontabjob.yml [root@master ~]# vim crontabjob.yml apiVersion: batch/v1 kind: CronJob metadata: name: cronjob spec: schedule: '* * * * *' jobTemplate: spec: template: spec: restartPolicy: Never # 注意 P 是大写 containers: - image: busybox name: cronjob command: ["/bin/sh", "-c"] args: - | echo this is testjob message sleep 10 [root@master ~]# kubectl apply -f crontabjob.yml cronjob.batch/cronjob created