使用 GitLab kas chart

kas 子 chart 提供了 GitLab 代理服务器 (KAS) 的可配置部署。 代理服务器是您与 GitLab 一起安装的组件,管理 Kubernetes 的 GitLab 代理。

此 chart 依赖于对 GitLab API 和 Gitaly 服务器的访问。 当您启用此 chart 时,将部署一个 Ingress。

为了消耗最少的资源,kas 容器使用 distroless 镜像。 部署的服务由 Ingress 公开,该 Ingress 使用 WebSocket 代理 进行通信。 此代理允许与外部组件 agentk 的长期连接。agentk 是 Kubernetes 集群端代理对应物。

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

启用代理服务器

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

例如:

helm upgrade --install kas --set global.kas.enabled=true

指定 Ingress

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

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

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

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

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

安装命令行选项

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

参数 默认值 说明
annotations {} Pod annotations
common.labels {} 应用于此 chart 创建的所有对象的补充标签。
extraContainers   包含的额外容器列表
image.repository registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/kas 镜像仓库
image.tag v13.7.0 镜像标签
hpa.targetAverageValue 100m 设置自动缩放目标值 (CPU)
ingress.enabled 如果 global.kas.enabled=true 默认值为 true 您可以使用 kas.ingress.enabled 打开或关闭。如果没有设置,您可以选择使用 global.ingress.enabled 来达到同样的目的。
ingress.apiVersion   apiVersion 字段中使用的值。
ingress.annotations {} Ingress annotations
ingress.tls {} Ingress TLS 配置
ingress.agentPath / 代理 API 端点的 Ingress 路径
ingress.k8sApiPath /k8s-proxy Kubernetes API 端点的 Ingress 路径
metrics.enabled true 指标端点是否可用于抓取
metrics.port 8151 指标端点端口
metrics.path /metrics Metrics 端点路径。
metrics.serviceMonitor.enabled false 是否创建 ServiceMonitor 使 Prometheus Operator 能够管理指标抓取,请注意启用此功能会删除 prometheus.io 抓取注释
metrics.serviceMonitor.additionalLabels {} 要添加到 ServiceMonitor 的其它标签
metrics.serviceMonitor.endpointConfig {} ServiceMonitor 的附加端点配置
maxReplicas 10 HPA maxReplicas
maxUnavailable 1 HPA maxUnavailable
minReplicas 2 HPA maxReplicas
nodeSelector   为这个 DeploymentPod 定义一个 nodeSelector(如果存在)。
serviceAccount.annotations {} Service account annotations
podLabels {} 补充 Pod 标签。 不会用于选择器。
serviceLabels {} 补充 service 标签
common.labels   应用于此 chart 创建的所有对象的补充标签。
redis.enabled true 允许选择 KAS 功能不使用 Redis。警告:Redis 将很快成为硬依赖项,因此该键已被弃用。
resources.requests.cpu 75m GitLab Exporter 最小 CPU
resources.requests.memory 100M GitLab Exporter 最小内存
service.externalPort 8150 外部端口(agentk 连接)
service.internalPort 8150 内部端口(agentk 连接)
service.apiInternalPort 8153 内部 API 的内部端口(用于 GitLab 后端)
service.loadBalancerIP nil service.typeLoadBalancer 时的自定义负载均衡器IP
service.loadBalancerSourceRanges nil service.typeLoadBalancer 时的自定义负载均衡器源范围列表
service.kubernetesApiPort 8154 用于在其上公开代理的 Kubernetes API 的外部端口
service.privateApiPort 8155 公开 kas 私有API的内部端口(用于kas->kas通信)
privateApi.secret 自动生成 用于对数据库进行身份验证的 secret 名称
privateApi.key 自动生成 privateApi.secret 中要使用的键的名称
global.kas.service.apiExternalPort 8153 内部 API 的外部端口(用于 GitLab 后端)
service.type ClusterIP Service 类型
tolerations [] 分配给 Pod 的容忍标签
customConfig {} 给定后,将默认的 kas 配置与这些值合并,优先考虑此处定义的值。
deployment.strategy {} 允许配置 deployment 使用的更新策略

测试 kas chart

要安装此 chart:

  1. 创建 Kubernetes 集群。
  2. 检出合并请求的工作分支。
  3. 使用--set global.kas.enabled=true从本地 chart 分支安装(或升级)启用了kas的GitLab,例如:

    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 \
      --set global.kas.enabled=true
    
  4. 使用 GDK 运行进程以配置和使用 GitLab Kubernetes 代理:(您也可以按照步骤手动配置和使用代理。)

    1. 从您的 GDK GitLab 仓库,移动到 QA 文件夹:cd qa
    2. 执行以下命令,进行 QA 测试。

      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