qinglong容器编排:Kubernetes部署与管理

qinglong容器编排:Kubernetes部署与管理

【免费下载链接】qinglong 支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript) 【免费下载链接】qinglong 项目地址: https://gitcode.com/GitHub_Trending/qi/qinglong

概述

青龙(qinglong)是一个支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台,在云原生时代,将其部署到 Kubernetes 集群中可以获得更好的弹性伸缩、高可用性和运维便利性。本文将详细介绍如何在 Kubernetes 环境中部署和管理青龙任务调度平台。

为什么选择 Kubernetes 部署?

传统部署痛点

mermaid

Kubernetes 部署优势

特性传统部署Kubernetes 部署
高可用性单点部署多副本自动调度
弹性伸缩手动调整基于资源自动扩缩
故障恢复人工干预自动重启和迁移
配置管理文件修改ConfigMap/Secret
版本更新停机部署滚动更新
监控日志分散管理集中收集

部署架构设计

系统架构图

mermaid

核心组件说明

  • Deployment: 管理青龙应用的多副本实例
  • Service: 提供稳定的网络访问端点
  • Ingress: 处理外部流量路由
  • PersistentVolume: 数据持久化存储
  • ConfigMap: 应用配置管理
  • Secret: 敏感信息加密存储

详细部署步骤

1. 创建命名空间

apiVersion: v1
kind: Namespace
metadata:
  name: qinglong
  labels:
    name: qinglong
    app: task-scheduler

2. 配置持久化存储

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: qinglong-data-pvc
  namespace: qinglong
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard

3. 创建配置文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: qinglong-config
  namespace: qinglong
data:
  nginx.conf: |
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    events {
        worker_connections 1024;
    }
    
    http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
        
        access_log /var/log/nginx/access.log main;
        
        sendfile on;
        keepalive_timeout 65;
        
        server {
            listen 5700;
            server_name localhost;
            
            location / {
                root /ql/static;
                index index.html index.htm;
                try_files $uri $uri/ /index.html;
            }
            
            location /api/ {
                proxy_pass http://127.0.0.1:5600;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
        }
    }

4. 部署青龙应用

apiVersion: apps/v1
kind: Deployment
metadata:
  name: qinglong
  namespace: qinglong
  labels:
    app: qinglong
spec:
  replicas: 2
  selector:
    matchLabels:
      app: qinglong
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: qinglong
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "5600"
        prometheus.io/path: "/metrics"
    spec:
      containers:
      - name: qinglong
        image: whyour/qinglong:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5700
          name: http
        - containerPort: 5600
          name: api
        env:
        - name: QlBaseUrl
          value: "/"
        - name: TZ
          value: "Asia/Shanghai"
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /api/health
            port: 5600
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /api/health
            port: 5600
          initialDelaySeconds: 5
          periodSeconds: 5
          timeoutSeconds: 3
          failureThreshold: 1
        volumeMounts:
        - name: data
          mountPath: /ql/data
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: qinglong-data-pvc
      - name: nginx-config
        configMap:
          name: qinglong-config
          items:
          - key: nginx.conf
            path: nginx.conf

5. 创建服务

apiVersion: v1
kind: Service
metadata:
  name: qinglong-service
  namespace: qinglong
spec:
  selector:
    app: qinglong
  ports:
  - name: http
    port: 5700
    targetPort: 5700
  - name: api
    port: 5600
    targetPort: 5600
  type: ClusterIP

6. 配置 Ingress 路由

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: qinglong-ingress
  namespace: qinglong
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
  ingressClassName: nginx
  rules:
  - host: qinglong.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: qinglong-service
            port:
              number: 5700

高级配置选项

自定义环境变量

env:
- name: AutoStartBot
  value: "true"
- name: EnableExtraShell
  value: "true"
- name: QlPort
  value: "5700"
- name: ApiPort
  value: "5600"
- name: LogLevel
  value: "info"

资源配额管理

resources:
  requests:
    memory: "1Gi"
    cpu: "500m"
  limits:
    memory: "2Gi"
    cpu: "1000m"

亲和性调度

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - qinglong
        topologyKey: kubernetes.io/hostname

监控与告警配置

Prometheus 监控

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: qinglong-monitor
  namespace: qinglong
  labels:
    app: qinglong
    release: prometheus
spec:
  selector:
    matchLabels:
      app: qinglong
  endpoints:
  - port: api
    path: /metrics
    interval: 30s
    scrapeTimeout: 10s

关键监控指标

指标名称描述告警阈值
qinglong_http_requests_totalHTTP 请求总数> 1000/分钟
qinglong_task_execution_time任务执行时间> 300秒
qinglong_memory_usage内存使用量> 80%
qinglong_cpu_usageCPU 使用率> 70%
qinglong_disk_usage磁盘使用率> 85%

运维管理实践

版本升级策略

mermaid

备份与恢复

# 数据备份
kubectl exec -n qinglong deploy/qinglong -- tar czf - /ql/data > qinglong-backup-$(date +%Y%m%d).tar.gz

# 配置备份
kubectl get configmap qinglong-config -n qinglong -o yaml > config-backup.yaml
kubectl get secret -n qinglong -o yaml > secrets-backup.yaml

# 恢复数据
cat qinglong-backup.tar.gz | kubectl exec -n qinglong -i deploy/qinglong -- tar xzf - -C /

日常运维命令

# 查看部署状态
kubectl get deployment -n qinglong

# 查看Pod状态
kubectl get pods -n qinglong -o wide

# 查看日志
kubectl logs -n qinglong -l app=qinglong --tail=100

# 进入容器调试
kubectl exec -n qinglong -it deploy/qinglong -- bash

# 重启部署
kubectl rollout restart deployment/qinglong -n qinglong

# 查看资源使用
kubectl top pods -n qinglong

故障排查指南

常见问题及解决方案

mermaid

诊断命令集

# 全面诊断
kubectl describe pod -n qinglong <pod-name>
kubectl describe deployment -n qinglong qinglong
kubectl describe service -n qinglong qinglong-service

# 网络诊断
kubectl run network-test -n qinglong --image=busybox --rm -it -- sh
# 在测试容器中执行
wget -qO- http://qinglong-service:5700
nslookup qinglong-service

# 性能分析
kubectl top pods -n qinglong --containers
kubectl exec -n qinglong deploy/qinglong -- free -h
kubectl exec -n qinglong deploy/qinglong -- df -h

最佳实践总结

部署策略建议

  1. 多副本部署: 至少部署2个副本确保高可用性
  2. 资源预留: 合理设置requests和limits避免资源竞争
  3. 持久化存储: 使用PVC确保数据安全
  4. 健康检查: 配置完善的liveness和readiness探针
  5. 监控告警: 建立完整的监控体系

性能优化建议

  • 根据任务负载动态调整副本数量
  • 使用本地SSD存储提升I/O性能
  • 配置适当的JVM参数(如果使用Java任务)
  • 定期清理日志和临时文件
  • 使用CDN加速静态资源访问

安全实践

  • 使用NetworkPolicy限制网络访问
  • 定期更新基础镜像和安全补丁
  • 使用Secret管理敏感配置
  • 配置适当的RBAC权限
  • 启用审计日志记录

通过Kubernetes部署青龙任务调度平台,您可以获得企业级的可靠性、可扩展性和可维护性。本文提供的部署方案和最佳实践将帮助您构建稳定高效的定时任务管理系统。

【免费下载链接】qinglong 支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript) 【免费下载链接】qinglong 项目地址: https://gitcode.com/GitHub_Trending/qi/qinglong

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

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

抵扣说明:

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

余额充值