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

ワークスペースの設定

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

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

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

基本的なワークスペース設定をセットアップするには:

  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ワークスペースのファイアウォールルール。enabledegressフィールドを含むオブジェクト。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。namenamespaceフィールドを持つオブジェクトの配列。[]いいえ
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であるため、各ワークスペースのネットワークポリシーが生成されます。
  • エグレスルールは、インターネットへのすべてのトラフィック (0.0.0.0/0) を許可しますが、IP CIDR範囲10.0.0.0/8172.16.0.0/12、および192.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:
  # 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の詳細については、ポッドまたはコンテナのセキュリティコンテキストの設定を参照してください。

image_pull_secrets

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

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

設定例:

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には、namenamespaceの属性が必要です。シークレットの名前は一意である必要があります。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.5日)です。これにより、ユーザーの通常の作業時間中にワークスペースが停止するのを防ぎます。

設定例:

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_termination8760以下である必要があります。

自動停止は、毎時間行われる完全な調整時にのみトリガーされます。これは、ワークスペースが設定された値よりも最大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_termination8760以下である必要があります。

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

shared_namespace

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

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

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

shared_namespaceに値を設定すると、image_pull_secretsおよびmax_resources_per_workspaceに許容される値に制限が課せられます。

設定例:

remote_development:
  # NOTE: This is a partial example.
  # Some required fields are not included.
  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: ""