Task Runner

Toolbox Pod 用于在 GitLab 应用程序中执行定期内务管理任务。 这些任务包括备份、Sidekiq 维护和 Rake 任务。

配置

以下配置是 Toolbox chart 提供的默认设置:

gitlab:
  ## doc/charts/gitlab/toolbox
  toolbox:
    enabled: true
    replicas: 1
    backups:
      cron:
        enabled: false
        concurrencyPolicy: Replace
        failedJobsHistoryLimit: 1
        schedule: "0 1 * * *"
        successfulJobsHistoryLimit: 3
        suspend: false
        backoffLimit: 6
        restartPolicy: "OnFailure"
        resources:
          requests:
            cpu: 50m
            memory: 350M
        persistence:
          enabled: false
          accessMode: ReadWriteOnce
          size: 10Gi
      objectStorage:
        backend: s3
        config: {}
    persistence:
      enabled: false
      accessMode: 'ReadWriteOnce'
      size: '10Gi'
    resources:
      requests:
        cpu: '50m'
        memory: '350M'
    securityContext:
      fsGroup: '1000'
      runAsUser: '1000'
参数 说明 默认值
annotations 添加到 Toolbox Pod 和 Jobs 的 annotations {}
common.labels 应用于此 chart 创建的所有对象的补充标签。 {}
antiAffinityLabels.matchLabels 用于设置反亲和选项的标签  
backups.cron.activeDeadlineSeconds 备份 CronJob 活动截止时间秒数(如果为 null,则不应用活动截止时间) null
backups.cron.backoffLimit 备份 CronJob backoff 限制 6
backups.cron.concurrencyPolicy Kubernetes 作业并发策略 Replace
backups.cron.enabled 备份 CronJob 启用标志 false
backups.cron.extraArgs 传递给备份实用程序的参数字符串  
backups.cron.failedJobsHistoryLimit 历史上失败的备份作业列表数 1
backups.cron.persistence.accessMode 备份 cron 持久化访问方式 ReadWriteOnce
backups.cron.persistence.enabled 备份 cron 启用持久化标志 false
backups.cron.persistence.matchExpressions Label-expression 匹配绑定  
backups.cron.persistence.matchLabels Label-value 匹配绑定  
backups.cron.persistence.size 备份 cron 持久卷大小 10Gi
backups.cron.persistence.storageClass 用于配置的 StorageClass 名称  
backups.cron.persistence.subPath 备份 cron 持久卷挂载路径  
backups.cron.persistence.volumeName 现有的持久卷名称  
backups.cron.resources.requests.cpu 备份 cron 最低所需的 CPU 50m
backups.cron.resources.requests.memory 备份 cron 最低所需的内存 350M
backups.cron.restartPolicy 备份 cron 重启策略(NeverOnFailureOnFailure
backups.cron.schedule Cron 样式时间计划字符串 0 1 * * *
backups.cron.startingDeadlineSeconds 备份 cron 作业开始截止时间,以秒为单位(如果为 null,则不应用开始截止时间) null
backups.cron.successfulJobsHistoryLimit 历史上成功备份作业列表的数量 3
backups.cron.suspend 备份 cron 作业已暂停 false
backups.objectStorage.backend 要使用的对象存储提供程序(s3gcss3
backups.objectStorage.config.gcpProject 当后端为 gcs 时使用的 GCP 项目 ””
backups.objectStorage.config.key secret 中包含凭证的键 ””
backups.objectStorage.config.secret 对象存储凭证的secret ””
common.labels 应用于此 chart 创建的所有对象的补充标签。 {}
deployment.strategy 允许配置 deployment 使用的更新策略 { type: Recreate }
enabled 启用 Toolbox 标记 true
extra 额外gitlab.yml配置 的 YAML 块 {}
image.pullPolicy Toolbox 镜像拉取策略 IfNotPresent
image.pullSecrets 拉取 Toolbox 镜像使用的 secrets  
image.repository Toolbox 镜像仓库 registry.jihulab.com/gitlab-cn/build/cng-images/gitlab-toolbox
image.tag Toolbox 镜像标签 master
init.image.repository Toolbox init 镜像仓库  
init.image.tag Toolbox init 镜像标签  
init.resources Toolbox init 容器资源需求 { requests: { cpu: 50m }}
nodeSelector Toolbox 和备份作业的节点选择  
persistence.accessMode Toolbox 持久化访问模式 ReadWriteOnce
persistence.enabled Toolbox 启用持久化标记 false
persistence.matchExpressions Label-expression 匹配绑定  
persistence.matchLabels Label-value 匹配绑定  
persistence.size Toolbox 持久化卷大小 10Gi
persistence.storageClass 配置的 storageClassName  
persistence.subPath Toolbox 持久卷挂载路径  
persistence.volumeName 存在的 PersistentVolume 名称  
podLabels 运行 Task Runner 的 Pods 的标签 {}
replicas Toolbox Pods 的副本数 1
resources.requests Toolbox 的最小请求资源 { cpu: 50m, memory: 350M
securityContext.fsGroup 在其下启动 Pod 的 Group ID 1000
securityContext.runAsUser 在其下启动 Pod 的 User ID 1000
serviceAccount.annotations ServiceAccount 的 annotation {}
serviceAccount.enabled 使用 ServiceAccount 的标记 false
serviceAccount.create 创建 ServiceAccount 的标记 false
serviceAccount.name 使用的 ServiceAccount 的名称  
tolerations 分配给 Pod 的容忍标签  
extraEnvFrom 要暴露的其它数据源的额外环境变量列表  

备份

有关配置备份的信息,参考备份和恢复文档。有关如何执行备份的技术实施的其他信息,请参考备份和恢复架构文档

持久化配置

用于备份和恢复的持久存储是单独配置的。为备份和恢复操作配置 GitLab 时,请查看以下注意事项。

备份使用 backup.cron.persistence.* 属性,恢复使用 persistence.* 属性。有关持久性存储配置的进一步描述将仅使用最终属性键(例如 .enabled.size),并且需要添加适当的前缀。

默认情况下,持久化存储是禁用的,因此需要将 .enabled 设置为 true 以备份或恢复任何大小的内容。 另外,Kubernetes 创建的 PersistentVolume 需要指定.storageClass,或者需要手动创建 PersistentVolume。 如果 .storageClass 被指定为 ‘-‘,那么 PersistentVolume 将使用 Kubernetes 集群中指定的 默认 StorageClass 创建。

如果 PersistentVolume 是手动创建的,那么可以使用 .volumeName 属性或使用选择器 .matchLables / .matchExpressions 属性。

在大多数情况下,.accessMode 的默认值将为只有 Task Runner 访问的 PersistentVolumes 提供足够的控制。请查阅 Kubernetes 集群中安装的 CSI 驱动的文档以确保设置正确。

备份注意事项

备份操作需要一定量的磁盘空间来保存要备份的各个组件,然后再将它们写入备份对象存储。磁盘空间量取决于以下因素:

  • 项目数量和每个项目下存储的数据量
  • PostgresSQL 数据库的大小(议题、MR 等)
  • 每个对象存储后端的大小

一旦确定了粗略大小,就可以设置 backup.cron.persistence.size 属性,以便开始备份。

恢复注意事项

在恢复备份期间,需要先将备份解压到磁盘,然后才能在正在运行的实例上替换文件。这个恢复磁盘空间的大小由 persistence.size 属性控制。 请注意,随着 GitLab 安装实例大小的增加,恢复磁盘空间的大小也需要相应地增加。在大多数情况下,恢复磁盘空间的大小应与备份磁盘空间的大小相同。

Toolbox 包含的工具

Toolbox 容器包含有用的 GitLab 工具,例如 Rails 控制台、Rake 任务等。这些命令允许检查数据库迁移的状态、执行管理任务的 Rake 任务、与 Rails 控制台交互:

# locate the Toolbox pod
kubectl get pods -lapp=toolbox

# Launch a shell inside the pod
kubectl exec -it <Toolbox pod name> -- bash

# open Rails console
gitlab-rails console -e production

# execute a Rake task
gitlab-rake gitlab:env:info