极狐 GitLab

使用 GitLab Webservice Chart

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

webservice 子 Chart 为 GitLab Rails Web 服务器提供每个 Pod 两个 Webservice 工作进程,这是单个 Pod 能够处理极狐GitLab 中任何 Web 请求所需的最低配置。

此 Chart 的 Pod 使用两个容器:gitlab-workhorsewebserviceGitLab Workhorse 监听 8181 端口,并且应 始终 作为发往 Pod 的入站流量的目的地。 webservice 包含极狐GitLab Rails 代码库, 监听 8080 端口,并可用于指标收集。 webservice 不应直接接收正常流量。

要求#

此 Chart 依赖 Redis、PostgreSQL、Gitaly 和 Registry 服务,这些服务可以是完整 GitLab Chart 的一部分,也可以是由此 Chart 部署到的 Kubernetes 集群可访问的外部服务。

配置#

webservice Chart 的配置如下:全局设置部署设置Ingress 设置外部服务Chart 设置

安装命令行选项#

下表包含可以通过 --set 标志提供给 helm install 命令的所有可能的 Chart 配置。

参数默认值描述
annotationsPod 注解
podLabels补充 Pod 标签。不用于选择器。
common.labels应用于此 Chart 创建的所有对象的补充标签。
deployment.terminationGracePeriodSeconds30Kubernetes 等待 Pod 退出的秒数,注意此值必须长于 shutdown.blackoutSeconds
deployment.livenessProbe.initialDelaySeconds20启动存活探针前的延迟时间
deployment.livenessProbe.periodSeconds60执行存活探针的频率
deployment.livenessProbe.timeoutSeconds30存活探针超时时间
deployment.livenessProbe.successThreshold1存活探针失败后被视为成功所需的最小连续成功次数
deployment.livenessProbe.failureThreshold3存活探针成功后被视为失败所需的最小连续失败次数
deployment.readinessProbe.initialDelaySeconds0启动就绪探针前的延迟时间
deployment.readinessProbe.periodSeconds10执行就绪探针的频率
deployment.readinessProbe.timeoutSeconds2就绪探针超时时间
deployment.readinessProbe.successThreshold1就绪探针失败后被视为成功所需的最小连续成功次数
deployment.readinessProbe.failureThreshold3就绪探针成功后被视为失败所需的最小连续失败次数
deployment.strategy{}允许配置 Deployment 使用的更新策略。未提供时,使用集群默认值。
deployment.revisionHistoryLimit要保留的先前修订版本数量。未提供且 global.revisionHistoryLimit 未设置时,使用 Kubernetes 默认值。
enabledtrueWebservice 启用标志
extraContainers包含要添加的容器列表的多行字面量字符串
extraInitContainers要添加的额外初始化容器列表
extras.google_analytics_idnil前端的 Google Analytics ID
extraVolumeMounts要执行的额外卷挂载列表
extraVolumes要创建的额外卷列表
extraEnv要暴露的额外环境变量列表
extraEnvFrom要从其他数据源暴露的额外环境变量列表
gitlab.webservice.workhorse.imageregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-eeWorkhorse 镜像仓库
gitlab.webservice.workhorse.tagWorkhorse 镜像标签
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}行为包含向上和向下扩缩行为的规范(需要 autoscaling/v2beta2 或更高版本)
hpa.customMetrics[]自定义指标包含用于计算所需副本数的规范(覆盖在 targetAverageUtilization 中配置的默认平均 CPU 利用率)
hpa.cpu.targetTypeAverageValue设置自动扩缩 CPU 目标类型,必须为 UtilizationAverageValue
hpa.cpu.targetAverageValue1设置自动扩缩 CPU 目标值
hpa.cpu.targetAverageUtilization设置自动扩缩 CPU 目标利用率
hpa.memory.targetType设置自动扩缩内存目标类型,必须为 UtilizationAverageValue
hpa.memory.targetAverageValue设置自动扩缩内存目标值
hpa.memory.targetAverageUtilization设置自动扩缩内存目标利用率
hpa.targetAverageValue已弃用 设置自动扩缩 CPU 目标值
sshHostKeys.mountfalse是否挂载包含公共 SSH 密钥的 GitLab Shell 密钥。
sshHostKeys.mountNamessh-host-keys挂载卷的名称。
sshHostKeys.types[dsa,rsa,ecdsa,ed25519]要挂载的 SSH 密钥类型列表。
image.pullPolicyAlwaysWebservice 镜像拉取策略
image.pullSecrets镜像仓库的密钥
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-eeWebservice 镜像仓库
image.tagWebservice 镜像标签
init.image.repositoryinitContainer 镜像
init.image.taginitContainer 镜像标签
init.containerSecurityContext.runAsUser1000initContainer 特定:启动容器所用的用户 ID
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer 特定:控制进程是否可以获得比其父进程更多的权限
init.containerSecurityContext.runAsNonRoottrueinitContainer 特定:控制容器是否以非 root 用户运行
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer 特定:移除容器的 Linux capabilities
keda.enabledfalse使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
keda.pollingInterval30检查每个触发器的间隔
keda.cooldownPeriod300在最后一个触发器报告活动后,将资源缩回 0 之前等待的时间
keda.minReplicaCountminReplicasKEDA 将资源缩小的最小副本数。
keda.maxReplicaCountmaxReplicasKEDA 将资源扩大的最大副本数。
keda.fallbackKEDA 回退配置,请参阅 文档
keda.hpaNamekeda-hpa-{scaled-object-name}KEDA 将创建的 HPA 资源名称。
keda.restoreToOriginalReplicaCount指定在删除 ScaledObject 后,是否应将目标资源缩放回原始副本数
keda.behaviorhpa.behavior向上和向下扩缩行为的规范。
keda.triggers激活目标资源扩缩的触发器列表,默认为根据 hpa.cpuhpa.memory 计算的触发器
metrics.enabledtrue是否应提供指标端点以供抓取
metrics.port8083指标端点端口
metrics.listenAddrnull指标监听地址。默认为 null,即同时绑定 IPv4 和 IPv6。
metrics.path/metrics指标端点路径
metrics.serviceMonitor.enabledfalse是否应创建 ServiceMonitor 以使 Prometheus Operator 管理指标抓取,请注意启用此选项会移除 prometheus.io 抓取注解
metrics.serviceMonitor.additionalLabels{}要添加到 ServiceMonitor 的额外标签
metrics.serviceMonitor.endpointConfig{}ServiceMonitor 的额外端点配置
metrics.annotations已弃用 设置显式指标注解。已由模板内容替代。
metrics.tls.enabled为 metrics/web_exporter 端点启用 TLS。默认为 tls.enabled
metrics.tls.secretNamemetrics/web_exporter 端点 TLS 证书和密钥的 Secret。默认为 tls.secretName
monitoring.ipWhitelist[0.0.0.0/0, ::/0]监控端点的 IP 白名单列表
monitoring.exporter.listenAddrnull指标监听地址。默认为 null,即同时绑定 IPv4 和 IPv6。
monitoring.exporter.enabledfalse启用 Web 服务器以暴露 Prometheus 指标,如果指标端口设置为监控导出器端口,则此设置会被 metrics.enabled 覆盖
monitoring.exporter.port8083指标导出器使用的端口号
psql.password.keypsql-passwordpsql Secret 中 psql 密码的键
psql.password.secretgitlab-postgrespsql Secret 名称
psql.port设置 PostgreSQL 服务器端口。优先于 global.psql.port
puma.disableWorkerKillertrue禁用 Puma 工作进程内存杀手
puma.workerMaxMemoryPuma 工作进程杀手的内存上限(以兆字节为单位)
puma.threads.min4Puma 线程数下限
puma.threads.max4Puma 线程数上限
puma.bindIp6true使用 Puma 绑定 IPv6 地址。当 IPv6 不可用时自动回退到 IPv4。
rack_attack.git_basic_auth{}详细信息请参阅 极狐GitLab 文档
global.registry.api.port5000Registry 端口
global.registry.api.protocolhttpRegistry 协议
global.registry.api.serviceNameregistryRegistry 服务名称
global.registry.enabledtrue启用容器镜像仓库集成(控制项目菜单中的仓库链接以及极狐GitLab 应用是否联系 Registry,例如在删除或转移项目时)。设置为 false 以完全禁用容器镜像仓库功能。
global.registry.tokenIssuergitlab-issuerRegistry 令牌颁发者
replicaCount1Webservice 副本数
resources.requests.cpu300mWebservice 最低 CPU
resources.requests.memory1.5GWebservice 最低内存
service.externalPort8080Webservice 暴露端口
securityContext.fsGroup1000启动 Pod 所用的组 ID
securityContext.runAsUser1000启动 Pod 所用的用户 ID
securityContext.fsGroupChangePolicy更改卷所有者和权限的策略(需要 Kubernetes 1.23)
securityContext.seccompProfile.typeRuntimeDefault要使用的 Seccomp 配置文件
containerSecurityContext覆盖启动容器所用的 securityContext
containerSecurityContext.runAsUser1000允许覆盖启动容器所用的特定安全上下文用户 ID
containerSecurityContext.allowPrivilegeEscalationfalse控制 Gitaly 容器的进程是否可以获得比其父进程更多的权限
containerSecurityContext.runAsNonRoottrue控制 Gitaly 容器是否以非 root 用户运行
containerSecurityContext.capabilities.drop[ "ALL" ]移除 Gitaly 容器的 Linux capabilities
serviceAccount.automountServiceAccountTokenfalse指示是否应将默认 ServiceAccount 访问令牌挂载到 Pod 中
serviceAccount.createfalse指示是否应创建 ServiceAccount
serviceAccount.enabledfalse指示是否使用 ServiceAccount
serviceAccount.nameServiceAccount 的名称。如果未设置,则使用完整的 Chart 名称
serviceLabels{}补充服务标签
service.internalPort8080Webservice 内部端口
service.typeClusterIPWebservice 服务类型
service.workhorseExternalPort8181Workhorse 暴露端口
service.workhorseInternalPort8181Workhorse 内部端口
service.loadBalancerIP分配给 LoadBalancer 的 IP 地址(如果云提供商支持)
service.loadBalancerSourceRanges允许访问 LoadBalancer 的 IP CIDR 列表(如果支持)。service.type = LoadBalancer 时必需
shell.authToken.keysecretshell Secret 中 shell 令牌的键
shell.authToken.secret{Release.Name}-gitlab-shell-secretShell 令牌 Secret
shell.portnilUI 生成的 SSH URL 中使用的端口号
shutdown.blackoutSeconds10收到关闭信号后保持 Webservice 运行的秒数。必须短于 deployment.terminationGracePeriodSeconds。同时配置 workhorse 健康检查监听器(如果启用)的关闭延迟。
tls.enabledfalseWebservice TLS 启用
tls.secretName{Release.Name}-webservice-tlsWebservice TLS Secret。secretName 必须指向 Kubernetes TLS Secret
tolerations[]Pod 分配的容忍标签
trusted_proxies[]详细信息请参阅 极狐GitLab 文档
workhorse.logFormatjson日志格式。有效格式:jsonstructuredtext
workerProcesses2Webservice 工作进程数
workhorse.keywatchertrue将 workhorse 订阅到 Redis。任何处理 /api/* 请求的部署都必须启用此选项,但对于其他部署可以安全禁用
workhorse.shutdownTimeoutglobal.webservice.workerTimeout + 1 (秒)等待所有 Web 请求从 Workhorse 清除的时间。示例:1min65s
workhorse.adoptCfRayHeaderfalse如果存在,采用传入的 Cf-Ray 头作为关联 ID。更多详情请参阅 Workhorse 文档
workhorse.trustedCIDRsForPropagation可信任用于传播关联 ID 的 CIDR 块列表。要使其生效,还必须在 workhorse.extraArgs 中使用 -propagateCorrelationID 选项。更多详情请参阅 Workhorse 文档
workhorse.trustedCIDRsForXForwardedFor可用于通过 X-Forwarded-For HTTP 头解析实际客户端 IP 的 CIDR 块列表。这与 workhorse.trustedCIDRsForPropagation 一起使用。更多详情请参阅 Workhorse 文档
workhorse.metadata.zipReaderLimitBytes限制 zip 读取器的可选字节数。在极狐GitLab 16.9 中引入。更多详情请参阅 Workhorse 文档
workhorse.containerSecurityContext覆盖启动容器所用的 securityContext
workhorse.containerSecurityContext.runAsUser1000启动容器所用的用户 ID
workhorse.containerSecurityContext.allowPrivilegeEscalationfalse控制容器的进程是否可以获得比其父进程更多的权限
workhorse.containerSecurityContext.runAsNonRoottrue控制容器是否以非 root 用户运行
workhorse.containerSecurityContext.capabilities.drop[ "ALL" ]移除 Gitaly 容器的 Linux capabilities
workhorse.livenessProbe.initialDelaySeconds20启动存活探针前的延迟时间
workhorse.livenessProbe.periodSeconds60执行存活探针的频率
workhorse.livenessProbe.timeoutSeconds30存活探针超时时间
workhorse.livenessProbe.successThreshold1存活探针失败后被视为成功所需的最小连续成功次数
workhorse.livenessProbe.failureThreshold3存活探针成功后被视为失败所需的最小连续失败次数
workhorse.healthcheckListener.enabledfalse启用 workhorse 健康检查监听器并禁用默认的 Puma 就绪探针。允许更可靠且更少波动地检测就绪状态。在极狐GitLab 18.5 中引入。
workhorse.healthcheckListener.port8182健康检查监听器使用的端口号。
workhorse.healthcheckListener.pumaControltrue查询 Puma 控制应用而不是 Puma 就绪端点。
workhorse.healthcheckListener.checkInterval10s对上游 Puma 服务器进行连续健康状态检查的时间间隔。
workhorse.healthcheckListener.timeout5sPuma 检查请求的超时时间。
workhorse.healthcheckListener.maxConsecutiveFailures1将 workhorse 标记为未就绪前的失败次数。
workhorse.healthcheckListener.minSuccessfullProbes1workhorse 被视为就绪前的成功探针次数。
workhorse.healthcheckListener.railsSkipInterval0s成功处理请求后恢复 Puma 就绪检查前的延迟时间。默认禁用。
workhorse.loadShedding.enabledfalse启用负载削减,当 Puma 的请求积压超过阈值时返回 503
workhorse.loadShedding.backlogThreshold50开始丢弃负载的积压阈值。
workhorse.loadShedding.backlogHysteresis0.8停用时的滞后因子(0.0 到 1.0)。当积压低于阈值 * 滞后因子时,负载削减停用。
workhorse.loadShedding.retryAfterSeconds0削减负载时 Retry-After 头的值(秒)。使用 0 表示立即重试(推荐用于 Kubernetes)。
workhorse.loadShedding.statusCode503削减负载时返回的 HTTP 状态码。使用自定义代码(如 529)以区分负载削减与其他 503 错误。
workhorse.loadShedding.strategymax计算有效积压的策略:“max”(默认)或“sum”。
workhorse.loadShedding.checkInterval1s采样 Puma 积压指标的频率。与健康检查间隔无关。
workhorse.loadShedding.timeout5s控制服务器请求的超时时间。
workhorse.monitoring.exporter.enabledfalse启用 workhorse 以暴露 Prometheus 指标,此设置会被 workhorse.metrics.enabled 覆盖
workhorse.monitoring.exporter.port9229workhorse Prometheus 指标使用的端口号
workhorse.monitoring.exporter.tls.enabledfalse设置为 true 时,在指标端点启用 TLS。这需要 为 Workhorse 启用 TLS
workhorse.metrics.enabledtrue是否应提供 workhorse 指标端点以供抓取
workhorse.metrics.port8083Workhorse 指标端点端口
workhorse.metrics.path/metricsWorkhorse 指标端点路径
workhorse.metrics.serviceMonitor.enabledfalse是否应创建 ServiceMonitor 以使 Prometheus Operator 管理 Workhorse 指标抓取
workhorse.metrics.serviceMonitor.additionalLabels{}要添加到 Workhorse ServiceMonitor 的额外标签
workhorse.metrics.serviceMonitor.endpointConfig{}Workhorse ServiceMonitor 的额外端点配置
workhorse.readinessProbe.initialDelaySeconds0启动就绪探针前的延迟时间
workhorse.readinessProbe.periodSeconds10执行就绪探针的频率
workhorse.readinessProbe.timeoutSeconds2就绪探针超时时间
workhorse.readinessProbe.successThreshold1就绪探针失败后被视为成功所需的最小连续成功次数
workhorse.readinessProbe.failureThreshold3就绪探针成功后被视为失败所需的最小连续失败次数
workhorse.imageScaler.maxProcs2可并发运行的图像缩放进程的最大数量
workhorse.imageScaler.maxFileSizeBytes250000缩放器处理的图像的最大文件大小(字节)
workhorse.tls.verifytrue设置为 true 时,强制 NGINX Ingress 验证 Workhorse 的 TLS 证书。对于自定义 CA,您还需要设置 workhorse.tls.caSecretName。对于自签名证书,必须设置为 false。如果使用 Gateway API,Gateway API 控制器始终验证证书。
workhorse.tls.secretName{Release.Name}-workhorse-tls包含 TLS 密钥和证书对的 TLS Secret 的名称。启用 Workhorse TLS 时必需。
workhorse.tls.caSecretName包含 CA 证书的 Secret 名称。这不是 TLS Secret,且必须只有 ca.crt 键。这用于 NGINX 的 TLS 验证。
workhorse.circuitBreaker.enabledfalse是否启用熔断器
workhorse.circuitBreaker.timeout60熔断器打开时转换到半开状态的持续时间(秒)
workhorse.circuitBreaker.interval180.熔断器关闭时清除连续失败的持续时间(秒)
workhorse.circuitBreaker.maxRequests1.熔断器半开时打开所需的失败请求数
workhorse.circuitBreaker.consecutiveFailures5.熔断器关闭时打开所需的连续失败请求数
webServerpuma选择用于请求处理的 Web 服务器(Webservice/Puma)
priorityClassName""允许配置 Pod 的 priorityClassName,用于在驱逐时控制 Pod 优先级
antiAffinity""允许您覆盖 Chart 全局值中的 antiAffinity 值,默认从全局读取,可设置为 softhard

Chart 配置示例#

extraEnv#

extraEnv 允许您在 Pod 中的所有容器中暴露额外的环境变量。

以下是 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

extraEnvFrom#

extraEnvFrom 允许您从其他数据源在 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 14deployments: 15 default: 16 extraEnvFrom: 17 CONFIG_STRING: 18 configMapKeyRef: 19 name: useful-config 20 key: some-string 21 # optional: boolean

image.pullSecrets#

pullSecrets 允许您通过认证私有仓库来为 Pod 拉取镜像。

有关私有仓库及其认证方法的更多详细信息,请参阅 Kubernetes 文档

以下是 pullSecrets 的使用示例:

yaml
1image: 2 repository: my.webservice.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 中。除非某些边车需要它才能正常工作(例如 Istio),否则不应启用此选项。
create布尔值(Boolean)false指示是否应创建 ServiceAccount。
enabled布尔值(Boolean)false指示是否使用 ServiceAccount。
name字符串(String)ServiceAccount 的名称。如果未设置,则使用完整的 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 允许您向 Webservice Pod 添加注解。例如:

yaml
annotations: kubernetes.io/example-annotation: annotation-value

strategy#

deployment.strategy 允许您更改 Deployment 更新策略。它定义了更新 Deployment 时如何重新创建 Pod。未提供时,使用集群默认值。 例如,如果您不想在滚动更新开始时创建额外的 Pod,并将最大不可用 Pod 数更改为 50%:

yaml
deployment: strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 50%

您也可以将更新策略类型更改为 Recreate,但请注意,这会在调度新 Pod 之前终止所有 Pod,并且在新 Pod 启动之前 Web UI 将不可用。在这种情况下,您无需定义 rollingUpdate,只需定义 type

yaml
deployment: strategy: type: Recreate

更多详细信息,请参阅 Kubernetes 文档

TLS#

一个 Webservice Pod 运行两个容器:

  • gitlab-workhorse
  • webservice

gitlab-workhorse#

Workhorse 支持 Web 和指标端点的 TLS。这将保护 Workhorse 与其他组件之间的通信,特别是 nginx-ingressgitlab-shellgitaly。TLS 证书应在通用名称(CN)或主题备用名称(SAN)中包含 Workhorse 服务主机名(例如 RELEASE-webservice-default.default.svc)。如果设置了 global.clusterDomain,请改用完全限定的 服务主机名。

请注意,可以存在多个 Webservice 部署, 因此您需要为不同的服务名称准备 TLS 证书。这 可以通过多个 SAN 或通配符证书来实现。

生成 TLS 证书后,为其创建一个 Kubernetes TLS Secret。您还需要创建 另一个仅包含 TLS 证书的 CA 证书且带有 ca.crt 键的 Secret。

可以通过将 global.workhorse.tls.enabled 设置为 true 来为 gitlab-workhorse 容器启用 TLS。您可以相应地传递自定义 Secret 名称给 gitlab.webservice.workhorse.tls.secretNameglobal.certificates.customCAs

gitlab.webservice.workhorse.tls.verifytrue(默认情况下)时,您 还需要将 CA 证书 Secret 名称传递给 gitlab.webservice.workhorse.tls.caSecretName。 这对于自签名证书和自定义 CA 是必需的。NGINX 使用此 Secret 来验证 Workhorse 的 TLS 证书。

yaml
1global: 2 workhorse: 3 tls: 4 enabled: true 5 certificates: 6 customCAs: 7 - secret: gitlab-workhorse-ca 8gitlab: 9 webservice: 10 workhorse: 11 tls: 12 verify: true 13 # secretName: gitlab-workhorse-tls 14 caSecretName: gitlab-workhorse-ca 15 monitoring: 16 exporter: 17 enabled: true 18 tls: 19 enabled: true

gitlab-workhorse 容器指标端点上的 TLS 继承自 global.workhorse.tls.enabled。请注意,仅当为 Workhorse 启用 TLS 时,指标端点上的 TLS 才可用。指标监听器使用由 gitlab.webservice.workhorse.tls.secretName 指定的相同 TLS 证书。

用于指标端点的 TLS 证书可能需要对包含的主题备用名称(SAN)进行额外考虑,特别是如果使用附带的 Prometheus Helm Chart。更多信息,请参阅 配置 Prometheus 抓取启用 TLS 的端点

webservice#

启用 TLS 的主要用例是通过 HTTPS 为 抓取 Prometheus 指标 提供加密。

为了让 Prometheus 使用 HTTPS 抓取 /metrics/ 端点,需要对证书的 CommonName 属性或 SubjectAlternativeName 条目进行额外配置。请参阅 配置 Prometheus 抓取启用 TLS 的端点 了解这些要求。

可以通过设置 gitlab.webservice.tls.enabledwebservice 容器上启用 TLS:

yaml
gitlab: webservice: tls: enabled: true # secretName: gitlab-webservice-tls

secretName 必须指向 Kubernetes TLS Secret。 例如,要使用本地证书和密钥创建 TLS Secret:

shell
kubectl create secret tls <secret name> --cert=path/to/puma.crt --key=path/to/puma.key

使用此 Chart 的基础版#

默认情况下,Helm Charts 使用极狐GitLab 企业版。如果需要,您 可以使用基础版。了解更多关于 两者之间的差异

要使用基础版,请将 image.repository 设置为 registry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ce,并将 workhorse.image 设置为 registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ce

全局设置#

我们在 Charts 之间共享一些通用的全局设置。有关常见配置选项(例如极狐GitLab 和 Registry 主机名),请参阅 全局文档

部署设置#

此 Chart 能够创建多个 Deployment 对象及其相关 资源。此功能允许使用基于路径的路由将发往极狐GitLab 应用的请求分发到多组 Pod 之间。

此 Map 的键(此示例中的 default)是每个 Deployment 的“名称”。default 将创建一个名为 RELEASE-webservice-default 的 Deployment、Service、HorizontalPodAutoscaler、PodDisruptionBudget 和 可选的 Ingress。

任何未提供的属性都将继承自 gitlab-webservice Chart 的默认值。

yaml
1deployments: 2 default: 3 ingress: 4 path: # Does not inherit or default. Leave blank to disable Ingress. 5 pathType: Prefix 6 provider: nginx 7 annotations: 8 # inherits `ingress.anntoations` 9 proxyConnectTimeout: # inherits `ingress.proxyConnectTimeout` 10 proxyReadTimeout: # inherits `ingress.proxyReadTimeout` 11 proxyBodySize: # inherits `ingress.proxyBodySize` 12 deployment: 13 annotations: # map 14 labels: # map 15 # inherits `deployment` 16 pod: 17 labels: # additional labels to .podLabels 18 annotations: # map 19 # inherit from .Values.annotations 20 service: 21 labels: # additional labels to .serviceLabels 22 annotations: # additional annotations to .service.annotations 23 # inherits `service.annotations` 24 hpa: 25 minReplicas: # defaults to .minReplicas 26 maxReplicas: # defaults to .maxReplicas 27 metrics: # optional replacement of HPA metrics definition 28 # inherits `hpa` 29 pdb: 30 maxUnavailable: # inherits `maxUnavailable` 31 resources: # `resources` for `webservice` container 32 # inherits `resources` 33 workhorse: # map 34 # inherits `workhorse` 35 extraEnv: # 36 # inherits `extraEnv` 37 extraEnvFrom: # 38 # inherits `extraEnvFrom` 39 puma: # map 40 # inherits `puma` 41 workerProcesses: # inherits `workerProcesses` 42 shutdown: 43 # inherits `shutdown` 44 nodeSelector: # map 45 # inherits `nodeSelector` 46 tolerations: # array 47 # inherits `tolerations` 48 priorityClassName: # inherits `priorityClassName`

部署 Ingress#

每个 deployments 条目都将继承 Chart 范围的 Ingress 设置。此处提供的任何值都将覆盖这些设置。除了 path 之外,所有设置都与这些设置相同。

yaml
1webservice: 2 deployments: 3 default: 4 ingress: 5 path: / 6 api: 7 ingress: 8 path: /api

path 属性直接填充到 Ingress 的 path 属性中,并允许控制定向到每个服务的 URI 路径。在上面的示例中, default 充当 catch-all 路径,而 api 接收 /api 下的所有流量。

您可以通过将 path 设置为空来禁用为给定 Deployment 创建关联的 Ingress 资源。请参阅下文,其中 internal-api 将永远不会接收外部流量。

yaml
1webservice: 2 deployments: 3 default: 4 ingress: 5 path: / 6 api: 7 ingress: 8 path: /api 9 internal-api: 10 ingress: 11 path:

Ingress 设置#

名称类型默认值描述
ingress.apiVersion字符串(String)用于 apiVersion 字段的值。
ingress.annotations映射(Map)请参阅 下文这些注解将用于每个 Ingress。例如:ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true
ingress.configureCertmanager布尔值(Boolean)切换 Ingress 注解 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place。更多信息请参阅 GitLab Pages 的 TLS 要求
ingress.enabled布尔值(Boolean)false控制是否为支持它们的服务创建 Ingress 对象的设置。当为 false 时,使用 global.ingress.enabled 设置值。
ingress.proxyBodySize字符串(String)512m请参阅下文
ingress.serviceUpstream布尔值(Boolean)true请参阅下文
ingress.tls.enabled布尔值(Boolean)true设置为 false 时,您为 GitLab Webservice 禁用 TLS。这主要适用于无法在 Ingress 级别使用 TLS 终止的情况,例如在 Ingress Controller 之前有 TLS 终止代理时。
ingress.tls.secretName字符串(String)(空)包含极狐GitLab URL 有效证书和密钥的 Kubernetes TLS Secret 的名称。未设置时,使用 global.ingress.tls.secretName 值。
ingress.tls.smardcardSecretName字符串(String)(空)如果启用,包含极狐GitLab 智能卡 URL 有效证书和密钥的 Kubernetes TLS Secret 的名称。未设置时,使用 global.ingress.tls.secretName 值。
ingress.tls.useGeoClass布尔值(Boolean)false使用 Geo Ingress 类(global.geo.ingressClass)覆盖 IngressClass。主要 Geo 站点必需。

annotations#

annotations 用于在 Webservice Ingress 上设置注解。

serviceUpstream#

这通过告诉 NGINX 直接联系 Service 本身作为上游,有助于更均匀地平衡 Webservice Pod 的流量。更多信息,请参阅 NGINX 文档

要覆盖此设置,请设置:

yaml
gitlab: webservice: ingress: serviceUpstream: "false"

proxyBodySize#

proxyBodySize 用于设置 NGINX 代理的最大请求体大小。这通常 需要允许比默认值更大的 Docker 镜像。 它等同于 Linux 软件包安装 中的 nginx['client_max_body_size'] 配置。 作为替代方案, 您也可以使用以下两个参数之一来设置请求体大小:

  • gitlab.webservice.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
  • global.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"

额外 Ingress#

可以通过设置 extraIngress.enabled=true 来部署额外的 Ingress。该 Ingress 命名为默认 Ingress 并带有 -extra 后缀,并支持与默认 Ingress 相同的设置。

Gateway API#

如果 GitLab Chart 配置为 通过 Gateway API 暴露,则每个 部署都将作为规则添加到 webservice Chart 的 HTTPRoute 中。

您可以通过将部署的 .rules=[] 设置为空来禁用给定部署在 HTTPRoute 中的规则。

yaml
1webservice: 2 deployments: 3 default: 4 gatewayRoute: 5 rules: 6 - matches: 7 - path: 8 type: PathPrefix 9 value: / 10 timeouts: 11 request: "20s" 12 backendRequest: "20s" 13 filters: 14 - type: RequestHeaderModifier 15 requestHeaderModifier: 16 remove: 17 - X-Forwarded-Host 18 api: 19 gatewayRoute: 20 rules: 21 - matches: 22 - path: 23 type: PathPrefix 24 value: /api 25 internal-api: 26 gatewayRoute: 27 rules: []

每条规则支持 matchestimeoutsfilters。Filters 接受一个 Gateway API HTTPRouteFilter 对象列表。

Gateway 与 Workhorse 之间的 TLS#

Workhorse TLS 启用时,您可以为每个 部署配置一个 BackendTLSPolicy,以便 Gateway 验证到每个 Workhorse 后端的 TLS 连接。设置 workhorse.tls.enabled: true 并在部署级别提供 CA Secret:

yaml
1global: 2 workhorse: 3 tls: 4 enabled: true 5gitlab: 6 webservice: 7 workhorse: 8 tls: 9 enabled: true 10 caSecretName: workhorse-tls-ca 11 deployments: 12 api: 13 workhorse: 14 tls: 15 enabled: true 16 caSecretName: workhorse-api-tls-ca

验证主机名默认为服务 DNS 名称(<service-name>.<namespace>.svc,或当设置 global.clusterDomain 时的完全限定名称)。 使用 backendTLSPolicy.hostname 覆盖它:

yaml
gitlab: webservice: backendTLSPolicy: hostname: workhorse.example.internal

验证 caCertificateRefs 默认为 kind: Secret 的对象。SecretConfigMap 均受支持。 使用 backendTLSPolicy.kind 覆盖它:

yaml
gitlab: webservice: backendTLSPolicy: kind: ConfigMap

有关完整详细信息,请参阅 Gateway API 文档。

自定义 ClientTrafficPolicy#

当使用 Envoy Gateway 时,Chart 会为 maingitlab-web)、geogitlab-web-geo)和 smartcardgitlab-smartcard-web) 监听器渲染作用域限定的 ClientTrafficPolicies。这些策略优先于 Webservice 监听器的网关范围 gatewayApiResources.envoy.clientTrafficPolicySpec

要为监听器自定义策略,请在 clientTrafficPolicy.<variant>.spec 下设置其规范:

yaml
1gitlab: 2 webservice: 3 clientTrafficPolicy: 4 main: 5 spec: 6 path: 7 escapedSlashesAction: KeepUnchanged 8 enableProxyProtocol: true

当您省略 spec.targetRefs 时,Chart 会注入匹配的 Gateway 监听器,因此您只需 设置要更改的字段。这恢复了为 Webservice 监听器配置 ClientTrafficPolicy 行为的能力。更多信息,请参阅 议题 6571

Envoy Gateway 的 HTTP/2 流控窗口默认值为:

  • 流为 64 KiB。
  • 连接为 1 MiB。

单个 HTTP/2 流受 initialStreamWindowSize / RTT 限制, 因此 64 KiB 的默认值在约 200 毫秒往返时间内将单个流限制为大约 300 KiB/s。

这些默认值尤其影响极狐GitLab Geo,其中辅助 站点通过高延迟站点间链路将 git 请求作为单个 HTTP/2 请求代理到主站点。

因此,maingeo 策略提高了这些默认值:

  • http2.initialStreamWindowSize: 8Mi
  • http2.initialConnectionWindowSize: 16Mi

您可以按上述方式为每个监听器覆盖这些值。在 spec 中覆盖一个键 会保留其他默认值,因为 Helm 会合并映射。

更多信息,请参阅 议题 6582

Gateway 超时#

当使用 Envoy Gateway 时,Chart 会渲染一个 BackendTrafficPolicy ,目标是 Webservice HTTPRoute,并具有以下默认超时:

超时Envoy Gateway 字段默认值
上游连接建立spec.timeout.tcp.connectTimeout300s
流不活动spec.timeout.http.streamIdleTimeout3600s
绝对请求截止时间gatewayRoute.rules[].timeouts0s (禁用)

streamIdleTimeout 是一个不活动超时:只要数据在任一方向流动,它就会重置,因此长时间运行的下载、上传和 WebSocket 连接在流量流动时不会中断,只有真正空闲的流 才会被回收。绝对 HTTPRoute 超时默认保持禁用(0s),因为绝对截止时间会终止合法的长时间运行的传输,无论其活动状态如何。

如果您要从 NGINX Ingress 迁移,请参阅 这些设置如何映射到 NGINX Ingress 超时选项

要更改默认值,请在 backendTrafficPolicy.spec 下整体覆盖规范。例如,要使用更严格的值:

yaml
1gitlab: 2 webservice: 3 backendTrafficPolicy: 4 spec: 5 timeout: 6 tcp: 7 connectTimeout: 15s 8 http: 9 streamIdleTimeout: 600s

当您省略 spec.targetRefs 时,Chart 会注入 Webservice HTTPRoute。设置 backendTrafficPolicy.spec: null 以跳过渲染策略。

避免完全禁用不活动超时。有限超时是针对慢速客户端(Slowloris 式)攻击的纵深防御层。客户端 连接行为还可以通过 ClientTrafficPolicy 进一步加强:例如, spec.timeout.http.requestReceivedTimeout 限制客户端传递完整请求所需的时间,而 spec.connection 配置连接限制。 Chart 对这些不设置默认值,因为它们可能会中断合法的 慢速上传。如果您的部署在 Gateway 前面没有边缘代理或 WAF,请考虑使用它们。

Gateway 不强制执行请求体大小限制:Envoy 流式传输请求 体没有大小上限,大小限制由极狐GitLab 本身强制执行 (例如,max_attachment_size、LFS 和产物限制)。

资源#

内存请求/限制#

每个 Pod 生成的工作进程数等于 workerProcesses,每个工作进程都使用 一些基线内存。我们建议:

  • 每个工作进程至少 1.25GB(requests.memory
  • 每个工作进程最多 1.5GB,外加主进程 1GB(limits.memory

请注意,所需资源取决于用户生成的工作负载,并可能根据极狐GitLab 应用中的更改或升级而在未来发生变化。

默认值:

yaml
1workerProcesses: 2 2resources: 3 requests: 4 memory: 2.5G # = 2 * 1.25G 5# limits: 6# memory: 4G # = (2 * 1.5G) + 950M

配置 4 个工作进程时:

yaml
1workerProcesses: 4 2resources: 3 requests: 4 memory: 5G # = 4 * 1.25G 5# limits: 6# memory: 7G # = (4 * 1.5G) + 950M

紧密打包或整合环境#

在使用激进装箱或节点整合的 Kubernetes 环境中 (例如,由启用了整合功能的 Karpenter 管理的 EKS 集群),节点 根据 Pod 请求(而非限制)进行配置和整合。当 limits.memory 高于 requests.memory 时,紧密打包的节点可能会耗尽内存,因为 Webservice Pod 使用的内存超出了其请求量,导致内存不足(OOM) 终止。这些 OOM 终止表现为间歇性 502 错误。

因此,AWS Karpenter 最佳实践建议 在使用整合功能时,将所有非 CPU 资源的请求设置为等于限制

在这些环境中,对于四个工作进程:

  • requests.memory 设置为等于 limits.memory,并留出额外空间: 9GB 而不是标准的 7GB。
  • 启用 Puma Worker Killer 以便在 Pod 达到其内存限制之前优雅地重启过大的工作进程。这可以防止导致 502 错误的 OOM 终止。
yaml
1workerProcesses: 4 2resources: 3 requests: 4 memory: 9G # equal to limits, per Karpenter consolidation best practice 5 limits: 6 memory: 9G 7puma: 8 disableWorkerKiller: false 9 workerMaxMemory: 1500 # MB per worker (~6GB total for 4 workers), matches the current default

默认的 workerMaxMemoryDEFAULT_PUMA_WORKER_RSS_LIMIT_MB 定义。 工作进程杀手不会立即生效:内存看门狗会按间隔(默认 60 秒)检查工作进程内存使用情况,并且工作进程必须连续多次(默认五次)超过 workerMaxMemory,这些也都在该文件中定义。因此,工作进程可能会在几分钟内超过 workerMaxMemory,因此请将 limits.memory 保持在所有工作进程的 workerMaxMemory 总和之上。

## 外部服务 {#external-services}

Redis#

Redis 文档已整合到 globals 页面中。请查阅该页面以获取最新的 Redis 配置选项。

PostgreSQL#

PostgreSQL 文档已整合到 globals 页面中。请查阅该页面以获取最新的 PostgreSQL 配置选项。

Webservice 部署中的 dependencies initContainer 会运行脚本来检查:

  • 极狐GitLab 的依赖项是否可用。
  • PostgreSQL 的数据库迁移是否已执行。

您可以使用 Webservice chart 的 extraEnv 配置键来控制这些脚本的行为。支持两个环境变量:

  • BYPASS_POST_DEPLOYMENT=true:如果所有常规迁移都已执行,且仅有部署后迁移待处理,则依赖项检查通过。
  • BYPASS_SCHEMA_VERSION=true(不推荐):即使常规迁移尚未执行,依赖项检查也会通过。使用此环境变量可能导致 Rails 部署在启动后出错,因为数据库模式与应用程序代码的预期不匹配。

Gitaly#

yaml
1global: 2 gitaly: 3 ## These settings are used by Gitaly clients: GitLab Rails, GitLab Shell, Workhorse. 4 client: 5 maxAttempts: 4 6 maxBackoff: '1.4s'
名称类型默认值描述
maxAttempts整数(Integer)4Gitaly 客户端在向客户端返回错误之前,失败时尝试重新发送请求的最大次数。
maxBackoff字符串(String)'1.4s'Gitaly 客户端在向客户端返回错误之前重试请求的最长时间(以秒为单位)。

其他 Gitaly 设置由 全局设置 配置。请参阅 Gitaly 配置文档

Registry#

yaml
1registry: 2 host: registry.example.com 3 port: 443 4 api: 5 protocol: http 6 host: registry.example.com 7 serviceName: registry 8 port: 5000 9 tokenIssuer: gitlab-issuer 10 certificate: 11 secret: gitlab-registry 12 key: registry-auth.key
名称类型默认值描述
api.host字符串(String)要使用的 Registry 服务器的主机名。如果使用了 api.serviceName,则可以省略此项。
api.port整数(Integer)5000连接 Registry API 的端口。
api.protocol字符串(String)Webservice 用于访问 Registry API 的协议。
api.serviceName字符串(String)registry运行 Registry 服务器的 service 的名称。如果此项存在且未设置 api.host,chart 将使用服务的主机名(以及当前的 .Release.Name)来替代 api.host 的值。当 Registry 作为整个 GitLab chart 的一部分使用时,这很方便。
certificate.key字符串(String)Secretkey 的名称,该 Secret 存放将作为 auth.token.rootcertbundle 提供给 registry 容器的证书包。
certificate.secret字符串(String)Kubernetes Secret 的名称,该 Secret 存放用于验证极狐GitLab 实例创建的令牌的证书包。
host字符串(String)用于在极狐GitLab UI 中向用户提供 Docker 命令的外部主机名。如果未设置,则回退到 registry.hostname 模板中设置的值。该模板根据 global.hosts 中设置的值确定 registry 主机名。有关更多信息,请参阅 Globals 文档
port整数(Integer)主机名中使用的外部端口。使用端口 80443 将导致 URL 使用 http/https 格式。其他端口将全部使用 http,并将端口附加到主机名末尾,例如 http://registry.example.com:8443
tokenIssuer字符串(String)gitlab-issuer认证令牌签发者的名称。此名称必须与 Registry 配置中使用的名称匹配,因为它会在发送时合并到令牌中。默认值 gitlab-issuer 与我们在 Registry chart 中使用的默认值相同。

Chart 设置#

以下值用于配置 Webservice Pod。

名称类型默认值描述
workerProcesses整数(Integer)2每个 Pod 运行的 Webservice worker 数量。您的集群中必须至少有 2 个 worker,极狐GitLab 才能正常运行。请注意,增加 workerProcesses 将使每个 worker 所需的内存增加约 400MB,因此您应相应更新 Pod 的 resources
minReplicas整数(Integer)2最小副本数
maxReplicas整数(Integer)10最大副本数
maxUnavailable整数(Integer)1最大不可用 Pod 数量限制

指标#

可以使用 metrics.enabled 值启用指标,并使用极狐GitLab 监控导出器来暴露指标端口。Pod 会被赋予 Prometheus 注解,或者如果 metrics.serviceMonitor.enabledtrue,则会创建 Prometheus Operator ServiceMonitor。也可以从 /-/metrics 端点抓取指标,但这需要在管理区域启用 极狐GitLab Prometheus 指标。GitLab Workhorse 指标也可以通过 workhorse.metrics.enabled 暴露,但这些指标无法使用 Prometheus 注解收集,因此需要将 workhorse.metrics.serviceMonitor.enabled 设置为 true,或使用外部 Prometheus 配置。

GitLab Shell#

GitLab Shell 在与 Webservice 通信时使用认证令牌。请使用共享的 Secret 与 GitLab Shell 和 Webservice 共享该令牌。

yaml
shell: authToken: secret: gitlab-shell-secret key: secret port:
名称类型默认值描述
authToken.key字符串(String)定义包含 authToken 的密钥(见下文)中键的名称。
authToken.secret字符串(String)定义要从中拉取的 Kubernetes Secret 的名称。
port整数(Integer)22在极狐GitLab UI 中生成 SSH URL 时使用的端口号。由 global.shell.port 控制。

WebServer 选项#

当前版本的 chart 支持 Puma Web 服务器。

Puma 特有选项:

名称类型默认值描述
puma.workerMaxMemory整数(Integer)Puma worker killer 的最大内存(以兆字节为单位)
puma.threads.min整数(Integer)4Puma 线程的最小数量
puma.threads.max整数(Integer)4Puma 线程的最大数量

Workhorse 负载削减#

负载削减通过返回配置的 HTTP 状态码来保护 Puma 免受过载影响,当请求积压超过配置的阈值时,允许反向代理将请求重试到其他实例。

要启用负载削减,请配置 loadShedding 参数:

yaml
1gitlab: 2 webservice: 3 workhorse: 4 loadShedding: 5 enabled: true 6 backlogThreshold: 50 7 retryAfterSeconds: 0 8 statusCode: 503 9 strategy: max
  • backlogThreshold 指定触发负载削减的积压请求数。
  • retryAfterSeconds 设置响应中 Retry-After 头的值。
  • statusCode 设置在削减负载时返回的 HTTP 状态码(默认值:503)。使用自定义代码(如 529)可以将负载削减响应与由数据库超时或 Gitaly 问题引起的其他 503 错误区分开来。
  • strategy 决定有效积压的计算方式:
    • max:使用所有 Puma worker 中的最大积压(默认)。
    • sum:使用所有 Puma worker 的积压总和。

代理配置#

为使负载削减有效工作,您的反向代理必须配置为在收到 503 响应时重试请求。这可以确保请求被分发到健康的实例。

有关 NGINX 示例,请在 Ingress 上配置以下注解:

yaml
ingress: annotations: nginx.ingress.kubernetes.io/proxy-next-upstream: "http_503" nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "3" nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "10s"

这些设置告诉 NGINX:

  • 503 响应时重试(负载削减会生成此响应)。
  • 在放弃前最多尝试 3 次。
  • 重试最多等待 10 秒。

您只应在 503 响应时重试,这是负载削减生成的特定信号。 避免在其他状态码(如 504(网关超时))或错误条件下重试,因为这会通过在中断期间重试可能在后端全部失败的请求来放大负载。

对于其他反向代理,请查阅其文档以了解等效的重试配置。关键是确保 503 响应会触发对其他后端实例的重试。

配置 networkpolicy#

本节控制 NetworkPolicy。 此配置是可选的,用于将 Pod 的 Egress 和 Ingress 限制到特定端点。

名称类型默认值描述
enabled布尔值(Boolean)false此设置启用 NetworkPolicy
ingress.enabled布尔值(Boolean)false当设置为 true 时,Ingress 网络策略将被激活。除非指定规则,否则这将阻止所有 Ingress 连接。
ingress.rules数组(Array)[]Ingress 策略的规则,详情请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和下面的示例
egress.enabled布尔值(Boolean)false当设置为 true 时,Egress 网络策略将被激活。除非指定规则,否则这将阻止所有 egress 连接。
egress.rules数组(Array)[]egress 策略的规则,详情请参阅 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 和下面的示例

网络策略示例#

如果启用了 Prometheus 导出器,webservice 服务需要来自 NGINX Ingress 和多个极狐GitLab Pod 的 Ingress 连接。通常它需要到多个位置的 Egress 连接。 此示例添加了以下网络策略:

  • 允许 Ingress 请求:
    • gitalygitlab-pagesgitlab-shellkasmailroomnginx-ingress Pod 到端口 8181
    • Prometheus Pod 到端口 808080839229
  • 允许 Egress 请求:
    • gitaly Pod 的端口 8075
    • kas Pod 的端口 8153
    • kube-dns 的端口 53
    • registry Pod 的端口 5000
    • 到外部数据库 172.16.0.10/32 的端口 5432
    • 到外部 Redis 172.16.0.11/32 的端口 6379
    • 到互联网 0.0.0.0/0 的端口 443
    • 到 AWS VPC 端点(如 S3 或 STS)172.16.1.0/24 的端口 443

提供的示例仅供参考,可能不完整。Webservice 需要出站连接到公共互联网,以访问 外部对象存储 上的镜像。该示例基于以下假设:kube-dns 部署在 kube-system 命名空间中,prometheus 部署在 monitoring 命名空间中,nginx-ingress 部署在 nginx-ingress 命名空间中。

yaml
1networkpolicy: 2 enabled: true 3 ingress: 4 enabled: true 5 rules: 6 - from: 7 - podSelector: 8 matchLabels: 9 app: gitaly 10 ports: 11 - port: 8181 12 - from: 13 - podSelector: 14 matchLabels: 15 app: gitlab-pages 16 ports: 17 - port: 8181 18 - from: 19 - podSelector: 20 matchLabels: 21 app: gitlab-shell 22 ports: 23 - port: 8181 24 - from: 25 - podSelector: 26 matchLabels: 27 app: kas 28 ports: 29 - port: 8181 30 - from: 31 - podSelector: 32 matchLabels: 33 app: mailroom 34 ports: 35 - port: 8181 36 - from: 37 - namespaceSelector: 38 matchLabels: 39 kubernetes.io/metadata.name: nginx-ingress 40 podSelector: 41 matchLabels: 42 app: nginx-ingress 43 component: controller 44 ports: 45 - port: 8181 46 - from: 47 - namespaceSelector: 48 matchLabels: 49 kubernetes.io/metadata.name: monitoring 50 podSelector: 51 matchLabels: 52 app: prometheus 53 component: server 54 release: gitlab 55 ports: 56 - port: 9229 57 - port: 8080 58 - port: 8083 59 egress: 60 enabled: true 61 rules: 62 - to: 63 - podSelector: 64 matchLabels: 65 app: gitaly 66 ports: 67 - port: 8075 68 - to: 69 - podSelector: 70 matchLabels: 71 app: kas 72 ports: 73 - port: 8153 74 - to: 75 - ipBlock: 76 cidr: 0.0.0.0/0 77 except: 78 - 10.0.0.0/8 79 ports: 80 - port: 443 81 - to: 82 - ipBlock: 83 cidr: 172.16.0.10/32 84 ports: 85 - port: 5432 86 - to: 87 - ipBlock: 88 cidr: 172.16.0.11/32 89 ports: 90 - port: 6379 91 - to: 92 - namespaceSelector: 93 matchLabels: 94 kubernetes.io/metadata.name: kube-system 95 podSelector: 96 matchLabels: 97 k8s-app: kube-dns 98 ports: 99 - port: 53 100 protocol: UDP

LoadBalancer 服务#

如果 service.type 设置为 LoadBalancer,您可以选择指定 service.loadBalancerIP,以使用用户指定的 IP 创建 LoadBalancer(如果您的云提供商支持)。

service.type 设置为 LoadBalancer 时,您还必须设置 service.loadBalancerSourceRanges,以限制可以访问 LoadBalancer 的 CIDR 范围(如果您的云提供商支持)。 目前这是必需的,因为存在一个指标端口被暴露的问题。

有关 LoadBalancer 服务类型的更多信息,请参阅 Kubernetes 文档

yaml
service: type: LoadBalancer loadBalancerIP: 1.2.3.4 loadBalancerSourceRanges: - 10.0.0.0/8

配置 KEDA#

keda 部分允许安装 KEDA ScaledObjects 而不是常规的 HorizontalPodAutoscalers。 此配置是可选的,当需要基于自定义或外部指标进行自动扩缩时可以使用。

大多数设置默认使用 hpa 部分中设置的值(如适用)。

如果满足以下条件,将根据 hpa 部分中设置的 CPU 和内存阈值自动添加 CPU 和内存触发器:

  • 未设置 triggers
  • 相应的 request.cpu.requestrequest.memory.request 设置也设置为非零值。

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

有关这些设置的更多详细信息,请参阅 KEDA 文档

名称类型默认值描述
enabled布尔值(Boolean)false使用 KEDA ScaledObjects 而不是 HorizontalPodAutoscalers
pollingInterval整数(Integer)30检查每个触发器的间隔
cooldownPeriod整数(Integer)300在最后一个触发器报告活动后,将资源缩回 0 之前等待的时间
minReplicaCount整数(Integer)minReplicasKEDA 将资源缩容到的最小副本数。
maxReplicaCount整数(Integer)maxReplicasKEDA 将资源扩容到的最大副本数。
fallback映射(Map)KEDA 回退配置,请参阅 文档
hpaName字符串(String)keda-hpa-{scaled-object-name}KEDA 将创建的 HPA 资源的名称。
restoreToOriginalReplicaCount布尔值(Boolean)指定在删除 ScaledObject 后,是否应将目标资源缩放回原始副本数
behavior映射(Map)hpa.behavior扩容和缩容行为的规范。
triggers数组(Array)激活目标资源扩缩的触发器列表,默认为根据 hpa.cpuhpa.memory 计算的触发器