使用极狐GitLab-Sidekiq chart
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
sidekiq 子chart 提供了可配置的 Sidekiq 工作进程部署,明确设计用于在多个 Deployment 中提供队列分离,具有单独的可扩展性和配置。
虽然此chart 提供了默认的 pods: 声明,但如果您提供一个空定义,则不会有任何工作进程。
要求
此chart 依赖于对 Redis、PostgreSQL 和 Gitaly 服务的访问,这些服务可以作为完整极狐GitLab chart 的一部分,或者作为可以从部署此chart 的 Kubernetes 集群访问的外部服务提供。
设计选择
此chart 创建多个 Deployment 和相关的 ConfigMap。我们决定使用 ConfigMap 行为而不是使用 environment 属性或为容器的 command 添加额外的参数,以避免关于命令长度的任何顾虑。这个选择导致了大量的 ConfigMap,但提供了关于每个 pod 应该做什么的非常清晰的定义。
配置
sidekiq chart 分为三个部分进行配置:全chart 范围的外部服务,全chart 范围的默认值,和每个 pod 的定义。
安装命令行选项
下表包含所有可能的chart 配置,可以通过使用 --set 标志提供给 helm install 命令:
参数 | 默认值 | 描述 |
---|---|---|
annotations | Pod 注释 | |
podLabels | 补充 Pod 标签。不会用于选择器。 | |
common.labels | 应用于此chart 创建的所有对象的补充标签。 | |
concurrency | 20 | Sidekiq 默认并发 |
deployment.strategy | {} | 允许配置部署使用的更新策略 |
deployment.terminationGracePeriodSeconds | 30 | Pod 优雅终止所需的可选持续时间。 |
enabled | true | Sidekiq 启用标志 |
extraContainers | 多行文字样式字符串,包含要包含的容器列表 | |
extraInitContainers | 要包含的额外初始化容器列表 | |
extraVolumeMounts | 要配置的额外卷挂载的字符串模板 | |
extraVolumes | 要配置的额外卷的字符串模板 | |
extraEnv | 要公开的额外环境变量列表 | |
extraEnvFrom | 要公开的来自其他数据源的额外环境变量列表 | |
gitaly.serviceName | gitaly | Gitaly 服务名称 |
health_checks.port | 3808 | 健康检查服务器端口 |
hpa.behaviour | {scaleDown: {stabilizationWindowSeconds: 300 }} | 行为包含用于向上和向下缩放的规范(需要 autoscaling/v2beta2 或更高版本) |
hpa.customMetrics | [] | 自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率) |
hpa.cpu.targetType | AverageValue | 设置自动缩放 CPU 目标类型,必须为 Utilization 或 AverageValue |
hpa.cpu.targetAverageValue | 350m | 设置自动缩放 CPU 目标值 |
hpa.cpu.targetAverageUtilization | 设置自动缩放 CPU 目标利用率 | |
hpa.memory.targetType | 设置自动缩放内存目标类型,必须为 Utilization 或 AverageValue | |
hpa.memory.targetAverageValue | 设置自动缩放内存目标值 | |
hpa.memory.targetAverageUtilization | 设置自动缩放内存目标利用率 | |
hpa.targetAverageValue | 已弃用 设置自动缩放 CPU 目标值 | |
keda.enabled | false | 使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers |
keda.pollingInterval | 30 | 检查每个触发器的间隔 |
keda.cooldownPeriod | 300 | 在最后一个触发器报告活跃后等待的时间段,然后将资源缩放回 0 |
keda.minReplicaCount | KEDA 将资源缩减到的最小副本数,默认为 minReplicas | |
keda.maxReplicaCount | KEDA 将资源缩放到的最大副本数,默认为 maxReplicas | |
keda.fallback | KEDA 回退配置 | |
keda.hpaName | KEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name} | |
keda.restoreToOriginalReplicaCount | 指定是否应在 ScaledObject 删除后将目标资源缩放回原始副本数 | |
keda.behavior | 向上和向下缩放行为的规范,默认为 hpa.behavior | |
keda.triggers | 激活目标资源缩放的触发器列表,默认为从 hpa.cpu 和 hpa.memory 计算的触发器 | |
minReplicas | 2 | 最小副本数 |
maxReplicas | 10 | 最大副本数 |
maxUnavailable | 1 | 最大不可用 Pod 数量的限制 |
image.pullPolicy | Always | Sidekiq 镜像拉取策略 |
image.pullSecrets | 镜像仓库的密钥 | |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ee | Sidekiq 镜像仓库 |
image.tag | Sidekiq 镜像标签 | |
init.image.repository | initContainer 镜像 | |
init.image.tag | initContainer 镜像标签 | |
init.containerSecurityContext | initContainer 特定的 securityContext | |
init.containerSecurityContext.runAsUser | 1000 | initContainer 特定:容器应以哪个用户 ID 启动 |
init.containerSecurityContext.allowPrivilegeEscalation | false | initContainer 特定:控制进程是否可以获得比其父进程更多的权限 |
init.containerSecurityContext.runAsNonRoot | true | initContainer 特定:控制容器是否以非 root 用户运行 |
init.containerSecurityContext.capabilities.drop | [ "ALL" ] | initContainer 特定:移除容器的 Linux 功能 |
logging.format | json | 设置为 text 以获取非 JSON 日志 |
metrics.enabled | true | 是否应提供用于抓取的指标端点 |
metrics.port | 3807 | 指标端点端口 |
metrics.path | /metrics | 指标端点路径 |
metrics.log_enabled | false | 启用或禁用写入 sidekiq_exporter.log 的指标服务器日志 |
metrics.podMonitor.enabled | false | 是否应创建 PodMonitor 以启用 Prometheus Operator 管理指标抓取 |
metrics.podMonitor.additionalLabels | {} | 要添加到 PodMonitor 的其他标签 |
metrics.podMonitor.endpointConfig | {} | PodMonitor 的其他端点配置 |
metrics.annotations | 已弃用 设置显式指标注释。已由模板内容替代。 | |
metrics.tls.enabled | false | 为 metrics/sidekiq_exporter 端点启用 TLS |
metrics.tls.secretName | {Release.Name}-sidekiq-metrics-tls | metrics/sidekiq_exporter 端点 TLS 证书和密钥的密钥 |
psql.password.key | psql-password | psql 密码在 psql 密钥中的键 |
psql.password.secret | gitlab-postgres | psql 密码密钥 |
psql.port | 设置 PostgreSQL 服务器端口。优先于 global.psql.port | |
redis.serviceName | redis | Redis 服务名称 |
resources.requests.cpu | 900m | Sidekiq 所需的最小 CPU |
resources.requests.memory | 2G | Sidekiq 所需的最小内存 |
resources.limits.memory | Sidekiq 允许的最大内存 | |
timeout | 25 | Sidekiq 作业超时 |
tolerations | [] | Pod 分配的容忍标签 |
memoryKiller.daemonMode | true | 如果为 false,则使用旧版内存杀手模式 |
memoryKiller.maxRss | 2000000 | 延迟关闭触发前的最大 RSS,以千字节为单位 |
memoryKiller.graceTime | 900 | 触发关闭前的等待时间,以秒为单位 |
memoryKiller.shutdownWait | 30 | 触发关闭后现有作业完成的时间,以秒为单位 |
memoryKiller.hardLimitRss | 即时关闭触发前的最大 RSS,以守护进程模式下的千字节为单位 | |
memoryKiller.checkInterval | 3 | 内存检查之间的时间量 |
livenessProbe.initialDelaySeconds | 20 | 启动活跃性探测的延迟 |
livenessProbe.periodSeconds | 60 | 执行活跃性探测的频率 |
livenessProbe.timeoutSeconds | 30 | 活跃性探测的超时时间 |
livenessProbe.successThreshold | 1 | 活跃性探测在失败后被视为成功的最小连续成功次数 |
livenessProbe.failureThreshold | 3 | 活跃性探测在成功后被视为失败的最小连续失败次数 |
readinessProbe.initialDelaySeconds | 0 | 启动准备性探测的延迟 |
readinessProbe.periodSeconds | 10 | 执行准备性探测的频率 |
readinessProbe.timeoutSeconds | 2 | 准备性探测的超时时间 |
readinessProbe.successThreshold | 1 | 准备性探测在失败后被视为成功的最小连续成功次数 |
readinessProbe.failureThreshold | 3 | 准备性探测在成功后被视为失败的最小连续失败次数 |
securityContext.fsGroup | 1000 | Pod 应以哪个群组 ID 启动 |
securityContext.runAsUser | 1000 | Pod 应以哪个用户 ID 启动 |
securityContext.fsGroupChangePolicy | 更改卷的所有权和权限的策略(需要 Kubernetes 1.23) | |
securityContext.seccompProfile.type | RuntimeDefault | 使用的 Seccomp 配置文件 |
containerSecurityContext | 覆盖容器 securityContext | |
containerSecurityContext.runAsUser | 1000 | 允许覆盖容器启动时使用的特定安全上下文 |
containerSecurityContext.allowPrivilegeEscalation | false | 控制容器的进程是否可以获得比其父进程更多的权限 |
containerSecurityContext.runAsNonRoot | true | 控制容器是否以非 root 用户运行 |
containerSecurityContext.capabilities.drop | [ "ALL" ] | 移除 Gitaly 容器的 Linux 能力 |
serviceAccount.annotations | {} | ServiceAccount 注释 |
serviceAccount.automountServiceAccountToken | false | 表示默认的 ServiceAccount 访问令牌是否应挂载到 pod 中 |
serviceAccount.create | false | 表示是否应创建 ServiceAccount |
serviceAccount.enabled | false | 表示是否使用 ServiceAccount |
serviceAccount.name | ServiceAccount 的名称。如果未设置,则使用完整chart 名称 | |
priorityClassName | "" | 允许配置 pod 的 priorityClassName,用于在驱逐时控制 pod 优先级 |
chart 配置示例
资源
resources 允许您配置 Sidekiq pod 可以消耗的最小和最大资源量(内存和 CPU)。
Sidekiq pod 工作负载在不同的部署之间差异很大。通常,理解为每个 Sidekiq 进程消耗大约 1 个 vCPU 和 2 GB 内存。垂直扩展通常应与此 1:2 的 vCPU:Memory 比例一致。
以下是 resources 的示例用法:
yaml1resources: 2 limits: 3 memory: 5G 4 requests: 5 memory: 2G 6 cpu: 900m
extraEnv
extraEnv 允许您在依赖容器中公开其他环境变量。
以下是 extraEnv 的示例用法:
yamlextraEnv: SOME_KEY: some_value SOME_OTHER_KEY: some_other_value
启动容器时,您可以确认环境变量已被公开:
shellenv | grep SOME SOME_KEY=some_value SOME_OTHER_KEY=some_other_value
您还可以为特定的 pod 设置 extraEnv:
yaml1extraEnv: 2 SOME_KEY: some_value 3 SOME_OTHER_KEY: some_other_value 4pods: 5 - name: mailers 6 queues: mailers 7 extraEnv: 8 SOME_POD_KEY: some_pod_value 9 - name: catchall
这将仅为 mailers pod 中的应用程序容器设置 SOME_POD_KEY。Pod 级别的 extraEnv 设置不会添加到初始化容器中。
extraEnvFrom
extraEnvFrom 允许您在 pod 中的所有容器中公开来自其他数据源的额外环境变量。后续变量可以在每个 Sidekiq pod 中被覆盖。
以下是 extraEnvFrom 的示例用法:
yaml1extraEnvFrom: 2 MY_NODE_NAME: 3 fieldRef: 4 fieldPath: spec.nodeName 5 MY_CPU_REQUEST: 6 resourceFieldRef: 7 containerName: test-container 8 resource: requests.cpu 9 SECRET_THING: 10 secretKeyRef: 11 name: special-secret 12 key: special_token 13 # optional: boolean 14pods: 15 - name: immediate 16 extraEnvFrom: 17 CONFIG_STRING: 18 configMapKeyRef: 19 name: useful-config 20 key: some-string 21 # optional: boolean
extraVolumes
extraVolumes 允许您在全chart 范围内配置额外卷。
以下是 extraVolumes 的示例用法:
yamlextraVolumes: | - name: example-volume persistentVolumeClaim: claimName: example-pvc
extraVolumeMounts
extraVolumeMounts 允许您在全chart 范围内为所有容器配置额外的卷挂载。
以下是 extraVolumeMounts 的示例用法:
yamlextraVolumeMounts: | - name: example-volume-mount mountPath: /etc/example
image.pullSecrets
pullSecrets 允许您对私有注册表进行身份验证,以拉取 pod 的镜像。
有关私有注册表及其身份验证方法的更多详细信息,请参阅 Kubernetes 文档。
以下是 pullSecrets 的示例用法:
yaml1image: 2 repository: my.sidekiq.repository 3 pullPolicy: Always 4 pullSecrets: 5 - name: my-secret-name 6 - name: my-secondary-secret-name
serviceAccount
此部分控制是否应创建 ServiceAccount 以及是否应将默认访问令牌挂载到 pod 中。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
annotations | Map | {} | ServiceAccount 注释。 |
automountServiceAccountToken | Boolean | false | 控制是否应将默认 ServiceAccount 访问令牌挂载到 pod 中。您不应启用此选项,除非某些 sidecars 需要它才能正常工作(例如,Istio)。 |
create | Boolean | false | 表示是否应创建 ServiceAccount。 |
enabled | Boolean | false | 表示是否使用 ServiceAccount。 |
name | String | ServiceAccount 的名称。如果未设置,则使用完整chart 名称。 |
tolerations
tolerations 允许您在有污点的工作节点上调度 pod
以下是 tolerations 的示例用法:
yaml1tolerations: 2- key: "node_label" 3 operator: "Equal" 4 value: "true" 5 effect: "NoSchedule" 6- key: "node_label" 7 operator: "Equal" 8 value: "true" 9 effect: "NoExecute"
annotations
annotations 允许您向 Sidekiq pods 添加注释。
以下是 annotations 的示例用法:
yamlannotations: kubernetes.io/example-annotation: annotation-value
使用此 chart 的基础版
默认情况下,Helm chart 使用极狐GitLab 的企业版。如果需要,您可以改用基础版。了解有关这两者之间的差异的更多信息。
要使用基础版,请将 image.repository 设置为 registry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ce。
外部服务
此chart 应附加到与 Webservice chart 相同的 Redis、PostgreSQL 和 Gitaly 实例。外部服务的值将被填充到一个 ConfigMap 中,该 ConfigMap 在所有 Sidekiq pods 中共享。
Redis
yaml1redis: 2 host: rank-racoon-redis 3 port: 6379 4 sentinels: 5 - host: sentinel1.example.com 6 port: 26379 7 password: 8 secret: gitlab-redis 9 key: redis-password
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
host | String | Redis 服务器的主机名和要使用的数据库。可以在没有 serviceName 的情况下省略。如果使用 Redis 哨兵,host 属性需要设置为 sentinel.conf 中指定的集群名称。 | |
password.key | String | Redis 的 password.key 属性定义了包含密码的密钥(如下)的名称。 | |
password.secret | String | Redis 的 password.secret 属性定义了 Kubernetes Secret 的名称。 | |
port | Integer | 6379 | 连接到 Redis 服务器的端口。 |
serviceName | String | redis | 运行 Redis 数据库的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务(和当前 .Release.Name)的主机名以替代 host 值。当 Redis 作为极狐GitLab chart 的一部分使用时,这很方便。 |
sentinels.[].host | String | 用于 Redis HA 设置的 Redis Sentinel 服务器的主机名。 | |
sentinels.[].port | Integer | 26379 | 连接到 Redis Sentinel 服务器的端口。 |
当前的 Redis Sentinel 支持仅支持从极狐GitLab chart 中单独部署的哨兵。因此,通过极狐GitLab chart 进行的 Redis 部署应通过 redis.install=false 禁用。 在部署极狐GitLab chart 之前,需要手动创建包含 Redis 密码的 Secret。
PostgreSQL
yaml1psql: 2 host: rank-racoon-psql 3 serviceName: pgbouncer 4 port: 5432 5 database: gitlabhq_production 6 username: gitlab 7 preparedStatements: false 8 password: 9 secret: gitlab-postgres 10 key: psql-password
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
host | String | 具有要使用的数据库的 PostgreSQL 服务器的主机名。如果 postgresql.install=true(默认非生产环境),则可以省略。 | |
serviceName | String | 运行 PostgreSQL 数据库的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务的主机名以替代 host 值。 | |
database | String | gitlabhq_production | 要在 PostgreSQL 服务器上使用的数据库的名称。 |
password.key | String | PostgreSQL 的 password.key 属性定义了包含密码的密钥(如下)的名称。 | |
password.secret | String | PostgreSQL 的 password.secret 属性定义了 Kubernetes Secret 的名称。 | |
port | Integer | 5432 | 连接到 PostgreSQL 服务器的端口。 |
username | String | gitlab | 用于数据库身份验证的用户名。 |
preparedStatements | Boolean | false | 与 PostgreSQL 服务器通信时是否应使用预准备语句。 |
Gitaly
YAML1gitaly: 2 internal: 3 names: 4 - default 5 - default2 6 external: 7 - name: node1 8 hostname: node1.example.com 9 port: 8079 10 authToken: 11 secret: gitaly-secret 12 key: token
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
host | String | 要使用的 Gitaly 服务器的主机名。可以在没有 serviceName 的情况下省略。 | |
serviceName | String | gitaly | 运行 Gitaly 服务器的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务(和当前 .Release.Name)的主机名以替代 host 值。当 Gitaly 作为极狐GitLab chart 的一部分使用时,这很方便。 |
port | Integer | 8075 | 连接到 Gitaly 服务器的端口。 |
authToken.key | String | 包含 authToken 的密钥(如下)的名称。 | |
authToken.secret | String | 要从中提取的 Kubernetes Secret 的名称。 |
指标
默认情况下,每个 pod 都启用了 Prometheus 指标导出器。仅当在管理区域启用了极狐GitLab Prometheus 指标时,指标才可用。导出器在端口 3807 上公开一个 /metrics 端点。当启用指标时,会向每个 pod 添加注释,允许 Prometheus 服务器发现和抓取公开的指标。
全chart 范围的默认值
在未按 pod 提供值的情况下,将使用以下值在全chart 范围内。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
concurrency | Integer | 25 | 同时处理的任务数量。 |
timeout | Integer | 4 | Sidekiq 关闭超时。在 Sidekiq 收到 TERM 信号后强制关闭其进程之前的秒数。 |
memoryKiller.checkInterval | Integer | 3 | 内存检查之间的时间量,以秒为单位 |
memoryKiller.maxRss | Integer | 2000000 | 延迟关闭触发前的最大 RSS,以千字节为单位 |
memoryKiller.graceTime | Integer | 900 | 触发关闭前的等待时间,以秒为单位 |
memoryKiller.shutdownWait | Integer | 30 | 触发关闭后现有作业完成的时间,以秒为单位 |
minReplicas | Integer | 2 | 最小副本数 |
maxReplicas | Integer | 10 | 最大副本数 |
maxUnavailable | Integer | 1 | 最大不可用 Pod 数量的限制 |
详细的 Sidekiq 内存杀手文档可用于 Linux 软件包文档中。
每个 pod 的设置
pods 声明提供了对工作进程 pod 的所有属性的声明。这些将被模板化为 Deployment,并为其 Sidekiq 实例创建单独的 ConfigMap。
设置默认为包含一个单一的 pod,该 pod 设置为监控所有队列。对 pod 部分的更改将覆盖默认 pod,并使用不同的 pod 配置。它不会在默认 pod 之外添加新 pod。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
concurrency | Integer | 同时处理的任务数量。如果未提供,将从全chart 范围的默认值中提取。 | |
name | String | 用于为此 pod 命名 Deployment 和 ConfigMap。应保持简短,并且不应在任何两个条目之间重复。 | |
queues | String | 见下文。 | |
timeout | Integer | Sidekiq 关闭超时。在 Sidekiq 收到 TERM 信号后强制关闭其进程之前的秒数。如果未提供,将从全chart 范围的默认值中提取。此值必须小于 terminationGracePeriodSeconds。 | |
resources | 每个 pod 可以提供自己的 resources 要求,如果存在,这些将被添加到为其创建的 Deployment 中。这些与 Kubernetes 文档匹配。 | ||
nodeSelector | 每个 pod 可以配置 nodeSelector 属性,如果存在,这些将被添加到为其创建的 Deployment 中。这些定义与 Kubernetes 文档匹配。 | ||
memoryKiller.checkInterval | Integer | 3 | 内存检查之间的时间量 |
memoryKiller.maxRss | Integer | 2000000 | 覆盖给定 pod 的最大 RSS。 |
memoryKiller.graceTime | Integer | 900 | 覆盖给定 Pod 的触发关闭前的等待时间 |
memoryKiller.shutdownWait | Integer | 30 | 覆盖给定 Pod 触发关闭后现有作业完成的时间 |
minReplicas | Integer | 2 | 最小副本数 |
maxReplicas | Integer | 10 | 最大副本数 |
maxUnavailable | Integer | 1 | 最大不可用 Pod 数量的限制 |
podLabels | Map | {} | 补充 Pod 标签。不会用于选择器。 |
strategy | {} | 允许配置部署使用的更新策略 | |
extraVolumes | String | 配置给定 pod 的额外卷。 | |
extraVolumeMounts | String | 配置给定 pod 的额外卷挂载。 | |
priorityClassName | String | "" | 允许配置 pod 的 priorityClassName,用于在驱逐时控制 pod 优先级 |
hpa.customMetrics | Array | [] | 自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率) |
hpa.cpu.targetType | String | AverageValue | 覆盖自动缩放 CPU 目标类型,必须为 Utilization 或 AverageValue |
hpa.cpu.targetAverageValue | String | 350m | 覆盖自动缩放 CPU 目标值 |
hpa.cpu.targetAverageUtilization | Integer | 覆盖自动缩放 CPU 目标利用率 | |
hpa.memory.targetType | String | 覆盖自动缩放内存目标类型,必须为 Utilization 或 AverageValue | |
hpa.memory.targetAverageValue | String | 覆盖自动缩放内存目标值 | |
hpa.memory.targetAverageUtilization | Integer | 覆盖自动缩放内存目标利用率 | |
hpa.targetAverageValue | String | 已弃用 覆盖自动缩放 CPU 目标值 | |
keda.enabled | Boolean | false | 覆盖启用 KEDA |
keda.pollingInterval | Integer | 30 | 覆盖 KEDA 轮询间隔 |
keda.cooldownPeriod | Integer | 300 | 覆盖 KEDA 冷却期 |
keda.minReplicaCount | Integer | 覆盖 KEDA 最小副本数 | |
keda.maxReplicaCount | Integer | 覆盖 KEDA 最大副本数 | |
keda.fallback | Map | 覆盖 KEDA 回退配置 | |
keda.hpaName | String | 覆盖 KEDA HPA 名称 | |
keda.restoreToOriginalReplicaCount | Boolean | 覆盖启用恢复到原始副本数 | |
keda.behavior | Map | 覆盖 KEDA HPA 行为 | |
keda.triggers | Array | 覆盖 KEDA 触发器 | |
extraEnv | Map | 要公开的额外环境变量列表。chart 范围内的值将合并到此列表中,pod 的值优先 | |
extraEnvFrom | Map | 要公开的来自其他数据源的额外环境变量列表 | |
terminationGracePeriodSeconds | Integer | 30 | Pod 优雅终止所需的可选持续时间。 |
队列
queues 值是一个包含要处理的队列的逗号分隔列表的字符串。默认情况下,它未设置,这意味着将处理所有队列。
字符串不应包含空格:merge,post_receive,process_commit 将起作用,但 merge, post_receive, process_commit 将不起作用。
任何添加作业但未表示为至少一个 pod 项的一部分的队列将不会被处理。有关所有队列的完整列表,请参阅极狐GitLab 源代码中的这些文件:
除了配置 gitlab.sidekiq.pods[].queues,您还必须配置 global.appConfig.sidekiq.routingRules。有关更多信息,请参阅Sidekiq 路由规则设置。
示例 pod 条目
YAML1pods: 2 - name: immediate 3 concurrency: 10 4 minReplicas: 2 # 默认为继承值 5 maxReplicas: 10 # 默认为继承值 6 maxUnavailable: 5 # 默认为继承值 7 queues: merge,post_receive,process_commit 8 extraVolumeMounts: | 9 - name: example-volume-mount 10 mountPath: /etc/example 11 extraVolumes: | 12 - name: example-volume 13 persistentVolumeClaim: 14 claimName: example-pvc 15 resources: 16 limits: 17 cpu: 800m 18 memory: 2Gi 19 hpa: 20 cpu: 21 targetType: Value 22 targetAverageValue: 350m
Sidekiq 配置的完整示例
以下是使用单独的 Sidekiq pod 进行导入相关作业的 Sidekiq 配置的完整示例,使用单独的 Redis 实例进行导出相关作业的 Sidekiq pod,以及用于其他所有内容的另一个 pod。
yaml1... 2global: 3 appConfig: 4 sidekiq: 5 routingRules: 6 - ["feature_category=importers", "import"] 7 - ["feature_category=exporters", "export", "queues_shard_extra_shard"] 8 - ["*", "default"] 9 redis: 10 redisYmlOverride: 11 queues_shard_extra_shard: ... 12... 13gitlab: 14 sidekiq: 15 pods: 16 - name: import 17 queues: import 18 - name: export 19 queues: export 20 extraEnv: 21 SIDEKIQ_SHARD_NAME: queues_shard_extra_shard # 与 global.redis.redisYmlOverride 中的键匹配 22 - name: default 23...
配置 networkpolicy
此部分控制 NetworkPolicy。此配置是可选的,用于限制 Pod 到特定端点的出站和入站。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
enabled | Boolean | false | 此设置启用网络策略 |
ingress.enabled | Boolean | false | 设置为 true 时,将激活 Ingress 网络策略。这将阻止所有入站连接,除非指定了规则。 |
ingress.rules | Array | [] | 入站策略的规则,详细信息请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和以下示例 |
egress.enabled | Boolean | false | 设置为 true 时,将激活 Egress 网络策略。这将阻止所有出站连接,除非指定了规则。 |
egress.rules | Array | [] | 出站策略的规则,详细信息请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和以下示例 |
示例网络策略
Sidekiq 服务仅需要 Prometheus 导出器的入站连接(如果已启用),并且通常需要到各种地方的出站连接。此示例添加了以下网络策略:
- 允许入站请求:
- 从 Prometheus pod 到端口 3807
- 允许出站请求:
- 到 kube-dns 到端口 53
- 到 gitaly pod 到端口 8075
- 到 registry pod 到端口 5000
- 到 kas pod 到端口 8153
- 到外部数据库 172.16.0.10/32 到端口 5432
- 到外部 Redis 172.16.0.11/32 到端口 6379
- 到外部 Elasticsearch 172.16.0.12/32 到端口 443
- 到邮件网关 172.16.0.13/32 到端口 587
- 到端点,如 S3 或 STS 的 AWS VPC 端点 172.16.1.0/24 到端口 443
- 到内部子网 172.16.2.0/24 到端口 443 用于发送 webhooks
请注意,提供的示例只是一个示例,可能并不完整
Sidekiq 服务需要对公共互联网的出站连接,以便在没有本地端点时获取外部对象存储上的镜像。
该示例基于以下假设:kube-dns 部署到命名空间 kube-system,prometheus 部署到命名空间 monitoring,nginx-ingress 部署到命名空间 nginx-ingress。
yaml1networkpolicy: 2 enabled: true 3 ingress: 4 enabled: true 5 rules: 6 - from: 7 - namespaceSelector: 8 matchLabels: 9 kubernetes.io/metadata.name: monitoring 10 podSelector: 11 matchLabels: 12 app: prometheus 13 component: server 14 release: gitlab 15 ports: 16 - port: 3807 17 egress: 18 enabled: true 19 rules: 20 - to: 21 - podSelector: 22 matchLabels: 23 app: gitaly 24 ports: 25 - port: 8075 26 - to: 27 - podSelector: 28 matchLabels: 29 app: kas 30 ports: 31 - port: 8153 32 - to: 33 - namespaceSelector: 34 matchLabels: 35 kubernetes.io/metadata.name: kube-system 36 podSelector: 37 matchLabels: 38 k8s-app: kube-dns 39 ports: 40 - port: 53 41 protocol: UDP 42 - to: 43 - ipBlock: 44 cidr: 172.16.0.10/32 45 ports: 46 - port: 5432 47 - to: 48 - ipBlock: 49 cidr: 172.16.0.11/32 50 ports: 51 - port: 6379 52 - to: 53 - ipBlock: 54 cidr: 172.16.0.12/32 55 ports: 56 - port: 25 57 - to: 58 - ipBlock: 59 cidr: 172.16.0.13/32 60 ports: 61 - port: 443 62 - to: 63 - ipBlock: 64 cidr: 172.16.1.0/24 65 ports: 66 - port: 443 67 - to: 68 - ipBlock: 69 cidr: 172.16.2.0/24 70 ports: 71 - port: 443
配置 KEDA
此 keda 部分启用 KEDA ScaledObjects 的安装,而不是常规的 HorizontalPodAutoscalers。此配置是可选的,当需要基于自定义或外部指标进行自动扩展时可以使用。
大多数设置默认情况下与 hpa 部分中设置的值相同(如果适用)。
如果以下条件为真,则根据 hpa 部分中设置的 CPU 和内存阈值自动添加 CPU 和内存触发器:
- 未设置 triggers。
- 相应的 request.cpu.request 或 request.memory.request 设置也设置为非零值。
如果未设置任何触发器,则不会创建 ScaledObject。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
enabled | Boolean | false | 使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers |
pollingInterval | Integer | 30 | 检查每个触发器的间隔时间 |
cooldownPeriod | Integer | 300 | 最后一个触发器报告活动后等待的时间,然后将资源扩展回 0 |
minReplicaCount | Integer | KEDA 将资源缩减到的最小副本数,默认为 minReplicas | |
maxReplicaCount | Integer | KEDA 将资源扩展到的最大副本数,默认为 maxReplicas | |
fallback | Map | KEDA 回退配置,请参阅文档 | |
hpaName | String | KEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name} | |
restoreToOriginalReplicaCount | Boolean | 指定目标资源在 ScaledObject 删除后是否应缩回到原始副本数 | |
behavior | Map | 上下扩展行为的规范,默认为 hpa.behavior | |
triggers | Array | 用于激活目标资源扩展的触发器列表,默认为从 hpa.cpu 和 hpa.memory 计算的触发器 |