正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

ワークスペースの設定

ワークスペースの設定では、Kubernetesクラスタ内のリモート開発環境をKubernetes向けGitLabエージェントがどのように管理するかを設定します。これらの設定では、以下を制御します:

  • リソース割り当て
  • セキュリティ
  • ネットワーキング
  • ライフサイクル管理

基本的なワークスペースの設定を行う

基本的なワークスペースの設定を行うには、次の手順を実行します:

  1. 設定YAMLファイルを開きます。

  2. 最小限必要な以下の設定を追加します:

    remote_development:
      enabled: true
      dns_zone: "<workspaces.example.dev>"
  3. 変更をコミットします。

ワークスペースの設定が動作しない場合は、トラブルシューティングワークスペースを参照してください。

ある設定の値が無効な場合、その値を修正するまで、どの設定も更新できません。enabledを除く、これらの設定を更新しても、既存のワークスペースには影響しません。

構成リファレンス

設定説明形式デフォルト値必須
enabledKubernetes向けGitLabエージェントに対してリモート開発が有効になっているかどうかを示します。ブール値falseはい
dns_zoneワークスペースが利用可能なDNSゾーン。文字列。有効なDNS形式。なしはい
gitlab_workspaces_proxygitlab-workspaces-proxyがインストールされているネームスペース。文字列。有効なKubernetesネームスペース名。gitlab-workspacesいいえ
network_policyワークスペースのファイアウォールルール。enabledフィールドとegressフィールドを含むオブジェクト。network_policyを参照してください。いいえ
default_resources_per_workspace_containerワークスペースコンテナあたりのCPUとメモリのデフォルトリクエストと制限。CPUとメモリのrequestslimitsを持つオブジェクト。{}いいえ
max_resources_per_workspaceワークスペースあたりのCPUとメモリの最大リクエストと制限。CPUとメモリのrequestslimitsを持つオブジェクト{}いいえ
workspaces_quotaKubernetes向けGitLabエージェントのワークスペースの最大数。整数-1いいえ
workspaces_per_user_quotaユーザーごとのワークスペースの最大数。整数-1いいえ
use_kubernetes_user_namespacesKubernetesでユーザーネームスペースを使用するかどうかを示します。ブール値:trueまたはfalsefalseいいえ
default_runtime_classデフォルトのKubernetes RuntimeClass文字列。有効なRuntimeClass名。""いいえ
allow_privilege_escalation特権エスカレーションを許可します。ブール値falseいいえ
image_pull_secretsワークスペースのプライベートイメージをプルするための既存のKubernetes Secrets。nameフィールドとnamespaceフィールドを持つオブジェクトの配列。[]いいえ
annotationsKubernetesオブジェクトに適用する注釈。キー/バリューペアのマップ。有効なKubernetes注釈形式。{}いいえ
labelsKubernetesオブジェクトに適用するラベル。キー/バリューペアのマップ。有効なKubernetesラベル形式{}いいえ
max_active_hours_before_stopワークスペースを停止する前にアクティブにできる最大時間数。整数36いいえ
max_stopped_hours_before_terminationワークスペースを終了する前に停止できる最大時間数。整数744いいえ
shared_namespace共有Kubernetesネームスペースを使用するかどうかを示します。文字列""いいえ

enabled

この設定を使用して、以下を定義します:

  • Kubernetes向けGitLabエージェントは、GitLabインスタンスと通信できます。
  • Kubernetes向けGitLabエージェントでワークスペースを作成できます。

デフォルト値はfalseです。

エージェント設定でリモート開発を有効にするには、enabledtrueに設定します:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  enabled: true

アクティブまたは停止したワークスペースを持つエージェントに対して、enabledfalseに設定されている場合、それらのワークスペースは孤立状態になり、使用できなくなります。

エージェントでのリモート開発を無効にする前に:

  • 関連付けられているすべてのワークスペースが不要になったことを確認します。
  • 実行中のワークスペースを手動で削除して、Kubernetesクラスタから削除します。

dns_zone

この設定を使用して、ワークスペースが使用可能なURLのDNSゾーンを定義します。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  dns_zone: "<workspaces.example.dev>"

gitlab_workspaces_proxy

この設定を使用して、gitlab-workspaces-proxyがインストールされているネームスペースを定義します。gitlab_workspaces_proxy.namespaceのデフォルト値はgitlab-workspacesです。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  gitlab_workspaces_proxy:
    namespace: "<custom-gitlab-workspaces-proxy-namespace>"

network_policy

この設定を使用して、各ワークスペースのネットワークポリシーを定義します。この設定は、ワークスペースのトラフィックを制御します。

デフォルト値はです:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  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であるため、ネットワークポリシーが各ワークスペースに対して生成されます。
  • エグレスルールでは、IP CIDR範囲10.0.0.0/8172.16.0.0/12、および192.168.0.0/16を除く、インターネット(0.0.0.0/0)へのすべてのトラフィックが許可されます。

ネットワークポリシーの動作は、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:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  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/12、または192.168.0.0/16を除く任意の範囲である。
  • 宛先IPは172.16.123.1/32です。

default_resources_per_workspace_container

この設定を使用して、ワークスペースコンテナあたりのCPUとメモリのデフォルトリクエストと制限を定義します。devfileで定義したリソースは、この設定をオーバーライドします。

default_resources_per_workspace_containerの場合、requestslimitsが必要です。CPUとメモリの使用可能な値の詳細については、Kubernetesのリソース単位を参照してください。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  default_resources_per_workspace_container:
    requests:
      cpu: "0.5"
      memory: "512Mi"
    limits:
      cpu: "1"
      memory: "1Gi"

max_resources_per_workspace

この設定を使用して、ワークスペースあたりのCPUとメモリの最大リクエストと制限を定義します。

max_resources_per_workspaceの場合、requestslimitsが必要です。CPUとメモリに使用できる値の詳細については、以下を参照してください:

ワークスペースは、requestslimitsに設定した値を超えると失敗します。

shared_namespaceが設定されている場合、max_resources_per_workspaceは空のハッシュである必要があります。ユーザーは、この値をここで指定するのと同じ結果を得るために、shared_namespaceにKubernetesのリソースクォータを作成できます。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  max_resources_per_workspace:
    requests:
      cpu: "1"
      memory: "1Gi"
    limits:
      cpu: "2"
      memory: "2Gi"

定義する最大リソースには、プロジェクトリポジトリの複製など、ブートストラップ操作を実行するためにinitコンテナに必要なリソースを含める必要があります。

workspaces_quota

この設定を使用して、Kubernetes向けGitLabエージェントのワークスペースの最大数を設定します。

エージェントの新しいワークスペースは、次の場合には作成できません:

  • エージェントのワークスペースの数が、定義されたworkspaces_quotaに達した場合。
  • workspaces_quota0に設定されます。

workspaces_quotaがエージェントの非終了ワークスペースの数より小さい値に設定されている場合、エージェントのワークスペースは自動的に終了しません。

デフォルト値は-1(無制限)です。有効な値は-1以上です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  workspaces_quota: 10

workspaces_per_user_quota

この設定を使用して、ユーザーあたりのワークスペースの最大数を設定します。

ユーザーの新しいワークスペースは、次の場合には作成できません:

  • ユーザーのワークスペースの数が、定義されたworkspaces_per_user_quotaに達した場合。
  • workspaces_per_user_quota0に設定されます。

workspaces_per_user_quotaがユーザーの非終了ワークスペースの数より小さい値に設定されている場合、ユーザーのワークスペースは自動的に終了しません。

デフォルト値は-1(無制限)です。有効な値は-1以上です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  workspaces_per_user_quota: 3

use_kubernetes_user_namespaces

この設定を使用して、Kubernetesでユーザーネームスペース機能を使用するかどうかを指定します。

ユーザーネームスペースは、コンテナ内で実行されているユーザーをホスト上のユーザーから分離します。

デフォルト値はfalseです。値をtrueに設定する前に、Kubernetesクラスタがユーザーネームスペースをサポートしていることを確認してください。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  use_kubernetes_user_namespaces: true

use_kubernetes_user_namespacesの詳細については、ユーザーネームスペースを参照してください。

default_runtime_class

この設定を使用して、ワークスペースでコンテナを実行するために使用されるコンテナランタイム設定を選択します。

デフォルト値は""です。これは、値がないことを示します。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  default_runtime_class: "example-runtime-class-name"

有効な値:

  • 253文字以下を含みます。
  • 小文字の英字、数字、-、または.のみを含みます。
  • 英数字で始まる。
  • 英数字で終わる。

default_runtime_classの詳細については、ランタイムクラスを参照してください。

allow_privilege_escalation

この設定を使用して、プロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します。

この設定は、no_new_privsフラグがコンテナプロセスに設定されるかどうかを直接制御します。

デフォルト値はfalseです。値は、次のいずれかの場合にのみtrueに設定できます:

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  default_runtime_class: "example-runtime-class-name"
  allow_privilege_escalation: true

allow_privilege_escalationの詳細については、Podまたはコンテナのセキュリティコンテキストの設定を参照してください。

image_pull_secrets

この設定を使用して、ワークスペースがプライベートイメージをプルするために必要なタイプkubernetes.io/dockercfgまたはkubernetes.io/dockerconfigjsonの既存のKubernetes Secretsを指定します。

デフォルト値は[]です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  image_pull_secrets:
    - name: "image-pull-secret-name"
      namespace: "image-pull-secret-namespace"

この例では、ネームスペースimage-pull-secret-namespaceのシークレットimage-pull-secret-nameが、ワークスペースのネームスペースに同期されます。

image_pull_secretsの場合、name属性とnamespace属性が必要です。シークレットの名前は一意である必要があります。shared_namespaceが設定されている場合、シークレットのネームスペースはshared_namespaceと同じである必要があります。

指定したシークレットがKubernetesクラスタに存在しない場合、シークレットは無視されます。シークレットを削除または更新すると、シークレットが参照されているワークスペースのすべてのネームスペースで、シークレットが削除または更新されます。

annotations

この設定を使用して、任意の非識別メタデータをKubernetesオブジェクトに添付します。

デフォルト値は{}です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  annotations:
    "example.com/key": "value"

有効なアノテーションキーは、次の2つの部分からなる文字列です:

  • オプション。プレフィックス。プレフィックスは253文字以下で、ピリオドで区切られたDNSラベルを含める必要があります。プレフィックスはスラッシュ(/)で終わる必要があります。
  • 名前。名前は63文字以下で、英数字、ダッシュ(-)、アンダースコア(_)、ピリオド(.)のみを含める必要があります。名前は英数字で始まり、英数字で終わる必要があります。

kubernetes.ioおよびk8s.ioで終わるプレフィックスは、Kubernetesコアコンポーネント用に予約されているため、使用しないでください。gitlab.comで終わるプレフィックスも予約されています。

有効なアノテーション値は文字列です。

annotationsの詳細については、注釈を参照してください。

labels

この設定を使用して、任意の識別メタデータをKubernetesオブジェクトに添付します。

デフォルト値は{}です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  labels:
    "example.com/key": "value"

ラベルキーは、次の2つの部分からなる文字列です:

  • オプション。プレフィックス。プレフィックスは253文字以下で、ピリオドで区切られたDNSラベルを含める必要があります。プレフィックスはスラッシュ(/)で終わる必要があります。
  • 名前。名前は63文字以下で、英数字、ダッシュ(-)、アンダースコア(_)、ピリオド(.)のみを含める必要があります。名前は英数字で始まり、英数字で終わる必要があります。

kubernetes.ioおよびk8s.ioで終わるプレフィックスは、Kubernetesコアコンポーネント用に予約されているため、使用しないでください。gitlab.comで終わるプレフィックスも予約されています。

有効なラベル値:

  • 63文字以下を含みます。値は空にできます。
  • 英数字で始まり、英数字で終わります。
  • ダッシュ(-)、アンダースコア(_)、ピリオド(.)を含めることができます。

labelsの詳細については、ラベルを参照してください。

max_active_hours_before_stop

この設定は、エージェントのワークスペースが指定された時間数アクティブになった後、自動的に停止します。アクティブ状態は、停止または終了していない状態です。

この設定のタイマーは、ワークスペースの作成時に開始され、ワークスペースを再起動するたびにリセットされます。ワークスペースがエラー状態または失敗状態にある場合でも適用されます。

デフォルト値は36、つまり1日半です。これにより、ユーザーの通常の勤務時間中にワークスペースが停止することが回避されます。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  max_active_hours_before_stop: 60

有効な値:

  • 整数です。
  • 1以上(>=)。
  • 8760(1年)以下です。
  • max_active_hours_before_stop+max_stopped_hours_before_terminationは、8760以下である必要があります。

自動停止は、1時間ごとに発生する完全な調整でのみトリガーされます。これは、ワークスペースが設定された値よりも最大1時間長くアクティブになる可能性があることを意味します。

max_stopped_hours_before_termination

この設定を使用して、エージェントのワークスペースが指定された時間数停止状態になった後、自動的に終了するようにします。

デフォルト値は722、つまり約1か月です。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  max_stopped_hours_before_termination: 4332

有効な値:

  • 整数です。
  • 1以上(>=)。
  • 8760(1年)以下です。
  • max_active_hours_before_stop+max_stopped_hours_before_terminationは、8760以下である必要があります。

自動終了は、1時間ごとに発生する完全な調整でのみトリガーされます。これは、ワークスペースが設定された値よりも最大1時間長く停止する可能性があることを意味します。

shared_namespace

この設定を使用して、すべてのワークスペースに対して共有Kubernetesネームスペースを指定します。

デフォルト値は""で、個別のKubernetesネームスペースに新しいワークスペースが作成されます。

値を指定すると、すべてのワークスペースが個別のネームスペースではなく、そのKubernetesネームスペースに存在します。

shared_namespaceの値を設定すると、image_pull_secretsmax_resources_per_workspaceに許容される値に制限が加わります。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  shared_namespace: "example-shared-namespace"

有効な値:

  • 含めることができる文字数は最大63文字です。
  • 小文字の英数字または「-」のみを含みます。
  • 英数字で始まる。
  • 英数字で終わる。

Kubernetesネームスペースの詳細については、Namespacesを参照してください。

完全な構成例

次の設定は、完全な設定例です。これには、構成リファレンスで使用可能なすべての設定が含まれています:

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: ""