ワークスペースの設定
ワークスペースの設定では、Kubernetesクラスタ内のリモート開発環境をKubernetes向けGitLabエージェントがどのように管理するかを設定します。これらの設定では、以下を制御します:
- リソース割り当て
- セキュリティ
- ネットワーキング
- ライフサイクル管理
基本的なワークスペースの設定を行う
基本的なワークスペースの設定を行うには、次の手順を実行します:
設定YAMLファイルを開きます。
最小限必要な以下の設定を追加します:
remote_development: enabled: true dns_zone: "<workspaces.example.dev>"変更をコミットします。
ワークスペースの設定が動作しない場合は、トラブルシューティングワークスペースを参照してください。
ある設定の値が無効な場合、その値を修正するまで、どの設定も更新できません。enabledを除く、これらの設定を更新しても、既存のワークスペースには影響しません。
構成リファレンス
| 設定 | 説明 | 形式 | デフォルト値 | 必須 |
|---|---|---|---|---|
enabled | Kubernetes向けGitLabエージェントに対してリモート開発が有効になっているかどうかを示します。 | ブール値 | false | はい |
dns_zone | ワークスペースが利用可能なDNSゾーン。 | 文字列。有効なDNS形式。 | なし | はい |
gitlab_workspaces_proxy | gitlab-workspaces-proxyがインストールされているネームスペース。 | 文字列。有効なKubernetesネームスペース名。 | gitlab-workspaces | いいえ |
network_policy | ワークスペースのファイアウォールルール。 | enabledフィールドとegressフィールドを含むオブジェクト。 | network_policyを参照してください。 | いいえ |
default_resources_per_workspace_container | ワークスペースコンテナあたりのCPUとメモリのデフォルトリクエストと制限。 | CPUとメモリのrequestsとlimitsを持つオブジェクト。 | {} | いいえ |
max_resources_per_workspace | ワークスペースあたりのCPUとメモリの最大リクエストと制限。 | CPUとメモリのrequestsとlimitsを持つオブジェクト | {} | いいえ |
workspaces_quota | Kubernetes向けGitLabエージェントのワークスペースの最大数。 | 整数 | -1 | いいえ |
workspaces_per_user_quota | ユーザーごとのワークスペースの最大数。 | 整数 | -1 | いいえ |
use_kubernetes_user_namespaces | Kubernetesでユーザーネームスペースを使用するかどうかを示します。 | ブール値:trueまたはfalse | false | いいえ |
default_runtime_class | デフォルトのKubernetes RuntimeClass。 | 文字列。有効なRuntimeClass名。 | "" | いいえ |
allow_privilege_escalation | 特権エスカレーションを許可します。 | ブール値 | false | いいえ |
image_pull_secrets | ワークスペースのプライベートイメージをプルするための既存のKubernetes Secrets。 | nameフィールドとnamespaceフィールドを持つオブジェクトの配列。 | [] | いいえ |
annotations | Kubernetesオブジェクトに適用する注釈。 | キー/バリューペアのマップ。有効なKubernetes注釈形式。 | {} | いいえ |
labels | Kubernetesオブジェクトに適用するラベル。 | キー/バリューペアのマップ。有効なKubernetesラベル形式 | {} | いいえ |
max_active_hours_before_stop | ワークスペースを停止する前にアクティブにできる最大時間数。 | 整数 | 36 | いいえ |
max_stopped_hours_before_termination | ワークスペースを終了する前に停止できる最大時間数。 | 整数 | 744 | いいえ |
shared_namespace | 共有Kubernetesネームスペースを使用するかどうかを示します。 | 文字列 | "" | いいえ |
enabled
この設定を使用して、以下を定義します:
- Kubernetes向けGitLabエージェントは、GitLabインスタンスと通信できます。
- Kubernetes向けGitLabエージェントでワークスペースを作成できます。
デフォルト値はfalseです。
エージェント設定でリモート開発を有効にするには、enabledをtrueに設定します:
remote_development:
# NOTE: This is a partial example.
# Some required fields are not included.
enabled: trueアクティブまたは停止したワークスペースを持つエージェントに対して、enabledがfalseに設定されている場合、それらのワークスペースは孤立状態になり、使用できなくなります。
エージェントでのリモート開発を無効にする前に:
- 関連付けられているすべてのワークスペースが不要になったことを確認します。
- 実行中のワークスペースを手動で削除して、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"この設定では、次のようになります:
enabledがtrueであるため、ネットワークポリシーが各ワークスペースに対して生成されます。- エグレスルールでは、IP CIDR範囲
10.0.0.0/8、172.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/8、172.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の場合、requestsとlimitsが必要です。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の場合、requestsとlimitsが必要です。CPUとメモリに使用できる値の詳細については、以下を参照してください:
ワークスペースは、requestsとlimitsに設定した値を超えると失敗します。
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_quotaが0に設定されます。
workspaces_quotaがエージェントの非終了ワークスペースの数より小さい値に設定されている場合、エージェントのワークスペースは自動的に終了しません。
デフォルト値は-1(無制限)です。有効な値は-1以上です。
設定例:
remote_development:
# NOTE: This is a partial example.
# Some required fields are not included.
workspaces_quota: 10workspaces_per_user_quota
この設定を使用して、ユーザーあたりのワークスペースの最大数を設定します。
ユーザーの新しいワークスペースは、次の場合には作成できません:
- ユーザーのワークスペースの数が、定義された
workspaces_per_user_quotaに達した場合。 workspaces_per_user_quotaが0に設定されます。
workspaces_per_user_quotaがユーザーの非終了ワークスペースの数より小さい値に設定されている場合、ユーザーのワークスペースは自動的に終了しません。
デフォルト値は-1(無制限)です。有効な値は-1以上です。
設定例:
remote_development:
# NOTE: This is a partial example.
# Some required fields are not included.
workspaces_per_user_quota: 3use_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: trueuse_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に設定できます:
default_runtime_classが空でない値に設定されている。use_kubernetes_user_namespacesは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: trueallow_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_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ネームスペースの詳細については、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: ""