使用极狐GitLab Webservice chart
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
webservice 子图为极狐GitLab Rails 网络服务器提供了每个 pod 两个 Webservice 工作线程,这是极狐GitLab 中单个 pod 能够处理任何 Web 请求所需的最小值。
该 chart 的 pod 使用两个容器:gitlab-workhorse 和 webservice。 极狐GitLab Workhorse 监听 8181 端口,始终 应该是传入流量到达 pod 的目标。webservice 容纳极狐GitLab Rails 代码库,监听 8080 端口,并可用于指标收集。webservice 不应该直接接收正常流量。
要求
此图依赖于 Redis、PostgreSQL、Gitaly 和 Registry 服务,可以作为完整极狐GitLab 图的一部分,也可以作为可从部署此图的 Kubernetes 集群访问的外部服务。
配置
webservice 图的配置如下:全局设置,部署设置,入口设置,外部服务,和 chart 设置。
安装命令行选项
下表包含所有可以通过 --set 标志提供给 helm install 命令的 chart 配置。
参数 | 默认值 | 描述 |
---|---|---|
annotations | Pod 注释 | |
podLabels | 补充 Pod 标签。不会用于选择器。 | |
common.labels | 应用于此图创建的所有对象的补充标签。 | |
deployment.terminationGracePeriodSeconds | 30 | Kubernetes 等待 pod 退出的秒数,注意这必须比 shutdown.blackoutSeconds 长 |
deployment.livenessProbe.initialDelaySeconds | 20 | 启动活性探测前的延迟 |
deployment.livenessProbe.periodSeconds | 60 | 执行活性探测的频率 |
deployment.livenessProbe.timeoutSeconds | 30 | 活性探测超时时的时间 |
deployment.livenessProbe.successThreshold | 1 | 活性探测失败后被视为成功的最小连续成功次数 |
deployment.livenessProbe.failureThreshold | 3 | 活性探测成功后被视为失败的最小连续失败次数 |
deployment.readinessProbe.initialDelaySeconds | 0 | 启动就绪探测前的延迟 |
deployment.readinessProbe.periodSeconds | 10 | 执行就绪探测的频率 |
deployment.readinessProbe.timeoutSeconds | 2 | 就绪探测超时时的时间 |
deployment.readinessProbe.successThreshold | 1 | 就绪探测失败后被视为成功的最小连续成功次数 |
deployment.readinessProbe.failureThreshold | 3 | 就绪探测成功后被视为失败的最小连续失败次数 |
deployment.strategy | {} | 允许配置部署使用的更新策略。如果未提供,则使用集群默认值。 |
enabled | true | Webservice 启用标志 |
extraContainers | 包含要包含的容器列表的多行文本样式字符串 | |
extraInitContainers | 要包含的额外初始化容器列表 | |
extras.google_analytics_id | nil | 前端的 Google Analytics ID |
extraVolumeMounts | 要执行的额外卷挂载列表 | |
extraVolumes | 要创建的额外卷列表 | |
extraEnv | 要暴露的额外环境变量列表 | |
extraEnvFrom | 要从其他数据源中暴露的额外环境变量列表 | |
gitlab.webservice.workhorse.image | registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ee | Workhorse 镜像库 |
gitlab.webservice.workhorse.tag | Workhorse 镜像标签 | |
hpa.behavior | {scaleDown: {stabilizationWindowSeconds: 300 }} | 行为包含缩放行为的规格(需要 autoscaling/v2beta2 或更高版本) |
hpa.customMetrics | [] | 自定义指标包含用于计算所需副本数量的规格(覆盖默认使用的在 targetAverageUtilization 中配置的平均 CPU 利用率) |
hpa.cpu.targetType | AverageValue | 设置自动缩放 CPU 目标类型,必须为 Utilization 或 AverageValue |
hpa.cpu.targetAverageValue | 1 | 设置自动缩放 CPU 目标值 |
hpa.cpu.targetAverageUtilization | 设置自动缩放 CPU 目标利用率 | |
hpa.memory.targetType | 设置自动缩放内存目标类型,必须为 Utilization 或 AverageValue | |
hpa.memory.targetAverageValue | 设置自动缩放内存目标值 | |
hpa.memory.targetAverageUtilization | 设置自动缩放内存目标利用率 | |
hpa.targetAverageValue | 已弃用 设置自动缩放 CPU 目标值 | |
sshHostKeys.mount | false | 是否挂载包含公共 SSH 密钥的极狐GitLab Shell 密钥。 |
sshHostKeys.mountName | ssh-host-keys | 挂载卷的名称。 |
sshHostKeys.types | [dsa,rsa,ecdsa,ed25519] | 要挂载的 SSH 密钥类型列表。 |
image.pullPolicy | Always | Webservice 镜像拉取策略 |
image.pullSecrets | 镜像库的密钥 | |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ee | Webservice 镜像库 |
image.tag | Webservice 镜像标签 | |
init.image.repository | 初始化容器镜像 | |
init.image.tag | 初始化容器镜像标签 | |
init.containerSecurityContext.runAsUser | 1000 | 初始化容器特定:容器应以其启动的用户 ID |
init.containerSecurityContext.allowPrivilegeEscalation | false | 初始化容器特定:控制进程是否可以获得比其父进程更多的权限 |
init.containerSecurityContext.runAsNonRoot | true | 初始化容器特定:控制容器是否以非 root 用户运行 |
init.containerSecurityContext.capabilities.drop | [ "ALL" ] | 初始化容器特定:删除容器的 Linux 能力 |
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 计算的触发器 | |
metrics.enabled | true | 是否应为抓取提供指标端点 |
metrics.port | 8083 | 指标端点端口 |
metrics.path | /metrics | 指标端点路径 |
metrics.serviceMonitor.enabled | false | 是否应创建 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.bucket | git-lfs | 使用 MinIO 时的存储桶名称 |
minio.port | 9000 | MinIO 服务的端口 |
minio.serviceName | minio-svc | MinIO 服务的名称 |
monitoring.ipWhitelist | [0.0.0.0/0] | 监控端点的 IP 白名单列表 |
monitoring.exporter.enabled | false | 启用 Webserver 以公开 Prometheus 指标,如果监控导出端口设置为监控导出器端口,则此设置将被 metrics.enabled 覆盖 |
monitoring.exporter.port | 8083 | 指标导出器使用的端口号 |
psql.password.key | psql-password | psql 密钥中的 psql 密码密钥 |
psql.password.secret | gitlab-postgres | psql 密钥名称 |
psql.port | 设置 PostgreSQL 服务器端口。优先于 global.psql.port | |
puma.disableWorkerKiller | true | 禁用 Puma 工作者内存杀手 |
puma.workerMaxMemory | Puma 工作者内存杀手的最大内存(以 MB 为单位) | |
puma.threads.min | 4 | Puma 线程的最小数量 |
puma.threads.max | 4 | Puma 线程的最大数量 |
rack_attack.git_basic_auth | {} | 有关详细信息,请参阅 极狐GitLab 文档 |
redis.serviceName | redis | Redis 服务名称 |
global.registry.api.port | 5000 | Registry 端口 |
global.registry.api.protocol | http | Registry 协议 |
global.registry.api.serviceName | registry | Registry 服务名称 |
global.registry.enabled | true | 在所有项目菜单中添加/删除注册表链接 |
global.registry.tokenIssuer | gitlab-issuer | Registry 令牌发行者 |
replicaCount | 1 | Webservice 副本数量 |
resources.requests.cpu | 300m | Webservice 最小 CPU |
resources.requests.memory | 1.5G | Webservice 最小内存 |
service.externalPort | 8080 | Webservice 暴露端口 |
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 | 允许覆盖容器在其下启动的特定安全上下文用户 ID |
containerSecurityContext.allowPrivilegeEscalation | false | 控制 Gitaly 容器的进程是否可以获得比其父进程更多的权限 |
containerSecurityContext.runAsNonRoot | true | 控制 Gitaly 容器是否以非 root 用户运行 |
containerSecurityContext.capabilities.drop | [ "ALL" ] | 删除 Gitaly 容器的 Linux 能力 |
serviceAccount.automountServiceAccountToken | false | 指示是否应在 pod 中挂载默认的 ServiceAccount 访问令牌 |
serviceAccount.create | false | 指示是否应创建 ServiceAccount |
serviceAccount.enabled | false | 指示是否使用 ServiceAccount |
serviceAccount.name | ServiceAccount 的名称。如果未设置,则使用完整的 chart 名称 | |
serviceLabels | {} | 补充服务标签 |
service.internalPort | 8080 | Webservice 内部端口 |
service.type | ClusterIP | Webservice 服务类型 |
service.workhorseExternalPort | 8181 | Workhorse 暴露端口 |
service.workhorseInternalPort | 8181 | Workhorse 内部端口 |
service.loadBalancerIP | 要分配给 LoadBalancer 的 IP 地址(如果云提供商支持) | |
service.loadBalancerSourceRanges | 允许访问 LoadBalancer 的 IP CIDR 列表(如果支持)服务类型 = LoadBalancer 必需 | |
shell.authToken.key | secret | shell 密钥中的 shell 令牌密钥 |
shell.authToken.secret | {Release.Name}-gitlab-shell-secret | Shell 令牌密钥 |
shell.port | nil | 由 UI 生成的 SSH URL 中使用的端口号 |
shutdown.blackoutSeconds | 10 | 收到关闭后保持 Webservice 运行的秒数,注意这必须比 deployment.terminationGracePeriodSeconds 短 |
tls.enabled | false | Webservice TLS 启用 |
tls.secretName | {Release.Name}-webservice-tls | Webservice TLS 密钥。 secretName 必须指向 Kubernetes TLS 密钥。 |
tolerations | [] | Pod 分配的容忍标签 |
trusted_proxies | [] | 有关详细信息,请参阅 极狐GitLab 文档 |
workhorse.logFormat | json | 日志格式。有效格式:json、structured、text |
workerProcesses | 2 | Webservice 工作线程数 |
workhorse.keywatcher | true | 将 workhorse 订阅到 Redis。任何服务请求 /api/* 的部署都需要此功能,但可以安全地禁用其他部署 |
workhorse.shutdownTimeout | global.webservice.workerTimeout + 1 (秒) | 等待所有 Web 请求从 Workhorse 清除的时间。示例:1min,65s。 |
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.runAsUser | 1000 | 容器应以其启动的用户 ID |
workhorse.containerSecurityContext.allowPrivilegeEscalation | false | 控制容器的进程是否可以获得比其父进程更多的权限 |
workhorse.containerSecurityContext.runAsNonRoot | true | 控制容器是否以非 root 用户运行 |
workhorse.containerSecurityContext.capabilities.drop | [ "ALL" ] | 删除 Gitaly 容器的 Linux 能力 |
workhorse.livenessProbe.initialDelaySeconds | 20 | 启动活性探测前的延迟 |
workhorse.livenessProbe.periodSeconds | 60 | 执行活性探测的频率 |
workhorse.livenessProbe.timeoutSeconds | 30 | 活性探测超时时的时间 |
workhorse.livenessProbe.successThreshold | 1 | 活性探测失败后被视为成功的最小连续成功次数 |
workhorse.livenessProbe.failureThreshold | 3 | 活性探测成功后被视为失败的最小连续失败次数 |
workhorse.monitoring.exporter.enabled | false | 启用 workhorse 以公开 Prometheus 指标,如果设置为监控导出器端口,则此设置将被 workhorse.metrics.enabled 覆盖 |
workhorse.monitoring.exporter.port | 9229 | Workhorse Prometheus 指标使用的端口号 |
workhorse.monitoring.exporter.tls.enabled | false | 设置为 true 时,启用指标端点的 TLS。需要 为 Workhorse 启用 TLS。 |
workhorse.metrics.enabled | true | 是否应为 workhorse 指标端点提供抓取 |
workhorse.metrics.port | 8083 | Workhorse 指标端点端口 |
workhorse.metrics.path | /metrics | Workhorse 指标端点路径 |
workhorse.metrics.serviceMonitor.enabled | false | 是否应创建 ServiceMonitor 以启用 Prometheus Operator 管理 Workhorse 指标抓取 |
workhorse.metrics.serviceMonitor.additionalLabels | {} | 添加到 Workhorse ServiceMonitor 的附加标签 |
workhorse.metrics.serviceMonitor.endpointConfig | {} | Workhorse ServiceMonitor 的附加端点配置 |
workhorse.readinessProbe.initialDelaySeconds | 0 | 启动就绪探测前的延迟 |
workhorse.readinessProbe.periodSeconds | 10 | 执行就绪探测的频率 |
workhorse.readinessProbe.timeoutSeconds | 2 | 就绪探测超时时的时间 |
workhorse.readinessProbe.successThreshold | 1 | 就绪探测失败后被视为成功的最小连续成功次数 |
workhorse.readinessProbe.failureThreshold | 3 | 就绪探测成功后被视为失败的最小连续失败次数 |
workhorse.imageScaler.maxProcs | 2 | 图像缩放器可以同时运行的最大图像缩放进程数 |
workhorse.imageScaler.maxFileSizeBytes | 250000 | 缩放器处理图像的最大文件大小(以字节为单位) |
workhorse.tls.verify | true | 设置为 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 证书。 | |
webServer | puma | 选择用于请求处理的 Web 服务器(Webservice/Puma) |
priorityClassName | "" | 允许配置 pod 的 priorityClassName,用于在驱逐情况下控制 pod 优先级 |
chart 配置示例
extraEnv
extraEnv 允许您在 pod 中的所有容器中暴露额外的环境变量。
以下是 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
extraEnvFrom
extraEnvFrom 允许您从其他数据源中暴露额外的环境变量到 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 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 的使用示例:
yaml1image: 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 中。除非某些 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 允许您向 Webservice pod 添加注释。例如:
yamlannotations: kubernetes.io/example-annotation: annotation-value
strategy
deployment.strategy 允许您更改部署更新策略。它定义了在更新部署时如何重新创建 pod。如果未提供,则使用集群默认值。 例如,如果您不希望在滚动更新开始时创建额外的 pod,并将最大不可用 pod 更改为 50%:
yamldeployment: strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 50%
您还可以将更新策略类型更改为 Recreate,但请注意,它会在调度新 pod 之前杀死所有 pod,并且直到新 pod 启动,Web UI 将不可用。在这种情况下,您不需要定义 rollingUpdate,只需定义 type:
yamldeployment: strategy: type: Recreate
TLS
一个 Webservice pod 运行两个容器:
- gitlab-workhorse
- webservice
gitlab-workhorse
Workhorse 支持 Web 和指标端点的 TLS。这将保护 Workhorse 与其他组件之间的通信,特别是 nginx-ingress、gitlab-shell 和 gitaly。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.secretName 和 global.certificates.customCAs。
当 gitlab.webservice.workhorse.tls.verify 为 true(默认情况下是),您还需要将 CA 证书密钥名称传递给 gitlab.webservice.workhorse.tls.caSecretName。这对于自签名证书和自定义 CA 是必要的。此密钥由 NGINX 用于验证 Workhorse 的 TLS 证书。
yaml1global: 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.enabled 在 webservice 容器上启用 TLS:
yamlgitlab: webservice: tls: enabled: true # secretName: gitlab-webservice-tls
secretName 必须指向一个 Kubernetes TLS 密钥。例如,要使用本地证书和密钥创建 TLS 密钥:
shellkubectl 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 的默认值。
yaml1deployments: 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,所有设置都与此相同。
yaml1webservice: 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 永远不会接收外部流量。
yaml1webservice: 2 deployments: 3 default: 4 ingress: 5 path: / 6 api: 7 ingress: 8 path: /api 9 internal-api: 10 ingress: 11 path:
入口设置
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
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/issuer 和 acme.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 控制器之前有 TLS 终止代理的情况。 |
ingress.tls.secretName | String | (空) | 包含极狐GitLab URL 有效证书和密钥的 Kubernetes TLS 密钥的名称。如果未设置,则使用 global.ingress.tls.secretName 值。 |
ingress.tls.smardcardSecretName | String | (空) | 如果启用了极狐GitLab 智能卡 URL,包含有效证书和密钥的 Kubernetes TLS 密钥的名称。如果未设置,则使用 global.ingress.tls.secretName 值。 |
ingress.tls.useGeoClass | Boolean | false | 使用 Geo Ingress 类(global.geo.ingressClass)覆盖 IngressClass。主 Geo 站点需要此功能。 |
annotations
annotations 用于在 Webservice Ingress 上设置注释。
serviceUpstream
这有助于通过告诉 NGINX 直接联系服务本身作为上游来更均匀地平衡 Webservice pod 的流量。
要覆盖此项,请设置:
yamlgitlab: 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 应用程序的更改或升级而更改。
默认:
yaml1workerProcesses: 2 2resources: 3 requests: 4 memory: 2.5G # = 2 * 1.25G 5# limits: 6# memory: 4G # = (2 * 1.5G) + 950M
配置 4 个工作线程:
yaml1workerProcesses: 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
yamlminio: serviceName: 'minio-svc' port: 9000
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
port | Integer | 9000 | 到达 MinIO Service 的端口号。 |
serviceName | String | minio-svc | MinIO pod 暴露的 Service 的名称。 |
Registry
yaml1registry: 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 图的一部分时,这很方便。 |
certificate.key | String | Secret 中的 key 的名称,该密钥中包含将提供给 registry 容器的 auth.token.rootcertbundle。 | |
certificate.secret | String | 包含极狐GitLab 实例创建的令牌的证书包的 Kubernetes Secret 的名称。 | |
host | String | 用于在极狐GitLab UI 中向用户提供 Docker 命令的外部主机名。回退到 registry.hostname 模板中设置的值。该模板根据在 global.hosts 中设置的值确定注册表主机名。有关更多信息,请参阅 全局文档。 | |
port | Integer | 主机名中使用的外部端口。使用端口 80 或 443 将导致 URL 以 http/https 开头。其他端口将全部使用 http,并将端口附加到主机名末尾,例如 http://registry.example.com:8443。 | |
tokenIssuer | String | gitlab-issuer | 认证令牌发行者的名称。此名称必须与 Registry 配置中使用的名称匹配,因为它在发送令牌时会被合并。默认的 gitlab-issuer 是我们在 Registry chart 中使用的相同默认值。 |
Chart 设置
以下值用于配置 Webservice Pods。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
workerProcesses | Integer | 2 | 每个 pod 运行的 Webservice workers 数量。为了极狐GitLab 正常运行,您的集群中必须至少有 2 个 workers。请注意,增加 workerProcesses 会使每个 worker 需要大约 400MB 的内存,因此应相应地更新 pod 的 resources。 |
minReplicas | Integer | 2 | 最小副本数 |
maxReplicas | Integer | 10 | 最大副本数 |
maxUnavailable | Integer | 1 | 最多允许不可用的 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.enabled 为 true 或外部 Prometheus 配置。
极狐GitLab Shell
极狐GitLab Shell 在与 Webservice 的通信中使用 Auth Token。使用共享的 Secret 与极狐GitLab Shell 和 Webservice 共享该令牌。
yamlshell: authToken: secret: gitlab-shell-secret key: secret port:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
authToken.key | String | 定义 Secret 中包含 authToken 的键名。 | |
authToken.secret | String | 定义要提取的 Kubernetes Secret 名称。 | |
port | Integer | 22 | 用于在极狐GitLab UI 中生成 SSH URLs 的端口号,由 global.shell.port 控制。 |
WebServer 选项
当前版本的 chart 支持 Puma web 服务器。
Puma 独特选项:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
puma.workerMaxMemory | Integer | Puma worker killer 的最大内存(以 MB 为单位) | |
puma.threads.min | Integer | 4 | Puma 线程的最小数量 |
puma.threads.max | Integer | 4 | Puma 线程的最大数量 |
配置 networkpolicy
此部分控制 NetworkPolicy。此配置是可选的,用于限制 Pods 对特定端点的 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 pods 的 Ingress 连接。通常,它需要到各个位置的 Egress 连接。此示例添加了以下网络策略:
- 允许的 Ingress 请求:
- 来自 pods gitaly、gitlab-pages、gitlab-shell、kas、mailroom 和 nginx-ingress 到端口 8181
- 来自 Prometheus pod 到端口 8080、8083 和 9229
- 允许的 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。
yaml1networkpolicy: 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 文档
yamlservice: 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.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 计算的触发器 |