使用极狐GitLab `kas` chart

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

kas 子软件包提供了一个可配置的 极狐GitLab 代理服务器 (KAS) 部署。代理服务器是与极狐GitLab 一起安装的组件,管理 极狐GitLab Kubernetes 代理 时必需。

此图表依赖于访问极狐GitLab API 和 Gitaly 服务器。启用此图表时,将部署一个 Ingress。

为了消耗最少的资源,kas 容器使用无操作系统镜像。部署的服务通过 Ingress 暴露,使用 WebSocket 代理进行通信。此代理允许与外部组件 agentk 进行长时间连接。agentk 是 Kubernetes 集群侧代理的对应部分。

访问服务的路径取决于您的 Ingress 配置

有关更多信息,请参见 极狐GitLab Kubernetes 代理架构

禁用代理服务器#

极狐GitLab 代理服务器 (kas) 默认启用。要在您的极狐GitLab 实例上禁用它,请将 Helm 属性 global.kas.enabled 设置为 false

例如:

shell
helm upgrade --install kas --set global.kas.enabled=false

指定一个 Ingress#

当您使用图表的 Ingress 和默认配置时,代理服务器的服务可在子域上访问。例如,对于 global.hosts.domain: example.com,代理服务器可在 kas.example.com 访问。

KAS Ingress 可以使用与 global.hosts.domain 不同的域。

设置 global.hosts.kas.name,例如:

shell
global.hosts.kas.name: kas.my-other-domain.com

此示例仅使用 kas.my-other-domain.com 作为 KAS Ingress 的主机。其余服务(包括极狐GitLab、Registry、MinIO 等)使用 global.hosts.domain 中指定的域。

安装命令行选项#

您可以使用 --set 标志将这些参数传递给 helm install 命令。

参数默认值描述
affinity{}pod 分配的 亲和性规则
annotations{}Pod 注释。
common.labels{}应用于此图表创建的所有对象的补充标签。
securityContext.runAsUser65532pod 应该以该用户 ID 启动
securityContext.runAsGroup65534pod 应该以该组 ID 启动
securityContext.fsGroup65532pod 应该以该组 ID 启动
securityContext.fsGroupChangePolicy更改卷所有权和权限的策略(需要 Kubernetes 1.23)
securityContext.seccompProfile.typeRuntimeDefault要使用的 seccomp 配置文件
containerSecurityContext.runAsUser65532重写容器 securityContext 用户 ID ,以该 ID 启动容器
containerSecurityContext.allowPrivilegeEscalationfalse控制容器的进程是否可以获得比其父进程更多的权限
containerSecurityContext.runAsNonRoottrue控制容器是否以非 root 用户运行
containerSecurityContext.capabilities.drop[ "ALL" ]为 Gitaly 容器删除 Linux 功能
extraContainers包含要包含的容器列表的多行文字样式字符串。
extraEnv要暴露的额外环境变量列表
extraEnvFrom要从其他数据源暴露的额外环境变量列表
init.containerSecurityContextinit 容器 securityContext 覆盖
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer 特定:控制进程是否可以获得比其父进程更多的权限
init.containerSecurityContext.runAsNonRoottrueinitContainer 特定:控制容器是否以非 root 用户运行
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer 特定:为容器删除 Linux 功能
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-kas镜像仓库。
image.tagv13.7.0镜像标签。
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}行为包含上下缩放行为的规范(需要 autoscaling/v2beta2 或更高版本)。
hpa.customMetrics[]自定义指标包含用于计算所需副本计数的规范(覆盖默认使用的在 targetAverageUtilization 中配置的平均 CPU 利用率)。
hpa.cpu.targetTypeAverageValue设置自动缩放 CPU 目标类型,必须是 UtilizationAverageValue
hpa.cpu.targetAverageValue100m设置自动缩放 CPU 目标值。
hpa.cpu.targetAverageUtilization设置自动缩放 CPU 目标利用率。
hpa.memory.targetType设置自动缩放内存目标类型,必须是 UtilizationAverageValue
hpa.memory.targetAverageValue设置自动缩放内存目标值。
hpa.memory.targetAverageUtilization设置自动缩放内存目标利用率。
hpa.targetAverageValue已弃用 设置自动缩放 CPU 目标值
ingress.enabledtrue if global.kas.enabled=true您可以使用 kas.ingress.enabled 来明确启用或禁用。如果未设置,您可以选择使用 global.ingress.enabled 达到相同目的。
ingress.apiVersion要在 apiVersion 字段中使用的值。
ingress.annotations{}Ingress 注释。
ingress.tls{}Ingress TLS 配置。
ingress.agentPath/代理 API 端点的 Ingress 路径。
ingress.k8sApiPath/k8s-proxyKubernetes API 端点的 Ingress 路径。
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.path/metrics度量端点路径。
metrics.serviceMonitor.enabledfalse如果应创建 ServiceMonitor 以启用 Prometheus Operator 管理度量抓取。启用将删除 prometheus.io 抓取注释。它不能与 metrics.podMonitor.enabled 一起启用。
metrics.serviceMonitor.additionalLabels{}添加到 ServiceMonitor 的其他标签。
metrics.serviceMonitor.endpointConfig{}ServiceMonitor 的其他端点配置。
metrics.podMonitor.enabledfalse如果应创建 PodMonitor 以启用 Prometheus Operator 管理度量抓取。启用将删除 prometheus.io 抓取注释。它不能与 metrics.serviceMonitor.enabled 一起启用。
metrics.podMonitor.additionalLabels{}添加到 PodMonitor 的其他标签。
metrics.podMonitor.endpointConfig{}PodMonitor 的其他端点配置。
maxReplicas10HPA maxReplicas
maxUnavailable1HPA maxUnavailable
minReplicas2HPA maxReplicas
nodeSelector定义 PodnodeSelector,如果存在。
observability.port8151可观察性端点端口。用于度量和探测端点。
observability.livenessProbe.path/liveness活跃性探测端点的 URI。此值必须与 KAS 服务配置中的 observability.liveness_probe.url_path 值匹配。
observability.readinessProbe.path/readiness就绪探测端点的 URI。此值必须与 KAS 服务配置中的 observability.readiness_probe.url_path 值匹配。
serviceAccount.annotations{}服务帐户注释。
podLabels{}补充 Pod 标签。不用于选择器。
serviceLabels{}补充服务标签。
common.labels应用于此图表创建的所有对象的补充标签。
resources.requests.cpu100m每个 KAS pod 的最低 CPU 请求
resources.requests.memory256Mi每个 KAS pod 内存的最低内存请求。
service.externalPort8150外部端口(用于 agentk 连接)。
service.internalPort8150内部端口(用于 agentk 连接)。
service.apiInternalPort8153内部 API 的内部端口(用于极狐GitLab 后端)。
service.loadBalancerIPnilservice.typeLoadBalancer 时的自定义负载均衡器 IP。
service.loadBalancerSourceRangesnilservice.typeLoadBalancer 时的自定义负载均衡器源范围列表。
service.kubernetesApiPort8154用于暴露代理 Kubernetes API 的外部端口。
service.privateApiPort8155用于暴露 kas 私有 API 的内部端口(用于 kas -> kas 通信)。
serviceAccount.annotations{}服务帐户注释。
serviceAccount.automountServiceAccountTokenfalse表示是否应在 pod 中挂载默认服务帐户访问令牌。
serviceAccount.createfalse表示是否应创建服务帐户。
serviceAccount.enabledfalse表示是否要使用服务帐户。
serviceAccount.name服务帐户的名称。如果未设置,则使用完整图表名称。
websocketToken.secretAutogenerated用于 WebSocket 令牌签名和验证的密钥名称。
websocketToken.keyAutogeneratedwebsocketToken.secret 中使用的密钥名称。
privateApi.secretAutogenerated用于与数据库进行身份验证的密钥名称。
privateApi.keyAutogeneratedprivateApi.secret 中使用的密钥名称。
global.kas.service.apiExternalPort8153内部 API 的外部端口(用于极狐GitLab 后端)。
service.typeClusterIP服务类型。
tolerations[]pod 分配的容忍标签。
customConfig{}给定时,将默认 kas 配置与这些值合并,优先使用此处定义的值。
deployment.minReadySeconds0kas pod 被认为准备好之前必须经过的最小秒数。
deployment.strategy{}允许配置部署使用的更新策略。
deployment.terminationGracePeriodSeconds300在接收到 SIGTERM 信号后,允许 Pod 关闭的秒数。
priorityClassName分配给 pod 的 优先级类

启用 TLS 通信#

通过 全局 KAS 属性 启用 kas pod 与其他极狐GitLab 图表组件之间的 TLS 通信。

测试 kas 图表#

要安装图表:

  1. 创建您自己的 Kubernetes 集群。

  2. 检出合并请求的工作分支。

  3. 从本地图表分支安装(或升级)极狐GitLab,默认启用 kas

    shell
    helm upgrade --force --install gitlab . \ --timeout 600s \ --set global.hosts.domain=your.domain.com \ --set global.hosts.externalIP=XYZ.XYZ.XYZ.XYZ \ --set certmanager-issuer.email=your@email.com
  4. 使用 GDK 运行配置和使用 极狐GitLab Kubernetes 代理 的过程: (您也可以按照步骤手动配置和使用代理。)

    1. 从您的 GDK 极狐GitLab 仓库,进入 QA 文件夹:cd qa

    2. 运行以下命令以运行 QA 测试:

      shell
      GITLAB_USERNAME=$ROOT_USER GITLAB_PASSWORD=$ROOT_PASSWORD GITLAB_ADMIN_USERNAME=$ROOT_USER GITLAB_ADMIN_PASSWORD=$ROOT_PASSWORD bundle exec bin/qa Test::Instance::All https://your.gitlab.domain/ -- --tag orchestrated --tag quarantine qa/specs/features/ee/api/7_configure/kubernetes/kubernetes_agent_spec.rb

      您还可以通过环境变量自定义要安装的 agentk 版本:GITLAB_AGENTK_VERSION=v13.7.1

配置 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 计算的触发器

serviceAccount#

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

名称类型默认值描述
annotationsMap{}服务帐户注释。
automountServiceAccountTokenBooleanfalse控制是否应在 pod 中挂载默认服务帐户访问令牌。除非某些 sidecars 需要此功能正常工作(例如,Istio),否则不应启用此功能。
createBooleanfalse表示是否应创建服务帐户。
enabledBooleanfalse表示是否要使用服务帐户。
nameString服务帐户的名称。如果未设置,则使用完整图表名称。

亲和性#

有关更多信息,请参阅 affinity

启用调试日志#

要为 KAS 子软件包启用调试日志,请在您的 values.yaml 文件的 kas 部分中添加以下内容:

yaml
customConfig: observability: logging: level: debug grpc_level: debug