使用极狐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。
例如:
shellhelm 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,例如:
shellglobal.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.runAsUser | 65532 | pod 应该以该用户 ID 启动 |
securityContext.runAsGroup | 65534 | pod 应该以该组 ID 启动 |
securityContext.fsGroup | 65532 | pod 应该以该组 ID 启动 |
securityContext.fsGroupChangePolicy | 更改卷所有权和权限的策略(需要 Kubernetes 1.23) | |
securityContext.seccompProfile.type | RuntimeDefault | 要使用的 seccomp 配置文件 |
containerSecurityContext.runAsUser | 65532 | 重写容器 securityContext 用户 ID ,以该 ID 启动容器 |
containerSecurityContext.allowPrivilegeEscalation | false | 控制容器的进程是否可以获得比其父进程更多的权限 |
containerSecurityContext.runAsNonRoot | true | 控制容器是否以非 root 用户运行 |
containerSecurityContext.capabilities.drop | [ "ALL" ] | 为 Gitaly 容器删除 Linux 功能 |
extraContainers | 包含要包含的容器列表的多行文字样式字符串。 | |
extraEnv | 要暴露的额外环境变量列表 | |
extraEnvFrom | 要从其他数据源暴露的额外环境变量列表 | |
init.containerSecurityContext | init 容器 securityContext 覆盖 | |
init.containerSecurityContext.allowPrivilegeEscalation | false | initContainer 特定:控制进程是否可以获得比其父进程更多的权限 |
init.containerSecurityContext.runAsNonRoot | true | initContainer 特定:控制容器是否以非 root 用户运行 |
init.containerSecurityContext.capabilities.drop | [ "ALL" ] | initContainer 特定:为容器删除 Linux 功能 |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-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.cpu.targetAverageValue | 100m | 设置自动缩放 CPU 目标值。 |
hpa.cpu.targetAverageUtilization | 设置自动缩放 CPU 目标利用率。 | |
hpa.memory.targetType | 设置自动缩放内存目标类型,必须是 Utilization 或 AverageValue。 | |
hpa.memory.targetAverageValue | 设置自动缩放内存目标值。 | |
hpa.memory.targetAverageUtilization | 设置自动缩放内存目标利用率。 | |
hpa.targetAverageValue | 已弃用 设置自动缩放 CPU 目标值 | |
ingress.enabled | true 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-proxy | Kubernetes API 端点的 Ingress 路径。 |
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.path | /metrics | 度量端点路径。 |
metrics.serviceMonitor.enabled | false | 如果应创建 ServiceMonitor 以启用 Prometheus Operator 管理度量抓取。启用将删除 prometheus.io 抓取注释。它不能与 metrics.podMonitor.enabled 一起启用。 |
metrics.serviceMonitor.additionalLabels | {} | 添加到 ServiceMonitor 的其他标签。 |
metrics.serviceMonitor.endpointConfig | {} | ServiceMonitor 的其他端点配置。 |
metrics.podMonitor.enabled | false | 如果应创建 PodMonitor 以启用 Prometheus Operator 管理度量抓取。启用将删除 prometheus.io 抓取注释。它不能与 metrics.serviceMonitor.enabled 一起启用。 |
metrics.podMonitor.additionalLabels | {} | 添加到 PodMonitor 的其他标签。 |
metrics.podMonitor.endpointConfig | {} | PodMonitor 的其他端点配置。 |
maxReplicas | 10 | HPA maxReplicas。 |
maxUnavailable | 1 | HPA maxUnavailable。 |
minReplicas | 2 | HPA maxReplicas。 |
nodeSelector | 定义 Pod 的 nodeSelector,如果存在。 | |
observability.port | 8151 | 可观察性端点端口。用于度量和探测端点。 |
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.cpu | 100m | 每个 KAS pod 的最低 CPU 请求 |
resources.requests.memory | 256Mi | 每个 KAS pod 内存的最低内存请求。 |
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 通信)。 |
serviceAccount.annotations | {} | 服务帐户注释。 |
serviceAccount.automountServiceAccountToken | false | 表示是否应在 pod 中挂载默认服务帐户访问令牌。 |
serviceAccount.create | false | 表示是否应创建服务帐户。 |
serviceAccount.enabled | false | 表示是否要使用服务帐户。 |
serviceAccount.name | 服务帐户的名称。如果未设置,则使用完整图表名称。 | |
websocketToken.secret | Autogenerated | 用于 WebSocket 令牌签名和验证的密钥名称。 |
websocketToken.key | Autogenerated | 在 websocketToken.secret 中使用的密钥名称。 |
privateApi.secret | Autogenerated | 用于与数据库进行身份验证的密钥名称。 |
privateApi.key | Autogenerated | 在 privateApi.secret 中使用的密钥名称。 |
global.kas.service.apiExternalPort | 8153 | 内部 API 的外部端口(用于极狐GitLab 后端)。 |
service.type | ClusterIP | 服务类型。 |
tolerations | [] | pod 分配的容忍标签。 |
customConfig | {} | 给定时,将默认 kas 配置与这些值合并,优先使用此处定义的值。 |
deployment.minReadySeconds | 0 | 在 kas pod 被认为准备好之前必须经过的最小秒数。 |
deployment.strategy | {} | 允许配置部署使用的更新策略。 |
deployment.terminationGracePeriodSeconds | 300 | 在接收到 SIGTERM 信号后,允许 Pod 关闭的秒数。 |
priorityClassName | 分配给 pod 的 优先级类。 |
启用 TLS 通信
通过 全局 KAS 属性 启用 kas pod 与其他极狐GitLab 图表组件之间的 TLS 通信。
测试 kas 图表
要安装图表:
-
创建您自己的 Kubernetes 集群。
-
检出合并请求的工作分支。
-
从本地图表分支安装(或升级)极狐GitLab,默认启用 kas:
shellhelm 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 测试:
shellGITLAB_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.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 计算的触发器 |
serviceAccount
此部分控制是否应创建 ServiceAccount 以及是否应在 pod 中挂载默认访问令牌。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
annotations | Map | {} | 服务帐户注释。 |
automountServiceAccountToken | Boolean | false | 控制是否应在 pod 中挂载默认服务帐户访问令牌。除非某些 sidecars 需要此功能正常工作(例如,Istio),否则不应启用此功能。 |
create | Boolean | false | 表示是否应创建服务帐户。 |
enabled | Boolean | false | 表示是否要使用服务帐户。 |
name | String | 服务帐户的名称。如果未设置,则使用完整图表名称。 |
亲和性
有关更多信息,请参阅 affinity。
启用调试日志
要为 KAS 子软件包启用调试日志,请在您的 values.yaml 文件的 kas 部分中添加以下内容:
yamlcustomConfig: observability: logging: level: debug grpc_level: debug