ワークスペースの設定
ワークスペースの設定は、Kubernetes向けGitLabエージェントがKubernetesのクラスターでリモート開発環境をどのように管理するかを設定します。これらの設定は、以下を制御します:
- リソース割り当て
- セキュリティ
- ネットワーキング
- ライフサイクル管理
基本的なワークスペース設定を行う
基本的なワークスペース設定をセットアップするには:
設定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であるため、各ワークスペースのネットワークポリシーが生成されます。- エグレスルールは、インターネットへのすべてのトラフィック (
0.0.0.0/0) を許可しますが、IP CIDR範囲10.0.0.0/8、172.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/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の詳細については、ポッドまたはコンテナのセキュリティコンテキストの設定を参照してください。
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には、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.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_terminationは8760以下である必要があります。
自動停止は、毎時間行われる完全な調整時にのみトリガーされます。これは、ワークスペースが設定された値よりも最大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時間長く停止する可能性があることを意味します。
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: ""