使用极狐GitLab Webservice chart

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

webservice 子图为极狐GitLab Rails 网络服务器提供了每个 pod 两个 Webservice 工作线程,这是极狐GitLab 中单个 pod 能够处理任何 Web 请求所需的最小值。

该 chart 的 pod 使用两个容器:gitlab-workhorsewebservice极狐GitLab Workhorse 监听 8181 端口,始终 应该是传入流量到达 pod 的目标。webservice 容纳极狐GitLab Rails 代码库,监听 8080 端口,并可用于指标收集。webservice 不应该直接接收正常流量。

要求#

此图依赖于 Redis、PostgreSQL、Gitaly 和 Registry 服务,可以作为完整极狐GitLab 图的一部分,也可以作为可从部署此图的 Kubernetes 集群访问的外部服务。

配置#

webservice 图的配置如下:全局设置部署设置入口设置外部服务,和 chart 设置

安装命令行选项#

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

参数默认值描述
annotationsPod 注释
podLabels补充 Pod 标签。不会用于选择器。
common.labels应用于此图创建的所有对象的补充标签。
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{}允许配置部署使用的更新策略。如果未提供,则使用集群默认值。
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.repository初始化容器镜像
init.image.tag初始化容器镜像标签
init.containerSecurityContext.runAsUser1000初始化容器特定:容器应以其启动的用户 ID
init.containerSecurityContext.allowPrivilegeEscalationfalse初始化容器特定:控制进程是否可以获得比其父进程更多的权限
init.containerSecurityContext.runAsNonRoottrue初始化容器特定:控制容器是否以非 root 用户运行
init.containerSecurityContext.capabilities.drop[ "ALL" ]初始化容器特定:删除容器的 Linux 能力
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 计算的触发器
metrics.enabledtrue是否应为抓取提供指标端点
metrics.port8083指标端点端口
metrics.path/metrics指标端点路径
metrics.serviceMonitor.enabledfalse是否应创建 ServiceMonitor 以启用 Prometheus Operator 管理指标抓取,注意启用此功能会删除 prometheus.io 抓取注释
metrics.serviceMonitor.additionalLabels{}添加到 ServiceMonitor 的附加标签
metrics.serviceMonitor.endpointConfig{}ServiceMonitor 的附加端点配置
metrics.annotations已弃用 设置显式指标注释。替换为模板内容。
metrics.tls.enabled启用指标/web_exporter 端点的 TLS。默认为 tls.enabled
metrics.tls.secretName指标/web_exporter 端点 TLS 证书和密钥的密钥。默认为 tls.secretName
minio.bucketgit-lfs使用 MinIO 时的存储桶名称
minio.port9000MinIO 服务的端口
minio.serviceNameminio-svcMinIO 服务的名称
monitoring.ipWhitelist[0.0.0.0/0]监控端点的 IP 白名单列表
monitoring.exporter.enabledfalse启用 Webserver 以公开 Prometheus 指标,如果监控导出端口设置为监控导出器端口,则此设置将被 metrics.enabled 覆盖
monitoring.exporter.port8083指标导出器使用的端口号
psql.password.keypsql-passwordpsql 密钥中的 psql 密码密钥
psql.password.secretgitlab-postgrespsql 密钥名称
psql.port设置 PostgreSQL 服务器端口。优先于 global.psql.port
puma.disableWorkerKillertrue禁用 Puma 工作者内存杀手
puma.workerMaxMemoryPuma 工作者内存杀手的最大内存(以 MB 为单位)
puma.threads.min4Puma 线程的最小数量
puma.threads.max4Puma 线程的最大数量
rack_attack.git_basic_auth{}有关详细信息,请参阅 极狐GitLab 文档
redis.serviceNameredisRedis 服务名称
global.registry.api.port5000Registry 端口
global.registry.api.protocolhttpRegistry 协议
global.registry.api.serviceNameregistryRegistry 服务名称
global.registry.enabledtrue在所有项目菜单中添加/删除注册表链接
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 能力
serviceAccount.automountServiceAccountTokenfalse指示是否应在 pod 中挂载默认的 ServiceAccount 访问令牌
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 列表(如果支持)服务类型 = LoadBalancer 必需
shell.authToken.keysecretshell 密钥中的 shell 令牌密钥
shell.authToken.secret{Release.Name}-gitlab-shell-secretShell 令牌密钥
shell.portnil由 UI 生成的 SSH URL 中使用的端口号
shutdown.blackoutSeconds10收到关闭后保持 Webservice 运行的秒数,注意这必须比 deployment.terminationGracePeriodSeconds
tls.enabledfalseWebservice TLS 启用
tls.secretName{Release.Name}-webservice-tlsWebservice TLS 密钥。 secretName 必须指向 Kubernetes TLS 密钥
tolerations[]Pod 分配的容忍标签
trusted_proxies[]有关详细信息,请参阅 极狐GitLab 文档
workhorse.logFormatjson日志格式。有效格式:jsonstructuredtext
workerProcesses2Webservice 工作线程数
workhorse.keywatchertrue将 workhorse 订阅到 Redis。任何服务请求 /api/* 的部署都需要此功能,但可以安全地禁用其他部署
workhorse.shutdownTimeoutglobal.webservice.workerTimeout + 1 (秒)等待所有 Web 请求从 Workhorse 清除的时间。示例:1min65s
workhorse.trustedCIDRsForPropagation可用于传播相关 ID 的 CIDR 块列表。 -propagateCorrelationID 选项还必须在 workhorse.extraArgs 中使用才能实现此功能。
workhorse.trustedCIDRsForXForwardedFor可用于通过 X-Forwarded-For HTTP 头解析实际客户端 IP 的 CIDR 块列表。与 workhorse.trustedCIDRsForPropagation 一起使用。
workhorse.metadata.zipReaderLimitBytes用于限制 zip 阅读器的可选字节数。在极狐GitLab 16.9 中引入。
workhorse.containerSecurityContext覆盖容器的 securityContext,容器在其下启动
workhorse.containerSecurityContext.runAsUser1000容器应以其启动的用户 ID
workhorse.containerSecurityContext.allowPrivilegeEscalationfalse控制容器的进程是否可以获得比其父进程更多的权限
workhorse.containerSecurityContext.runAsNonRoottrue控制容器是否以非 root 用户运行
workhorse.containerSecurityContext.capabilities.drop[ "ALL" ]删除 Gitaly 容器的 Linux 能力
workhorse.livenessProbe.initialDelaySeconds20启动活性探测前的延迟
workhorse.livenessProbe.periodSeconds60执行活性探测的频率
workhorse.livenessProbe.timeoutSeconds30活性探测超时时的时间
workhorse.livenessProbe.successThreshold1活性探测失败后被视为成功的最小连续成功次数
workhorse.livenessProbe.failureThreshold3活性探测成功后被视为失败的最小连续失败次数
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
workhorse.tls.secretName{Release.Name}-workhorse-tls包含 TLS 密钥和证书对的 TLS 密钥 的名称。当 Workhorse TLS 启用时,这是必需的。
workhorse.tls.caSecretName包含 CA 证书的密钥名称。这不是TLS 密钥,并且只能具有 ca.crt 密钥。由 NGINX 用于验证 Workhorse 的 TLS 证书。
webServerpuma选择用于请求处理的 Web 服务器(Webservice/Puma)
priorityClassName""允许配置 pod 的 priorityClassName,用于在驱逐情况下控制 pod 优先级

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 中。

名称类型默认值描述
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 允许您向 Webservice pod 添加注释。例如:

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

strategy#

deployment.strategy 允许您更改部署更新策略。它定义了在更新部署时如何重新创建 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

TLS#

一个 Webservice pod 运行两个容器:

  • gitlab-workhorse
  • webservice

gitlab-workhorse#

Workhorse 支持 Web 和指标端点的 TLS。这将保护 Workhorse 与其他组件之间的通信,特别是 nginx-ingressgitlab-shellgitaly。TLS 证书应在公共名称(CN)或备用名称(SAN)中包括 Workhorse 服务主机名(例如 RELEASE-webservice-default.default.svc)。

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

生成 TLS 证书后,为其创建一个 Kubernetes TLS 密钥。您还需要创建另一个仅包含 TLS 证书 CA 证书的密钥,并使用 ca.crt 密钥。

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

gitlab.webservice.workhorse.tls.verifytrue(默认情况下是),您还需要将 CA 证书密钥名称传递给 gitlab.webservice.workhorse.tls.caSecretName。这对于自签名证书和自定义 CA 是必要的。此密钥由 NGINX 用于验证 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 图。有关更多信息,请参阅 配置 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 密钥。例如,要使用本地证书和密钥创建 TLS 密钥:

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

使用此 chart 的基础版#

默认情况下,Helm chart 使用极狐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

全局设置#

我们在 chart 之间共享一些通用的全局设置。请参阅 全局文档 以获取有关常见配置选项的更多信息,例如极狐GitLab 和 Registry 主机名。

部署设置#

此 chart 可以创建多个部署对象及其相关资源。此功能允许通过基于路径的路由将请求分配到极狐GitLab 应用程序的多个 Pod 集。

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

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

yaml
1deployments: 2 default: 3 ingress: 4 path: # 不继承或默认。留空以禁用 Ingress。 5 pathType: Prefix 6 provider: nginx 7 annotations: 8 # 继承 `ingress.anntoations` 9 proxyConnectTimeout: # 继承 `ingress.proxyConnectTimeout` 10 proxyReadTimeout: # 继承 `ingress.proxyReadTimeout` 11 proxyBodySize: # 继承 `ingress.proxyBodySize` 12 deployment: 13 annotations: # map 14 labels: # map 15 # 继承 `deployment` 16 pod: 17 labels: # 附加标签到 .podLabels 18 annotations: # map 19 # 从 .Values.annotations 继承 20 service: 21 labels: # 附加标签到 .serviceLabels 22 annotations: # 附加注释到 .service.annotations 23 # 继承 `service.annotations` 24 hpa: 25 minReplicas: # 默认为 .minReplicas 26 maxReplicas: # 默认为 .maxReplicas 27 metrics: # 可选替换 HPA 指标定义 28 # 继承 `hpa` 29 pdb: 30 maxUnavailable: # 继承 `maxUnavailable` 31 resources: # `webservice` 容器的 `resources` 32 # 继承 `resources` 33 workhorse: # map 34 # 继承 `workhorse` 35 extraEnv: # 36 # 继承 `extraEnv` 37 extraEnvFrom: # 38 # 继承 `extraEnvFrom` 39 puma: # map 40 # 继承 `puma` 41 workerProcesses: # 继承 `workerProcesses` 42 shutdown: 43 # 继承 `shutdown` 44 nodeSelector: # map 45 # 继承 `nodeSelector` 46 tolerations: # array 47 # 继承 `tolerations`

部署入口#

每个 deployments 条目将继承来自 chart 范围的 入口设置。此处提供的任何值将覆盖那些提供的值。除了 path,所有设置都与此相同。

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

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

您可以通过将 path 设置为空来禁用为给定部署创建相关 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.apiVersionString要在 apiVersion 字段中使用的值。
ingress.annotationsMap参见 下文这些注释将用于每个 Ingress。例如:ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true
ingress.configureCertmanagerBoolean切换 Ingress 注释 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place。有关更多信息,请参阅 极狐GitLab Pages 的 TLS 要求
ingress.enabledBooleanfalse控制是否为支持它们的服务创建 Ingress 对象的设置。当为 false 时,使用 global.ingress.enabled 设置值。
ingress.proxyBodySizeString512m参见下文
ingress.serviceUpstreamBooleantrue参见下文
ingress.tls.enabledBooleantrue设置为 false 时,禁用极狐GitLab Webservice 的 TLS。主要用于无法在 Ingress 级别使用 TLS 终止的情况,例如在 Ingress 控制器之前有 TLS 终止代理的情况。
ingress.tls.secretNameString(空)包含极狐GitLab URL 有效证书和密钥的 Kubernetes TLS 密钥的名称。如果未设置,则使用 global.ingress.tls.secretName 值。
ingress.tls.smardcardSecretNameString(空)如果启用了极狐GitLab 智能卡 URL,包含有效证书和密钥的 Kubernetes TLS 密钥的名称。如果未设置,则使用 global.ingress.tls.secretName 值。
ingress.tls.useGeoClassBooleanfalse使用 Geo Ingress 类(global.geo.ingressClass)覆盖 IngressClass。主 Geo 站点需要此功能。

annotations#

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

serviceUpstream#

这有助于通过告诉 NGINX 直接联系服务本身作为上游来更均匀地平衡 Webservice pod 的流量。

要覆盖此项,请设置:

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"

额外入口#

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

资源#

内存请求/限制#

每个 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

外部服务#

Redis#

Redis 文档已合并到 全局 页面中。请查阅此页面以获取最新的 Redis 配置选项。

PostgreSQL#

PostgreSQL 文档已合并到 全局 页面中。请查阅此页面以获取最新的 PostgreSQL 配置选项。

Gitaly#

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

MinIO#

yaml
minio: serviceName: 'minio-svc' port: 9000
名称类型默认值描述
portInteger9000到达 MinIO Service 的端口号。
serviceNameStringminio-svcMinIO pod 暴露的 Service 的名称。

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.hostString要使用的 Registry 服务器的主机名。可以省略此项,而使用 api.serviceName
api.portInteger5000连接到 Registry API 的端口。
api.protocolStringWebservice 应用于访问 Registry API 的协议。
api.serviceNameStringregistry运行 Registry 服务器的 service 的名称。如果存在此项,并且不存在 api.host,则 chart 将以模板化服务主机名(和当前 .Release.Name)代替 api.host 值。使用 Registry 作为整体极狐GitLab 图的一部分时,这很方便。
certificate.keyStringSecret 中的 key 的名称,该密钥中包含将提供给 registry 容器的 auth.token.rootcertbundle
certificate.secretString包含极狐GitLab 实例创建的令牌的证书包的 Kubernetes Secret 的名称。
hostString用于在极狐GitLab UI 中向用户提供 Docker 命令的外部主机名。回退到 registry.hostname 模板中设置的值。该模板根据在 global.hosts 中设置的值确定注册表主机名。有关更多信息,请参阅 全局文档
portInteger主机名中使用的外部端口。使用端口 80443 将导致 URL 以 http/https 开头。其他端口将全部使用 http,并将端口附加到主机名末尾,例如 http://registry.example.com:8443
tokenIssuerStringgitlab-issuer认证令牌发行者的名称。此名称必须与 Registry 配置中使用的名称匹配,因为它在发送令牌时会被合并。默认的 gitlab-issuer 是我们在 Registry chart 中使用的相同默认值。

Chart 设置#

以下值用于配置 Webservice Pods。

名称类型默认值描述
workerProcessesInteger2每个 pod 运行的 Webservice workers 数量。为了极狐GitLab 正常运行,您的集群中必须至少有 2 个 workers。请注意,增加 workerProcesses 会使每个 worker 需要大约 400MB 的内存,因此应相应地更新 pod 的 resources
minReplicasInteger2最小副本数
maxReplicasInteger10最大副本数
maxUnavailableInteger1最多允许不可用的 Pods 数量限制

指标#

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

极狐GitLab Shell#

极狐GitLab Shell 在与 Webservice 的通信中使用 Auth Token。使用共享的 Secret 与极狐GitLab Shell 和 Webservice 共享该令牌。

yaml
shell: authToken: secret: gitlab-shell-secret key: secret port:
名称类型默认值描述
authToken.keyString定义 Secret 中包含 authToken 的键名。
authToken.secretString定义要提取的 Kubernetes Secret 名称。
portInteger22用于在极狐GitLab UI 中生成 SSH URLs 的端口号,由 global.shell.port 控制。

WebServer 选项#

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

Puma 独特选项:

名称类型默认值描述
puma.workerMaxMemoryIntegerPuma worker killer 的最大内存(以 MB 为单位)
puma.threads.minInteger4Puma 线程的最小数量
puma.threads.maxInteger4Puma 线程的最大数量

配置 networkpolicy#

此部分控制 NetworkPolicy。此配置是可选的,用于限制 Pods 对特定端点的 Egress 和 Ingress。

名称类型默认值描述
enabledBooleanfalse此设置启用 NetworkPolicy
ingress.enabledBooleanfalse设置为 true 时,将激活 Ingress 网络策略。这将阻止所有 Ingress 连接,除非指定了规则。
ingress.rulesArray[]Ingress 策略的规则,详细信息参见 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 及以下示例
egress.enabledBooleanfalse设置为 true 时,将激活 Egress 网络策略。这将阻止所有 Egress 连接,除非指定了规则。
egress.rulesArray[]Egress 策略的规则,详细信息参见 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 及以下示例

示例网络策略#

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

  • 允许的 Ingress 请求:
    • 来自 pods gitalygitlab-pagesgitlab-shellkasmailroomnginx-ingress 到端口 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-systemprometheus 部署到命名空间 monitoringnginx-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

名称类型默认值描述
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 计算的触发器