Weylus容器编排:Kubernetes部署与自动扩缩容配置指南

Weylus容器编排:Kubernetes部署与自动扩缩容配置指南

【免费下载链接】Weylus Use your tablet as graphic tablet/touch screen on your computer. 【免费下载链接】Weylus 项目地址: https://gitcode.com/gh_mirrors/we/Weylus

项目概述

Weylus是一款能将平板或智能手机转变为电脑绘图板/触摸屏的工具,支持跨平台使用,在Linux系统上还提供手写笔、多点触控等增强功能。项目核心功能实现位于src/目录,包含输入处理src/input/、视频编码src/video.rs和Web服务src/web.rs等模块。

Weylus工作演示

容器化构建基础

Docker镜像构建

项目提供官方Docker构建方案,Dockerfile位于docker/Dockerfile。构建命令如下:

# 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/we/Weylus
cd Weylus

# 构建Docker镜像
docker build -t weylus:latest -f docker/Dockerfile .

构建过程会自动处理Rust依赖编译、TypeScript前端构建及FFmpeg视频编码库集成,生成包含完整运行环境的镜像。

构建优化选项

  • 使用--features ffmpeg-system特性可切换为系统FFmpeg库,减少镜像体积:
docker build --build-arg FEATURES=ffmpeg-system -t weylus:system-ffmpeg -f docker/Dockerfile .

Kubernetes部署配置

基础Deployment配置

创建weylus-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: weylus
spec:
  replicas: 3
  selector:
    matchLabels:
      app: weylus
  template:
    metadata:
      labels:
        app: weylus
    spec:
      containers:
      - name: weylus
        image: weylus:latest
        ports:
        - containerPort: 1701  # Web服务端口
        - containerPort: 9001  # WebSocket端口
        env:
        - name: WEYLUS_LOG_LEVEL
          value: "INFO"
        - name: WEYLUS_VAAPI_DEVICE
          value: "/dev/dri/renderD128"
        resources:
          requests:
            cpu: 500m
            memory: 256Mi
          limits:
            cpu: 1000m
            memory: 512Mi
        volumeMounts:
        - name: dri
          mountPath: /dev/dri
      volumes:
      - name: dri
        hostPath:
          path: /dev/dri

该配置包含:

  • 3个初始副本保证服务可用性
  • GPU视频加速支持(通过VAAPI设备挂载)
  • 资源限制防止单个Pod过度占用节点资源

服务暴露配置

创建weylus-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: weylus-service
spec:
  selector:
    app: weylus
  ports:
  - name: web
    port: 80
    targetPort: 1701
  - name: websocket
    port: 9001
    targetPort: 9001
  type: LoadBalancer

根据实际环境可选择NodePortIngress方式暴露服务,生产环境建议搭配TLS终止层,参考项目加密指南weylus_tls.sh

自动扩缩容实现

HPA配置

创建weylus-hpa.yaml

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: weylus-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: weylus
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 60
      policies:
      - type: Percent
        value: 50
        periodSeconds: 120
    scaleDown:
      stabilizationWindowSeconds: 300

此配置实现:

  • CPU利用率70%或内存利用率80%时触发扩容
  • 最大10副本、最小2副本的弹性范围
  • 扩容冷却60秒,缩容冷却300秒防止抖动

高级扩缩容策略

对于多节点集群,可结合节点亲和性与Pod拓扑分布约束:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: feature.node.kubernetes.io/gpu
          operator: Exists
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - weylus
        topologyKey: kubernetes.io/hostname

确保Weylus Pod均匀分布在不同GPU节点,提高服务可用性。

监控与运维

日志收集配置

通过环境变量启用JSON格式日志:

env:
- name: WEYLUS_LOG_JSON
  value: "true"
- name: WEYLUS_LOG_LEVEL
  value: "DEBUG"

配合ELK或Promtail+Loki stack可实现日志集中分析,关键日志项包括客户端连接事件、视频编码性能指标及输入设备状态。

健康检查配置

添加存活探针与就绪探针:

livenessProbe:
  httpGet:
    path: /
    port: 1701
  initialDelaySeconds: 30
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /health
    port: 1701
  initialDelaySeconds: 5
  periodSeconds: 5

需在src/web.rs中实现/health端点,返回200 OK状态码表示服务就绪。

部署最佳实践

持久化配置

使用ConfigMap存储Weylus配置:

apiVersion: v1
kind: ConfigMap
metadata:
  name: weylus-config
data:
  access_code: "secure-code-here"
  capture_mode: "window"

通过环境变量或挂载文件方式注入到Pod中,避免配置硬编码。

安全加固

  1. 使用非root用户运行容器,在Dockerfile中添加:
RUN adduser --disabled-password --gecos "" weylus
USER weylus
  1. 启用PodSecurityContext:
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  fsGroup: 1000
  allowPrivilegeEscalation: false
  1. 限制网络策略,仅开放必要端口:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: weylus-policy
spec:
  podSelector:
    matchLabels:
      app: weylus
  policyTypes:
  - Ingress
  ingress:
  - ports:
    - protocol: TCP
      port: 1701
    - protocol: TCP
      port: 9001

故障排查指南

常见问题处理参考官方FAQ(Readme.md#faq):

  1. uinput设备错误:检查容器是否有权限访问/dev/uinput,可通过securityContext添加设备访问权限。

  2. 视频编码性能问题

    • 确认GPU设备挂载正确:ls -l /dev/dri
    • 切换软件编码模式:env: WEYLUS_VIDEO_ENCODER=libx264
  3. WebSocket连接失败:检查网络策略是否放行9001端口,可通过kubectl exec -it <pod> -- netstat -tulpn验证端口监听状态。

项目完整文档参见Readme.md,包含更多关于硬件加速配置、输入设备校准及跨平台兼容性的详细说明。

【免费下载链接】Weylus Use your tablet as graphic tablet/touch screen on your computer. 【免费下载链接】Weylus 项目地址: https://gitcode.com/gh_mirrors/we/Weylus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值