使用 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
设置为 false
。
例如:
helm upgrade --install kas --set global.kas.enabled=false
指定 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 创建的所有对象的补充标签。 | |
containerSecurityContext.runAsUser
| 65532
| 覆盖用于启动容器的容器 securityContext | |
extraContainers
| 包含的额外容器列表 | ||
extraEnv
| 要公开的更多环境变量列表 | ||
extraEnvFrom
| 要公开的来自其他数据源的更多环境变量列表 | ||
init.containerSecurityContext
| {}
| 初始化容器 securityContext 覆盖 | |
image.repository
| registry.gitlab.com/gitlab-org/cluster-integration/gitlab-agent/kas
| 镜像仓库 | |
image.tag
| v13.7.0
| 镜像标签 | |
hpa.behavior
| {scaleDown: {stabilizationWindowSeconds: 300 }}
| 包含放大和缩小行为的规范(需要 autoscaling/v2beta2 或更高版本)
| |
hpa.customMetrics
| []
| 自定义指标包含用于计算所需副本数的规范(覆盖在 targetAverageUtilization 中配置的平均 CPU 利用率的默认使用值)
| |
hpa.cpu.targetType
| AverageValue
| 设置自动缩放 CPU 目标类型,必须是 Utilization 或 AverageValue
| |
hpa.targetAverageValue
| 100m
| 设置自动扩缩容目标值 | |
hpa.cpu.targetAverageUtilization
| 设置自动缩放 CPU 目标利用率 | ||
hpa.memory.targetType
| 设置自动缩放内存目标类型,必须是 Utilization 或 AverageValue
| ||
hpa.memory.targetAverageValue
| 设置自动缩放内存目标值 | ||
hpa.memory.targetAverageUtilization
| 设置自动缩放内存目标利用率 | ||
hpa.minReplicas
| 最小副本数 | ||
hpa.maxReplicas
| 最大副本数 | ||
hpa.targetAverageValue
| 已弃用 设置自动缩放 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.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
| 为这个 Deployment 的 Pod 定义一个 nodeSelector(如果存在)。
| ||
observability.port
| 8151
| 可观察性端点端口。用于指标和探测端点。 | |
observability.livenessProbe.path
| /liveness
| Liveness 探测端点的 URI。此值必须与 KAS 服务配置中的 observability.liveness_probe.url_path 值相匹配
| |
observability.readinessProbe.path
| /readiness
| Readiness 端点的 URI。此值必须与 KAS 服务配置中的 observability.readiness_probe.url_path 值相匹配
| |
serviceAccount.annotations
| {}
| Service account 注释 | |
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.type 为LoadBalancer 时的自定义负载均衡器IP
| |
service.loadBalancerSourceRanges
| nil
| 当service.type 为LoadBalancer 时的自定义负载均衡器源范围列表
| |
service.kubernetesApiPort
| 8154
| 用于在其上公开代理的 Kubernetes API 的外部端口 | |
service.privateApiPort
| 8155
| 公开 kas 私有API的内部端口(用于kas ->kas 通信)
| |
privateApi.secret
| 自动生成 | 用于对数据库进行身份验证的 secret 名称 | |
privateApi.key
| 自动生成 |
privateApi.secret 中要使用的键的名称
| |
privateApi.tls.enabled
| false
|
已废弃:使用 global.kas.tls.enabled 。启用 kas pod 使用 TLS 相互通信。
| |
privateApi.tls.secretName
| nil
|
已废弃:使用 global.kas.tls.secretName 。包含证书及其关联密钥的 Kubernetes TLS 密钥的名称。如果 privateApi.tls 为 true ,则必须配置。
| |
global.kas.service.apiExternalPort
| 8153
| 内部 API 的外部端口(用于 GitLab 后端) | |
service.type
| ClusterIP
| Service 类型 | |
tolerations
| []
| 分配给 Pod 的容忍标签 | |
customConfig
| {}
| 给定后,将默认的 kas 配置与这些值合并,优先考虑此处定义的值。
| |
deployment.minReadySeconds
| 0
| 在 kas pod 被认为准备好之前必须经过的最小秒数。
| |
deployment.strategy
| {}
| 允许配置 deployment 使用的更新策略 | |
deployment.terminationGracePeriodSeconds
| 300
| How much time in seconds a Pod is allowed to spend shutting down after receiving SIGTERM. | |
priorityClassName
| Priority class assigned to pods. |
启用 TLS 通信
gitlab.kas.privateApi.tls.enabled
和gitlab.kas.privateApi.tls.secretName
属性在 15.8 版本中已弃用,并将在 17.0 版本中删除。改为通过全局 KAS 属性启用 TLS。
在您的 kas
Pod 和其他 chart 组件之间启用 TLS 通信,through the global KAS attribute.
通过 gitlab.kas.privateApi
属性启用 TLS 通信(已废弃)
gitlab.kas.privateApi.tls.enabled
和 gitlab.kas.privateApi.tls.secretName
属性在 15.8 版本中已弃用,并将在 17.0 版本中删除。改为通过全局 KAS 属性启用 TLS。先决条件:
- 使用 15.5.1 或更高版本。您可以使用
global.gitlabVersion: <version>
设置您的极狐GitLab 版本。如果您需要在初始部署后强制更新镜像,还可以设置global.image.pullPolicy: Always
。
- 创建您的
kas
pod 将信任的证书颁发机构和证书。 - 配置您的 chart,使用受信任的证书。
- 可选。配置用于 TLS 的 Redis。
要配置 kas
使用您创建的证书,请设置以下值。
值 | 描述 |
---|---|
global.certificates.customCAs
| 与您的极狐GitLab 组件共享您的 CA。 |
global.appConfig.gitlab_kas.internalUrl
| 在极狐GitLab Web 服务和 kas 之间启用 grpcs 通信。 |
gitlab.kas.privateApi.tls.enabled
| 安装证书卷并启用 kas Pod 之间的 TLS 通信。
|
gitlab.kas.privateApi.tls.secretName
| 指定哪个 Kubernetes TLS 密钥存储您的证书。 |
gitlab.kas.customConfig
| 使用 grpcs 配置 kas 来公开其端口。 |
gitlab.kas.ingress
| 配置 kas Ingress 验证代理的 SSL 证书。
|
例如,您可以使用此 values.yaml
文件来部署您的 chart:
.internal-ca: &internal-ca gitlab-internal-tls-ca # The secret name you used to share your TLS CA.
.internal-tls: &internal-tls gitlab-internal-tls # The secret name you used to share your TLS certificate.
global:
certificates:
customCAs:
- secret: *internal-ca
hosts:
domain: gitlab.example.com # Your gitlab domain
appConfig:
gitlab_kas:
internalUrl: "grpcs://RELEASE-kas.NAMESPACE.svc:8153" # Replace RELEASE and NAMESPACE with your chart's release and namespace
gitlab:
kas:
privateApi:
tls:
enabled: true
secretName: *internal-tls
customConfig:
api:
listen:
certificate_file: /etc/kas/tls.crt
key_file: /etc/kas/tls.key
agent:
listen:
certificate_file: /etc/kas/tls.crt
key_file: /etc/kas/tls.key
kubernetes_api:
listen:
certificate_file: /etc/kas/tls.crt
key_file: /etc/kas/tls.key
ingress:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: https
nginx.ingress.kubernetes.io/proxy-ssl-name: RELEASE-kas.NAMESPACE.svc # Replace RELEASE and NAMESPACE with your chart's release and namespace
nginx.ingress.kubernetes.io/proxy-ssl-secret: NAMESPACE/CA-SECRET-NAME # Replace NAMESPACE and CA-SECRET-NAME with your chart's namespace and CA secret name. The same you used for &internal-ca.
nginx.ingress.kubernetes.io/proxy-ssl-verify: on
测试 kas
chart
要安装此 chart:
- 创建 Kubernetes 集群。
- 检出合并请求的工作分支。
-
从本地 chart 分支安装(或升级)极狐GitLab,默认情况下启用
kas
: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
-
使用 GDK 运行进程以配置和使用 GitLab Kubernetes 代理:(您也可以按照步骤手动配置和使用代理。)
- 从您的 GDK GitLab 仓库,移动到 QA 文件夹:
cd qa
。 -
执行以下命令,进行 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
。
- 从您的 GDK GitLab 仓库,移动到 QA 文件夹: