第4章 プロジェクトの管理
4.1. 概要
OpenShift Container Platform では、プロジェクトは関連オブジェクトを分類し、分離するために使用されます。管理者は、開発者に特定プロジェクトへのアクセスを付与し、開発者の独自プロジェクトの作成を許可したり、個別プロジェクト内の管理者権限を付与したりできます。
4.2. プロジェクトのセルフプロビジョニング
You can allow developers to create their own projects. There is an endpoint that will provision a project according to a template. The web console and oc new-project
command use this endpoint when a developer creates a new project.
4.2.1. 新規プロジェクトのテンプレートの変更
The API server automatically provisions projects based on the template that is identified by the projectRequestTemplate
parameter of the master-config.yaml file. If the parameter is not defined, the API server creates a default template that creates a project with the requested name, and assigns the requesting user to the "admin" role for that project.
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
現在のデフォルトプロジェクトテンプレートを使って開始します。
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
- オブジェクトを追加するか、または既存オブジェクトを変更することにより、テキストエディターで template.yaml ファイルを変更します。
テンプレートを読み込みます。
$ oc create -f template.yaml -n default
読み込まれたテンプレートを参照するよう master-config.yaml ファイルを変更します。
... projectConfig: projectRequestTemplate: "default/project-request" ...
プロジェクト要求が送信されると、API はテンプレートで以下のパラメーターを置き換えます。
パラメーター | 説明 |
---|---|
PROJECT_NAME |
プロジェクトの名前。必須。 |
PROJECT_DISPLAYNAME |
プロジェクトの表示名。空にできます。 |
PROJECT_DESCRIPTION |
プロジェクトの説明。空にできます。 |
PROJECT_ADMIN_USER |
管理ユーザーのユーザー名。 |
PROJECT_REQUESTING_USER |
要求するユーザーのユーザー名。 |
Access to the API is granted to developers with the self-provisioner
role and the self-provisioners
cluster role binding. This role is available to all authenticated developers by default.
4.2.2. セルフプロビジョニングの無効化
Removing the self-provisioners
cluster role from authenticated user groups will deny permissions for self-provisioning any new projects.
$ oc adm policy remove-cluster-role-from-group self-provisioner system:authenticated system:authenticated:oauth
When disabling self-provisioning, set the projectRequestMessage
parameter in the master-config.yaml file to instruct developers on how to request a new project. This parameter is a string that will be presented to the developer in the web console and command line when they attempt to self-provision a project. For example:
Contact your system administrator at projectname@example.com to request a project.
or:
To request a new project, fill out the project request form located at https://internal.example.com/openshift-project-request.
サンプル YAML ファイル
... projectConfig: ProjectRequestMessage: "message" ...
4.3. ノードセレクターの使用
ノードセレクターは、Pod の配置を制御するためにラベルが付けられたノードと併用されます。
Labels can be assigned during an advanced installation, or added to a node after installation.
4.3.1. クラスター全体でのデフォルトノードセレクターの設定
クラスター管理者は、クラスター全体でのノードセレクターを使用して Pod の配置を特定ノードに制限することができます。
/etc/origin/master/master-config.yaml でマスター設定ファイルを編集し、デフォルトノードセレクターの値を追加します。これは、指定された nodeSelector
値なしにすべてのプロジェクトで作成された Pod に適用されます。
... projectConfig: defaultNodeSelector: "type=user-node,region=east" ...
変更を有効にするために OpenShift サービスを再起動します。
# systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers
4.3.2. プロジェクト全体でのノードセレクターの設定
ノードセレクターを使って個々のプロジェクトを作成するには、プロジェクトの作成時に --node-selector
オプションを使用します。たとえば、複数のリージョンを含む OpenShift Container Platform トポロジーがある場合、ノードセレクターを使用して、特定リージョンのノードにのみ Pod をデプロイするよう特定の OpenShift Container Platform プロジェクトを制限することができます。
以下では、myproject
という名前の新規プロジェクトを作成し、Pod を user-node
および east
のラベルが付けられたノードにデプロイするように指定します。
$ oc adm new-project myproject \ --node-selector='type=user-node,region=east'
いったんこのコマンドが実行されると、これが指定プロジェクト内にあるすべての Pod に対して管理者が設定するノードセレクターになります。
new-project
サブコマンドはクラスター管理者および開発者コマンドの oc adm
と oc
の両方で利用できますが、oc adm
コマンドのみがノードセレクターを使った新規プロジェクトの作成に利用できます。new-project
サブコマンドは、プロジェクトのセルフプロビジョニング時にプロジェクト開発者が利用することはできません。
oc adm new-project
コマンドを使用すると、annotation
セクションがプロジェクトに追加されます。プロジェクトを編集し、デフォルトを上書きするように openshift.io/node-selector
値を編集できます。
... metadata: annotations: openshift.io/node-selector: type=user-node,region=east ...
また、以下のコマンドを使用して既存プロジェクトの namespace のデフォルト値を上書きできます。
# oc patch namespace myproject -p \ '{"metadata":{"annotations":{"openshift.io/node-selector":"region=infra"}}}'
openshift.io/node-selector
が空の文字列 (oc adm new-project --node-selector=""
) に設定される場合、プロジェクトには、クラスター全体のデフォルトが設定されている場合でも管理者設定のノードセレクターはありません。これは、クラスター管理者はデフォルトを設定して開発者のプロジェクトをノードのサブセットに制限したり、インフラストラクチャーまたは他のプロジェクトでクラスター全体をスケジュールしたりできることを意味します。
4.3.3. 開発者が指定するノードセレクター
OpenShift Container Platform developers can set a node selector on their pod configuration if they wish to restrict nodes even further. This will be in addition to the project node selector, meaning that you can still dictate node selector values for all projects that have a node selector value.
たとえば、プロジェクトが上記のアノテーションで作成 (openshift.io/node-selector: type=user-node,region=east
) されており、開発者が別のノードセレクターをそのプロジェクトの Pod に設定する場合 (例: clearance=classified
)、Pod はこれらの 3 つのラベル (type=user-node
、region=east
、および clearance=classified
) を持つノードにのみスケジュールされます。region=west
が Pod に設定されている場合、Pod はラベル region=east
および region=west
を持つノードを要求しても成功しません。ラベルは 1 つの値にのみ設定できるため、Pod はスケジュールされません。
4.4. ユーザーあたりのセルフプロビジョニングされたプロジェクト数の制限
The number of self-provisioned projects requested by a given user can be limited with the ProjectRequestLimit
admission control plug-in.
プロジェクトの要求テンプレートが、「新規プロジェクトのテンプレートの変更」で説明されるプロセスを使用して OpenShift Container Platform 3.1 (またはそれ以前のバージョン) で作成される場合、生成されるテンプレートには、ProjectRequestLimitConfig
に使用されるアノテーション openshift.io/requester: ${PROJECT_REQUESTING_USER}
が含まれません。アノテーションは追加する必要があります。
In order to specify limits for users, a configuration must be specified for the plug-in within the master configuration file (/etc/origin/master/master-config.yaml). The plug-in configuration takes a list of user label selectors and the associated maximum project requests.
セレクターは順番に評価されます。現在のユーザーに一致する最初のセレクターは、プロジェクトの最大数を判別するために使用されます。セレクターが指定されていない場合、制限はすべてのユーザーに適用されます。プロジェクトの最大数が指定されていない場合、無制限のプロジェクトが特定のセレクターに対して許可されます。
以下の設定は、ユーザーあたりのグローバル制限を 2 プロジェクトに設定し、ラベル level=advanced
を持つユーザーに対して 10 プロジェクト、ラベル level=admin
を持つユーザーに対して無制限のプロジェクトを許可します。
admissionConfig: pluginConfig: ProjectRequestLimit: configuration: apiVersion: v1 kind: ProjectRequestLimitConfig limits: - selector: level: admin 1 - selector: level: advanced 2 maxProjects: 10 - maxProjects: 2 3
「ユーザーおよびグループラベルの管理」では、ユーザーおよびグループのラベルを追加し、削除し、表示する方法について詳述しています。
変更を加えた後にそれらの変更を有効にするには、OpenShift Container Platform を再起動します。
# systemctl restart atomic-openshift-master-api atomic-openshift-master-controllers