使用极狐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 命令:

参数默认值描述
annotationsPod 注释
podLabels补充 Pod 标签。不会用于选择器。
common.labels应用于此chart 创建的所有对象的补充标签。
concurrency20Sidekiq 默认并发
deployment.strategy{}允许配置部署使用的更新策略
deployment.terminationGracePeriodSeconds30Pod 优雅终止所需的可选持续时间。
enabledtrueSidekiq 启用标志
extraContainers多行文字样式字符串,包含要包含的容器列表
extraInitContainers要包含的额外初始化容器列表
extraVolumeMounts要配置的额外卷挂载的字符串模板
extraVolumes要配置的额外卷的字符串模板
extraEnv要公开的额外环境变量列表
extraEnvFrom要公开的来自其他数据源的额外环境变量列表
gitaly.serviceNamegitalyGitaly 服务名称
health_checks.port3808健康检查服务器端口
hpa.behaviour{scaleDown: {stabilizationWindowSeconds: 300 }}行为包含用于向上和向下缩放的规范(需要 autoscaling/v2beta2 或更高版本)
hpa.customMetrics[]自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率)
hpa.cpu.targetTypeAverageValue设置自动缩放 CPU 目标类型,必须为 UtilizationAverageValue
hpa.cpu.targetAverageValue350m设置自动缩放 CPU 目标值
hpa.cpu.targetAverageUtilization设置自动缩放 CPU 目标利用率
hpa.memory.targetType设置自动缩放内存目标类型,必须为 UtilizationAverageValue
hpa.memory.targetAverageValue设置自动缩放内存目标值
hpa.memory.targetAverageUtilization设置自动缩放内存目标利用率
hpa.targetAverageValue已弃用 设置自动缩放 CPU 目标值
keda.enabledfalse使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
keda.pollingInterval30检查每个触发器的间隔
keda.cooldownPeriod300在最后一个触发器报告活跃后等待的时间段,然后将资源缩放回 0
keda.minReplicaCountKEDA 将资源缩减到的最小副本数,默认为 minReplicas
keda.maxReplicaCountKEDA 将资源缩放到的最大副本数,默认为 maxReplicas
keda.fallbackKEDA 回退配置
keda.hpaNameKEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name}
keda.restoreToOriginalReplicaCount指定是否应在 ScaledObject 删除后将目标资源缩放回原始副本数
keda.behavior向上和向下缩放行为的规范,默认为 hpa.behavior
keda.triggers激活目标资源缩放的触发器列表,默认为从 hpa.cpuhpa.memory 计算的触发器
minReplicas2最小副本数
maxReplicas10最大副本数
maxUnavailable1最大不可用 Pod 数量的限制
image.pullPolicyAlwaysSidekiq 镜像拉取策略
image.pullSecrets镜像仓库的密钥
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-eeSidekiq 镜像仓库
image.tagSidekiq 镜像标签
init.image.repositoryinitContainer 镜像
init.image.taginitContainer 镜像标签
init.containerSecurityContextinitContainer 特定的 securityContext
init.containerSecurityContext.runAsUser1000initContainer 特定:容器应以哪个用户 ID 启动
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer 特定:控制进程是否可以获得比其父进程更多的权限
init.containerSecurityContext.runAsNonRoottrueinitContainer 特定:控制容器是否以非 root 用户运行
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer 特定:移除容器的 Linux 功能
logging.formatjson设置为 text 以获取非 JSON 日志
metrics.enabledtrue是否应提供用于抓取的指标端点
metrics.port3807指标端点端口
metrics.path/metrics指标端点路径
metrics.log_enabledfalse启用或禁用写入 sidekiq_exporter.log 的指标服务器日志
metrics.podMonitor.enabledfalse是否应创建 PodMonitor 以启用 Prometheus Operator 管理指标抓取
metrics.podMonitor.additionalLabels{}要添加到 PodMonitor 的其他标签
metrics.podMonitor.endpointConfig{}PodMonitor 的其他端点配置
metrics.annotations已弃用 设置显式指标注释。已由模板内容替代。
metrics.tls.enabledfalsemetrics/sidekiq_exporter 端点启用 TLS
metrics.tls.secretName{Release.Name}-sidekiq-metrics-tlsmetrics/sidekiq_exporter 端点 TLS 证书和密钥的密钥
psql.password.keypsql-passwordpsql 密码在 psql 密钥中的键
psql.password.secretgitlab-postgrespsql 密码密钥
psql.port设置 PostgreSQL 服务器端口。优先于 global.psql.port
redis.serviceNameredisRedis 服务名称
resources.requests.cpu900mSidekiq 所需的最小 CPU
resources.requests.memory2GSidekiq 所需的最小内存
resources.limits.memorySidekiq 允许的最大内存
timeout25Sidekiq 作业超时
tolerations[]Pod 分配的容忍标签
memoryKiller.daemonModetrue如果为 false,则使用旧版内存杀手模式
memoryKiller.maxRss2000000延迟关闭触发前的最大 RSS,以千字节为单位
memoryKiller.graceTime900触发关闭前的等待时间,以秒为单位
memoryKiller.shutdownWait30触发关闭后现有作业完成的时间,以秒为单位
memoryKiller.hardLimitRss即时关闭触发前的最大 RSS,以守护进程模式下的千字节为单位
memoryKiller.checkInterval3内存检查之间的时间量
livenessProbe.initialDelaySeconds20启动活跃性探测的延迟
livenessProbe.periodSeconds60执行活跃性探测的频率
livenessProbe.timeoutSeconds30活跃性探测的超时时间
livenessProbe.successThreshold1活跃性探测在失败后被视为成功的最小连续成功次数
livenessProbe.failureThreshold3活跃性探测在成功后被视为失败的最小连续失败次数
readinessProbe.initialDelaySeconds0启动准备性探测的延迟
readinessProbe.periodSeconds10执行准备性探测的频率
readinessProbe.timeoutSeconds2准备性探测的超时时间
readinessProbe.successThreshold1准备性探测在失败后被视为成功的最小连续成功次数
readinessProbe.failureThreshold3准备性探测在成功后被视为失败的最小连续失败次数
securityContext.fsGroup1000Pod 应以哪个群组 ID 启动
securityContext.runAsUser1000Pod 应以哪个用户 ID 启动
securityContext.fsGroupChangePolicy更改卷的所有权和权限的策略(需要 Kubernetes 1.23)
securityContext.seccompProfile.typeRuntimeDefault使用的 Seccomp 配置文件
containerSecurityContext覆盖容器 securityContext
containerSecurityContext.runAsUser1000允许覆盖容器启动时使用的特定安全上下文
containerSecurityContext.allowPrivilegeEscalationfalse控制容器的进程是否可以获得比其父进程更多的权限
containerSecurityContext.runAsNonRoottrue控制容器是否以非 root 用户运行
containerSecurityContext.capabilities.drop[ "ALL" ]移除 Gitaly 容器的 Linux 能力
serviceAccount.annotations{}ServiceAccount 注释
serviceAccount.automountServiceAccountTokenfalse表示默认的 ServiceAccount 访问令牌是否应挂载到 pod 中
serviceAccount.createfalse表示是否应创建 ServiceAccount
serviceAccount.enabledfalse表示是否使用 ServiceAccount
serviceAccount.nameServiceAccount 的名称。如果未设置,则使用完整chart 名称
priorityClassName""允许配置 pod 的 priorityClassName,用于在驱逐时控制 pod 优先级

chart 配置示例#

资源#

resources 允许您配置 Sidekiq pod 可以消耗的最小和最大资源量(内存和 CPU)。

Sidekiq pod 工作负载在不同的部署之间差异很大。通常,理解为每个 Sidekiq 进程消耗大约 1 个 vCPU 和 2 GB 内存。垂直扩展通常应与此 1:2vCPU:Memory 比例一致。

以下是 resources 的示例用法:

yaml
1resources: 2 limits: 3 memory: 5G 4 requests: 5 memory: 2G 6 cpu: 900m

extraEnv#

extraEnv 允许您在依赖容器中公开其他环境变量。

以下是 extraEnv 的示例用法:

yaml
extraEnv: SOME_KEY: some_value SOME_OTHER_KEY: some_other_value

启动容器时,您可以确认环境变量已被公开:

shell
env | grep SOME SOME_KEY=some_value SOME_OTHER_KEY=some_other_value

您还可以为特定的 pod 设置 extraEnv

yaml
1extraEnv: 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 的示例用法:

yaml
1extraEnvFrom: 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 的示例用法:

yaml
extraVolumes: | - name: example-volume persistentVolumeClaim: claimName: example-pvc

extraVolumeMounts#

extraVolumeMounts 允许您在全chart 范围内为所有容器配置额外的卷挂载。

以下是 extraVolumeMounts 的示例用法:

yaml
extraVolumeMounts: | - name: example-volume-mount mountPath: /etc/example

image.pullSecrets#

pullSecrets 允许您对私有注册表进行身份验证,以拉取 pod 的镜像。

有关私有注册表及其身份验证方法的更多详细信息,请参阅 Kubernetes 文档

以下是 pullSecrets 的示例用法:

yaml
1image: 2 repository: my.sidekiq.repository 3 pullPolicy: Always 4 pullSecrets: 5 - name: my-secret-name 6 - name: my-secondary-secret-name

serviceAccount#

此部分控制是否应创建 ServiceAccount 以及是否应将默认访问令牌挂载到 pod 中。

名称类型默认值描述
annotationsMap{}ServiceAccount 注释。
automountServiceAccountTokenBooleanfalse控制是否应将默认 ServiceAccount 访问令牌挂载到 pod 中。您不应启用此选项,除非某些 sidecars 需要它才能正常工作(例如,Istio)。
createBooleanfalse表示是否应创建 ServiceAccount。
enabledBooleanfalse表示是否使用 ServiceAccount。
nameStringServiceAccount 的名称。如果未设置,则使用完整chart 名称。

tolerations#

tolerations 允许您在有污点的工作节点上调度 pod

以下是 tolerations 的示例用法:

yaml
1tolerations: 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 的示例用法:

yaml
annotations: 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#

yaml
1redis: 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
名称类型默认值描述
hostStringRedis 服务器的主机名和要使用的数据库。可以在没有 serviceName 的情况下省略。如果使用 Redis 哨兵,host 属性需要设置为 sentinel.conf 中指定的集群名称。
password.keyStringRedis 的 password.key 属性定义了包含密码的密钥(如下)的名称。
password.secretStringRedis 的 password.secret 属性定义了 Kubernetes Secret 的名称。
portInteger6379连接到 Redis 服务器的端口。
serviceNameStringredis运行 Redis 数据库的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务(和当前 .Release.Name)的主机名以替代 host 值。当 Redis 作为极狐GitLab chart 的一部分使用时,这很方便。
sentinels.[].hostString用于 Redis HA 设置的 Redis Sentinel 服务器的主机名。
sentinels.[].portInteger26379连接到 Redis Sentinel 服务器的端口。

当前的 Redis Sentinel 支持仅支持从极狐GitLab chart 中单独部署的哨兵。因此,通过极狐GitLab chart 进行的 Redis 部署应通过 redis.install=false 禁用。 在部署极狐GitLab chart 之前,需要手动创建包含 Redis 密码的 Secret。

PostgreSQL#

yaml
1psql: 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
名称类型默认值描述
hostString具有要使用的数据库的 PostgreSQL 服务器的主机名。如果 postgresql.install=true(默认非生产环境),则可以省略。
serviceNameString运行 PostgreSQL 数据库的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务的主机名以替代 host 值。
databaseStringgitlabhq_production要在 PostgreSQL 服务器上使用的数据库的名称。
password.keyStringPostgreSQL 的 password.key 属性定义了包含密码的密钥(如下)的名称。
password.secretStringPostgreSQL 的 password.secret 属性定义了 Kubernetes Secret 的名称。
portInteger5432连接到 PostgreSQL 服务器的端口。
usernameStringgitlab用于数据库身份验证的用户名。
preparedStatementsBooleanfalse与 PostgreSQL 服务器通信时是否应使用预准备语句。

Gitaly#

YAML
1gitaly: 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
名称类型默认值描述
hostString要使用的 Gitaly 服务器的主机名。可以在没有 serviceName 的情况下省略。
serviceNameStringgitaly运行 Gitaly 服务器的 service 的名称。如果存在此名称,而没有 host,则chart 将模板化服务(和当前 .Release.Name)的主机名以替代 host 值。当 Gitaly 作为极狐GitLab chart 的一部分使用时,这很方便。
portInteger8075连接到 Gitaly 服务器的端口。
authToken.keyString包含 authToken 的密钥(如下)的名称。
authToken.secretString要从中提取的 Kubernetes Secret 的名称。

指标#

默认情况下,每个 pod 都启用了 Prometheus 指标导出器。仅当在管理区域启用了极狐GitLab Prometheus 指标时,指标才可用。导出器在端口 3807 上公开一个 /metrics 端点。当启用指标时,会向每个 pod 添加注释,允许 Prometheus 服务器发现和抓取公开的指标。

全chart 范围的默认值#

在未按 pod 提供值的情况下,将使用以下值在全chart 范围内。

名称类型默认值描述
concurrencyInteger25同时处理的任务数量。
timeoutInteger4Sidekiq 关闭超时。在 Sidekiq 收到 TERM 信号后强制关闭其进程之前的秒数。
memoryKiller.checkIntervalInteger3内存检查之间的时间量,以秒为单位
memoryKiller.maxRssInteger2000000延迟关闭触发前的最大 RSS,以千字节为单位
memoryKiller.graceTimeInteger900触发关闭前的等待时间,以秒为单位
memoryKiller.shutdownWaitInteger30触发关闭后现有作业完成的时间,以秒为单位
minReplicasInteger2最小副本数
maxReplicasInteger10最大副本数
maxUnavailableInteger1最大不可用 Pod 数量的限制

详细的 Sidekiq 内存杀手文档可用于 Linux 软件包文档中。

每个 pod 的设置#

pods 声明提供了对工作进程 pod 的所有属性的声明。这些将被模板化为 Deployment,并为其 Sidekiq 实例创建单独的 ConfigMap

设置默认为包含一个单一的 pod,该 pod 设置为监控所有队列。对 pod 部分的更改将覆盖默认 pod,并使用不同的 pod 配置。它不会在默认 pod 之外添加新 pod。

名称类型默认值描述
concurrencyInteger同时处理的任务数量。如果未提供,将从全chart 范围的默认值中提取。
nameString用于为此 pod 命名 DeploymentConfigMap。应保持简短,并且不应在任何两个条目之间重复。
queuesString见下文
timeoutIntegerSidekiq 关闭超时。在 Sidekiq 收到 TERM 信号后强制关闭其进程之前的秒数。如果未提供,将从全chart 范围的默认值中提取。此值必须小于 terminationGracePeriodSeconds
resources每个 pod 可以提供自己的 resources 要求,如果存在,这些将被添加到为其创建的 Deployment 中。这些与 Kubernetes 文档匹配。
nodeSelector每个 pod 可以配置 nodeSelector 属性,如果存在,这些将被添加到为其创建的 Deployment 中。这些定义与 Kubernetes 文档匹配。
memoryKiller.checkIntervalInteger3内存检查之间的时间量
memoryKiller.maxRssInteger2000000覆盖给定 pod 的最大 RSS。
memoryKiller.graceTimeInteger900覆盖给定 Pod 的触发关闭前的等待时间
memoryKiller.shutdownWaitInteger30覆盖给定 Pod 触发关闭后现有作业完成的时间
minReplicasInteger2最小副本数
maxReplicasInteger10最大副本数
maxUnavailableInteger1最大不可用 Pod 数量的限制
podLabelsMap{}补充 Pod 标签。不会用于选择器。
strategy{}允许配置部署使用的更新策略
extraVolumesString配置给定 pod 的额外卷。
extraVolumeMountsString配置给定 pod 的额外卷挂载。
priorityClassNameString""允许配置 pod 的 priorityClassName,用于在驱逐时控制 pod 优先级
hpa.customMetricsArray[]自定义指标包含用于计算所需副本数的规格(覆盖在 targetAverageUtilization 中配置的默认使用平均 CPU 利用率)
hpa.cpu.targetTypeStringAverageValue覆盖自动缩放 CPU 目标类型,必须为 UtilizationAverageValue
hpa.cpu.targetAverageValueString350m覆盖自动缩放 CPU 目标值
hpa.cpu.targetAverageUtilizationInteger覆盖自动缩放 CPU 目标利用率
hpa.memory.targetTypeString覆盖自动缩放内存目标类型,必须为 UtilizationAverageValue
hpa.memory.targetAverageValueString覆盖自动缩放内存目标值
hpa.memory.targetAverageUtilizationInteger覆盖自动缩放内存目标利用率
hpa.targetAverageValueString已弃用 覆盖自动缩放 CPU 目标值
keda.enabledBooleanfalse覆盖启用 KEDA
keda.pollingIntervalInteger30覆盖 KEDA 轮询间隔
keda.cooldownPeriodInteger300覆盖 KEDA 冷却期
keda.minReplicaCountInteger覆盖 KEDA 最小副本数
keda.maxReplicaCountInteger覆盖 KEDA 最大副本数
keda.fallbackMap覆盖 KEDA 回退配置
keda.hpaNameString覆盖 KEDA HPA 名称
keda.restoreToOriginalReplicaCountBoolean覆盖启用恢复到原始副本数
keda.behaviorMap覆盖 KEDA HPA 行为
keda.triggersArray覆盖 KEDA 触发器
extraEnvMap要公开的额外环境变量列表。chart 范围内的值将合并到此列表中,pod 的值优先
extraEnvFromMap要公开的来自其他数据源的额外环境变量列表
terminationGracePeriodSecondsInteger30Pod 优雅终止所需的可选持续时间。

队列#

queues 值是一个包含要处理的队列的逗号分隔列表的字符串。默认情况下,它未设置,这意味着将处理所有队列。

字符串不应包含空格:merge,post_receive,process_commit 将起作用,但 merge, post_receive, process_commit 将不起作用。

任何添加作业但未表示为至少一个 pod 项的一部分的队列将不会被处理。有关所有队列的完整列表,请参阅极狐GitLab 源代码中的这些文件:

  1. app/workers/all_queues.yml
  2. ee/app/workers/all_queues.yml

除了配置 gitlab.sidekiq.pods[].queues,您还必须配置 global.appConfig.sidekiq.routingRules。有关更多信息,请参阅Sidekiq 路由规则设置

示例 pod 条目#

YAML
1pods: 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。

yaml
1... 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 到特定端点的出站和入站。

名称类型默认值描述
enabledBooleanfalse此设置启用网络策略
ingress.enabledBooleanfalse设置为 true 时,将激活 Ingress 网络策略。这将阻止所有入站连接,除非指定了规则。
ingress.rulesArray[]入站策略的规则,详细信息请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和以下示例
egress.enabledBooleanfalse设置为 true 时,将激活 Egress 网络策略。这将阻止所有出站连接,除非指定了规则。
egress.rulesArray[]出站策略的规则,详细信息请参阅 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-systemprometheus 部署到命名空间 monitoringnginx-ingress 部署到命名空间 nginx-ingress

yaml
1networkpolicy: 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.requestrequest.memory.request 设置也设置为非零值。

如果未设置任何触发器,则不会创建 ScaledObject

名称类型默认值描述
enabledBooleanfalse使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
pollingIntervalInteger30检查每个触发器的间隔时间
cooldownPeriodInteger300最后一个触发器报告活动后等待的时间,然后将资源扩展回 0
minReplicaCountIntegerKEDA 将资源缩减到的最小副本数,默认为 minReplicas
maxReplicaCountIntegerKEDA 将资源扩展到的最大副本数,默认为 maxReplicas
fallbackMapKEDA 回退配置,请参阅文档
hpaNameStringKEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name}
restoreToOriginalReplicaCountBoolean指定目标资源在 ScaledObject 删除后是否应缩回到原始副本数
behaviorMap上下扩展行为的规范,默认为 hpa.behavior
triggersArray用于激活目标资源扩展的触发器列表,默认为从 hpa.cpuhpa.memory 计算的触发器