Help us learn about your current experience with the documentation. Take the survey.

工作区设置

工作区设置配置 GitLab agent for Kubernetes 如何管理 Kubernetes 集群中的远程开发环境。这些设置控制:

  • 资源分配
  • 安全
  • 网络
  • 生命周期管理

设置基本工作区配置

要设置基本工作区配置:

  1. 打开你的配置 YAML 文件。

  2. 添加这些必需的最小设置:

    remote_development:
      enabled: true
      dns_zone: "<workspaces.example.dev>"
  3. 提交更改。

如果你的工作区配置不工作,请参阅 排查工作区问题

如果某个设置的值无效,在修复该值之前无法更新任何设置。 除了 enabled 之外,更新这些任何设置都不会影响现有工作区。

配置参考

设置 描述 格式 默认值 必需
enabled 指示是否为 GitLab agent for Kubernetes 启用远程开发。 Boolean false
dns_zone 工作区可用的 DNS zone。 String. 有效的 DNS 格式。 None
gitlab_workspaces_proxy gitlab-workspaces-proxy 安装的命名空间。 String. 有效的 Kubernetes 命名空间名称。 gitlab-workspaces
network_policy 工作区的防火墙规则。 包含 enabledegress 字段的对象。 参见 network_policy
default_resources_per_workspace_container 每个工作区容器的默认 CPU 和内存 requests 和 limits。 包含 CPU 和 memory 的 requestslimits 的对象。 {}
max_resources_per_workspace 每个工作区的最大 CPU 和内存 requests 和 limits。 包含 CPU 和 memory 的 requestslimits 的对象 {}
workspaces_quota GitLab agent for Kubernetes 的最大工作区数量。 Integer -1
workspaces_per_user_quota 每个用户的最大工作区数量。 Integer -1
use_kubernetes_user_namespaces 指示是否在 Kubernetes 中使用用户命名空间。 Boolean: truefalse false
default_runtime_class 默认的 Kubernetes RuntimeClass String. 有效的 RuntimeClass 名称。 ""
allow_privilege_escalation 允许权限提升。 Boolean false
image_pull_secrets 用于拉取工作区私有镜像的现有 Kubernetes secrets。 包含 namenamespace 字段的对象数组。 []
annotations 应用于 Kubernetes 对象的注解。 键值对映射。有效的 Kubernetes 注解格式。 {}
labels 应用于 Kubernetes 对象的标签。 键值对映射。有效的 Kubernetes 标签格式 {}
max_active_hours_before_stop 工作区在被停止之前可以保持活动的最大小时数。 Integer 36
max_stopped_hours_before_termination 工作区在被终止之前可以保持停止状态的最大小时数。 Integer 744
shared_namespace 指示是否使用共享的 Kubernetes 命名空间。 String ""

enabled

使用此设置来定义是否:

  • GitLab agent for Kubernetes 可以与 GitLab 实例通信。
  • 你可以使用 GitLab agent for Kubernetes 创建工作区

默认值为 false

要在 agent 配置中启用远程开发,将 enabled 设置为 true

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  enabled: true

如果为具有活动或已停止工作区的 agent 设置 enabledfalse, 那些工作区将变成孤立且不可用。

在禁用 agent 上的远程开发之前:

  • 确保所有关联的工作区不再需要。
  • 手动删除任何正在运行的工作区以将它们从 Kubernetes 集群中移除。

dns_zone

使用此设置来定义工作区可用的 URL 的 DNS zone。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  dns_zone: "<workspaces.example.dev>"

gitlab_workspaces_proxy

使用此设置来定义 gitlab-workspaces-proxy 安装的命名空间。 gitlab_workspaces_proxy.namespace 的默认值为 gitlab-workspaces

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  gitlab_workspaces_proxy:
    namespace: "<custom-gitlab-workspaces-proxy-namespace>"

network_policy

使用此设置来定义每个工作区的网络策略。 此设置控制工作区的网络流量。

默认值为:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  network_policy:
    enabled: true
    egress:
      - allow: "0.0.0.0/0"
        except:
          - "10.0.0.0/8"
          - "172.16.0.0/12"
          - "192.168.0.0/16"

在此配置中:

  • 由于 enabledtrue,为每个工作区生成网络策略。
  • 出站规则允许所有流量到互联网(0.0.0.0/0),但 IP CIDR 范围 10.0.0.0/8172.16.0.0/12192.168.0.0/16 除外。

网络策略的行为取决于 Kubernetes 网络插件。 有关更多信息,请参阅 Kubernetes 文档

network_policy.enabled

使用此设置来定义是否为每个工作区生成网络策略。 network_policy.enabled 的默认值为 true

network_policy.egress

使用此设置来定义允许作为工作区出站目的地的 IP CIDR 范围列表。

在以下情况下定义出站规则:

  • GitLab 实例位于私有 IP 范围内。
  • 工作区必须访问私有 IP 范围内的云资源。

列表的每个元素定义一个带有可选 except 属性的 allow 属性。 allow 定义允许流量的 IP 范围。 except 列出要从 allow 范围中排除的 IP 范围。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  network_policy:
    egress:
      - allow: "0.0.0.0/0"
        except:
          - "10.0.0.0/8"
          - "172.16.0.0/12"
          - "192.168.0.0/16"
      - allow: "172.16.123.1/32"

在此示例中,当以下条件满足时,允许来自工作区的流量:

  • 目标 IP 是任何范围,除了 10.0.0.0/8172.16.0.0/12192.168.0.0/16
  • 目标 IP 是 172.16.123.1/32

default_resources_per_workspace_container

使用此设置来定义每个工作区容器的默认 requests 和 limits 的 CPU 和 memory。 你在 devfile 中定义的任何资源都会覆盖此设置。

对于 default_resources_per_workspace_containerrequestslimits 是必需的。 有关可能的 CPU 和 memory 值的更多信息,请参阅 Kubernetes 中的资源单位

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  default_resources_per_workspace_container:
    requests:
      cpu: "0.5"
      memory: "512Mi"
    limits:
      cpu: "1"
      memory: "1Gi"

max_resources_per_workspace

使用此设置来定义每个工作区的最大 requests 和 limits 的 CPU 和 memory。

对于 max_resources_per_workspacerequestslimits 是必需的。 有关可能的 CPU 和 memory 值的更多信息,请参阅:

当工作区超过你为 requestslimits 设置的值时,工作区将失败。

如果设置了 shared_namespacemax_resources_per_workspace 必须是一个空哈希。用户可以在 shared_namespace 中创建 Kubernetes 资源配额 以达到与此处指定此值相同的结果。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  max_resources_per_workspace:
    requests:
      cpu: "1"
      memory: "1Gi"
    limits:
      cpu: "2"
      memory: "2Gi"

你定义的最大资源必须包括 init 容器执行诸如克隆项目存储库等引导操作所需的任何资源。

workspaces_quota

使用此设置来设置 GitLab agent for Kubernetes 的最大工作区数量。

当以下情况发生时,你无法为 agent 创建新工作区:

  • agent 的工作区数量已达到定义的 workspaces_quota
  • workspaces_quota 设置为 0

如果 workspaces_quota 设置为低于 agent 的非终止工作区数量的值,agent 的工作区不会自动终止。

默认值为 -1(无限制)。 可能的值大于或等于 -1

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  workspaces_quota: 10

workspaces_per_user_quota

使用此设置来设置每个用户的最大工作区数量。

当以下情况发生时,你无法为用户创建新工作区:

  • 用户的工作区数量已达到定义的 workspaces_per_user_quota
  • workspaces_per_user_quota 设置为 0

如果 workspaces_per_user_quota 设置为低于用户的非终止工作区数量的值,用户的工作区不会自动终止。

默认值为 -1(无限制)。 可能的值大于或等于 -1

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  workspaces_per_user_quota: 3

use_kubernetes_user_namespaces

使用此设置来指定是否在 Kubernetes 中使用用户命名空间功能。

用户命名空间 将容器内运行的用户与主机上的用户隔离开。

默认值为 false。在将值设置为 true 之前,请确保你的 Kubernetes 集群支持用户命名空间。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  use_kubernetes_user_namespaces: true

有关 use_kubernetes_user_namespaces 的更多信息,请参阅 用户命名空间

default_runtime_class

使用此设置来选择用于运行工作区中容器的容器运行时配置。

默认值为 "",表示没有值。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  default_runtime_class: "example-runtime-class-name"

有效值:

  • 包含 253 个或更少的字符。
  • 仅包含小写字母、数字、-.
  • 以字母数字字符开头
  • 以字母数字字符结尾

有关 default_runtime_class 的更多信息,请参阅 运行时类

allow_privilege_escalation

使用此设置来控制进程是否可以获得比其父进程更多的权限。

此设置直接控制是否在容器进程上设置 no_new_privs 标志。

默认值为 false。只有在以下情况下才能将值设置为 true

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  default_runtime_class: "example-runtime-class-name"
  allow_privilege_escalation: true

有关 allow_privilege_escalation 的更多信息,请参阅 为 Pod 或容器配置安全上下文

image_pull_secrets

使用此设置来指定工作区拉取私有镜像所需的类型为 kubernetes.io/dockercfgkubernetes.io/dockerconfigjson 的现有 Kubernetes secrets。

默认值为 []

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  image_pull_secrets:
    - name: "image-pull-secret-name"
      namespace: "image-pull-secret-namespace"

在此示例中,来自命名空间 image-pull-secret-namespace 的 secret image-pull-secret-name 被同步到工作区的命名空间。

对于 image_pull_secretsnamenamespace 属性是必需的。secret 名称必须是唯一的。 如果设置了 shared_namespace,secret 的命名空间必须与 shared_namespace 相同。

如果你指定的 secret 在 Kubernetes 集群中不存在,则该 secret 会被忽略。 当你删除或更新 secret 时,secret 会在引用该 secret 的所有工作区命名空间中被删除或更新。

annotations

使用此设置将任意非标识性元数据附加到 Kubernetes 对象。

默认值为 {}

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  annotations:
    "example.com/key": "value"

有效的注解键是由两部分组成的字符串:

  • 可选。前缀。前缀必须为 253 个或更少的字符,并包含以句点分隔的 DNS 标签。前缀必须以斜杠(/)结尾。
  • 名称。名称必须为 63 个或更少的字符,并且仅包含字母数字字符、破折号(-)、下划线(_)和句点(.)。名称必须以字母数字字符开头和结尾。

你不应该使用以 kubernetes.iok8s.io 结尾的前缀,因为它们是为 Kubernetes 核心组件保留的。 以 gitlab.com 结尾的前缀也被保留。

有效的注解值是一个字符串。

有关 annotations 的更多信息,请参阅 注解

labels

使用此设置将任意标识性元数据附加到 Kubernetes 对象。

默认值为 {}

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  labels:
    "example.com/key": "value"

标签键是由两部分组成的字符串:

  • 可选。前缀。前缀必须为 253 个或更少的字符,并包含以句点分隔的 DNS 标签。前缀必须以斜杠(/)结尾。
  • 名称。名称必须为 63 个或更少的字符,并且仅包含字母数字字符、破折号(-)、下划线(_)和句点(.)。名称必须以字母数字字符开头和结尾。

你不应该使用以 kubernetes.iok8s.io 结尾的前缀,因为它们是为 Kubernetes 核心组件保留的。 以 gitlab.com 结尾的前缀也被保留。

有效的标签值:

  • 包含 63 个或更少的字符。值可以为空。
  • 以字母数字字符开头和结尾。
  • 可以包含破折号(-)、下划线(_)和句点(.)。

有关 labels 的更多信息,请参阅 标签

max_active_hours_before_stop

此设置在工作区处于活动状态达到指定小时数后自动停止 agent 的工作区。活动状态是任何非停止或非终止状态。

此设置的计时器在你创建工作区时启动,并在每次你重启工作区时重置。 即使工作区处于错误或失败状态,此设置也适用。

默认值为 36,即一天半。这可以避免在工作区在用户的典型工作时间期间停止。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  max_active_hours_before_stop: 60

有效值:

  • 是一个整数。
  • 大于或等于 1
  • 小于或等于 8760(一年)。
  • max_active_hours_before_stop + max_stopped_hours_before_termination 必须小于或等于 8760

自动停止仅在完全协调时触发,每小时发生一次。 这意味着工作区可能会比配置值多活动长达一小时。

max_stopped_hours_before_termination

使用此设置在工作区处于停止状态达到指定小时数后自动终止 agent 的工作区。

默认值为 722,大约一个月。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  max_stopped_hours_before_termination: 4332

有效值:

  • 是一个整数。
  • 大于或等于 1
  • 小于或等于 8760(一年)。
  • max_active_hours_before_stop + max_stopped_hours_before_termination 必须小于或等于 8760

自动终止仅在完全协调时触发,每小时发生一次。 这意味着工作区可能会比配置值多停止长达一小时。

shared_namespace

使用此设置为所有工作区指定一个共享的 Kubernetes 命名空间。

默认值为 "",这会在其自己的独立 Kubernetes 命名空间中创建每个新工作区。

当你指定一个值时,所有工作区都存在于该 Kubernetes 命名空间中,而不是单独的命名空间。

shared_namespace 设置值会对 image_pull_secretsmax_resources_per_workspace 的可接受值施加限制。

示例配置:

remote_development:
  # 注意:这是一个部分示例。
  # 一些必需字段未包含。
  shared_namespace: "example-shared-namespace"

有效值:

  • 最多包含 63 个字符。
  • 仅包含小写字母数字字符或 -
  • 以字母数字字符开头。
  • 以字母数字字符结尾。

有关 Kubernetes 命名空间的更多信息,请参阅 命名空间

完整示例配置

以下配置是一个完整的示例配置。 它包含 配置参考 中的所有可用设置:

remote_development:
  enabled: true
  dns_zone: workspaces.dev.test
  gitlab_workspaces_proxy:
    namespace: "gitlab-workspaces"

  network_policy:
    enabled: true
    egress:
      - allow: "0.0.0.0/0"
        except:
          - "10.0.0.0/8"
          - "172.16.0.0/12"
          - "192.168.0.0/16"

  default_resources_per_workspace_container:
    requests:
      cpu: "0.5"
      memory: "512Mi"
    limits:
      cpu: "1"
      memory: "1Gi"

  max_resources_per_workspace:
    requests:
      cpu: "1"
      memory: "1Gi"
    limits:
      cpu: "2"
      memory: "4Gi"

  workspaces_quota: 10
  workspaces_per_user_quota: 3

  use_kubernetes_user_namespaces: false
  default_runtime_class: "standard"
  allow_privilege_escalation: false

  image_pull_secrets:
    - name: "registry-secret"
      namespace: "default"

  annotations:
    environment: "production"
    team: "engineering"

  labels:
    app: "workspace"
    tier: "development"

  max_active_hours_before_stop: 60
  max_stopped_hours_before_termination: 4332
  shared_namespace: ""