Skip to content

Kubernetes 部署

gocron Helm Chart 会将 gocron 部署为托管的、可横向扩容的应用。Kubernetes Service 自动在所有 Ready 的 Web/API Pod 之间分发流量;基于数据库的 Leader 选举保证任何时刻只有一个 Pod 运行调度器。

前置要求

  • Kubernetes 1.23+
  • Helm 3
  • 已创建的 MySQL 或 PostgreSQL 数据库,以及一个稳定的数据库访问地址

Kubernetes Chart 不支持 SQLite。独立二进制仍然支持 SQLite 和 Web 安装向导。

安装

bash
helm repo add gocron https://gocronx-team.github.io/gocron
helm repo update

建议使用 values 文件,避免数据库密码出现在 Shell 历史记录中:

yaml
# values-gocron.yaml
replicaCount: 2

db:
  engine: postgres
  host: postgresql.database.svc.cluster.local
  port: 5432
  user: gocron
  password: replace-me
  database: gocron

managed:
  authSecret: replace-with-at-least-32-random-characters
  encryptionKey: replace-with-another-32-random-characters
  admin:
    username: admin
    password: replace-with-a-strong-admin-password
    email: admin@example.com
bash
helm install gocron gocron/gocron -f values-gocron.yaml

数据库必须提前创建。首次启动时,各副本通过数据库 advisory lock 协调;一个 Pod 创建表结构和管理员,其他 Pod 等待初始化完成,然后使用同一份配置启动。

Kubernetes 部署不会显示 Web 安装向导。当 Chart 管理运行时 Secret 时,必须显式填写 上面的四项敏感配置,使模板渲染结果稳定,并兼容 KubeVision 这类带预览确认的控制台。 配置的管理员密码保存在 Release Secret 中:

bash
kubectl get secret gocron -o jsonpath='{.data.admin-password}' | base64 -d; echo

使用已有 Secret

生产环境可以预先创建 Secret,避免把凭据写入 Helm values:

yaml
apiVersion: v1
kind: Secret
metadata:
  name: gocron-runtime
type: Opaque
stringData:
  db-password: replace-me
  auth-secret: a-long-random-shared-jwt-secret
  encryption-key: a-long-random-encryption-key
  admin-password: replace-me
yaml
db:
  engine: postgres
  host: postgresql.database.svc.cluster.local
  port: 5432
  user: gocron
  database: gocron

managed:
  existingSecret: gocron-runtime
  admin:
    username: admin
    email: admin@example.com

所有副本必须使用相同的 auth-secretencryption-key。只有目标数据库中不存在用户 时,启动过程才会使用管理员初始化配置。

扩容与负载均衡

可以通过 Helm、kubectl 或 KubeVision 扩容:

bash
kubectl scale deployment gocron --replicas=4

扩容不需要复制配置,也不需要共享 PVC。Service/gocron 会自动将请求分发给 Ready Pod;所有 Pod 使用同一个数据库,只有选举出的 Leader 负责调度任务。

可以启用基于 CPU 的自动扩容:

yaml
autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 6
  targetCPUUtilizationPercentage: 75

Chart 默认启用 PodDisruptionBudget,并配置优先跨节点分散 Pod 的反亲和性。

配置项

参数说明默认值
replicaCount初始 Pod 数量2
db.enginemysqlpostgrespostgres
db.host稳定的数据库访问地址必填
db.port数据库端口5432
db.user数据库用户gocron
db.passwordChart 管理 Secret 时使用的数据库密码必填
db.database已存在的数据库名称gocron
managed.existingSecret已存在的运行时 Secret""
managed.authSecret共享 JWT 密钥,至少 32 个字符未配置 existingSecret 时必填
managed.encryptionKey共享加密密钥,至少 32 个字符未配置 existingSecret 时必填
managed.admin.username初始化管理员admin
managed.admin.password初始化密码,至少 6 个字符未配置 existingSecret 时必填
managed.admin.email初始化管理员邮箱admin@example.com
autoscaling.enabled创建 HPAfalse
podDisruptionBudget.enabled在驱逐期间保护可用性true
service.typeKubernetes Service 类型ClusterIP
ingress.enabled创建 Ingressfalse

升级

Chart 0.2.0

Chart 0.2.0 移除了 Kubernetes SQLite 和应用 PVC。不要直接升级使用 SQLite 的 0.1.x Release;应先将数据导入 MySQL/PostgreSQL,再使用外部数据库参数安装或升级。 在新部署验证完成前保留旧 PVC 备份。

bash
helm upgrade gocron gocron/gocron --reuse-values

升级时使用 --reuse-values 并保持运行时密钥不变。ConfigMap 或 Secret 发生变化时, Deployment checksum 会触发滚动更新。数据库结构升级会在数据库初始化锁内执行一次, 完成后 Pod 才加入服务。

卸载

bash
helm uninstall gocron

Helm 不会删除外部数据库。