使用 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 路径 | |
keda.enabled |
false |
使用 KEDA ScaledObjects 替代 HorizontalPodAutoscalers
|
|
keda.pollingInterval |
30 |
检查每个触发器的时间间隔 | |
keda.cooldownPeriod |
300 |
最后一个触发器报告有效后,在将资源缩放回 0 之前等待的时间 | |
keda.minReplicaCount |
KEDA 将资源缩减到的最小副本数,默认为 hpa.minReplicas
|
||
keda.maxReplicaCount |
KEDA 将资源扩展到的最大副本数,默认为 hpa.maxReplicas
|
||
keda.fallback |
KEDA 后备配置,请参阅文档 | ||
keda.hpaName |
KEDA 将创建的 HPA 资源的名称,默认为 keda-hpa-{scaled-object-name}
|
||
keda.restoreToOriginalReplicaCount |
指定删除 ScaledObject 后,目标资源是否应缩减至原始副本数 |
||
keda.behavior |
放大和缩小行为的 spec,默认为 hpa.behavior
|
||
keda.triggers |
用于激活目标资源扩展的触发器列表,默认为根据 hpa.cpu 和 hpa.memory 计算的触发器 |
||
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 文件夹: