專案管理
預設範本
在 OKD 內有預設的範本,當你使用 Web Console 或是 oc 建立專案的時候,就會套用這個預設範本,你可以匯出這個範本,然後修改成你的設定,再匯入至 OKD 中。
匯出範本:
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
打開範本後可以看到很多設定,包含預設的 RoleBinding 角色有哪些,你可以修改這些設定後匯入至 OKD:
$ oc create -f template.yaml -n default
接者在 master-config.yaml 中指定預設使用這個範本
...
projectConfig:
projectRequestTemplate: "default/project-request"
...
範本中有以些變數,譬如 ${PROJECT_NAME},每當要建立專案時,API 就會把者幾個變數帶入範本中。
變數 | 描述 |
---|---|
PROJECT_NAME | (必要) 專案名稱 |
PROJECT_DISPLAYNAME | 專案顯示的名稱,可以為空值。 |
PROJECT_DESCRIPTION | 專案描述,可以為空值。 |
PROJECT_ADMIN_USER | 專案管理員。 |
PROJECT_REQUESTING_USER | 建立專案的使用者。 |
具備 叢集或專案的 self-provisioners
身分的開發者都可以透過 API 建立專案,預設通過驗證的使用者都有這權限。
禁止修改範本
如果您不想讓使用者修改 self-provisioners
的專案建立範本,您可以禁止他們修改範本。
- 登入 Cluster-admin
- 查看叢集的 self-provisioners 角色。可以使用下列命令,並查看 self-provisioners 的描述。
$ oc describe clusterrolebinding.rbac self-provisioners
Name: self-provisioners
Labels: <none>
Annotations: rbac.authorization.kubernetes.io/autoupdate=true
Role:
Kind: ClusterRole
Name: self-provisioner
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:authenticated:oauth
- 從 system:authenticated:oauth 移除 self_provisioner 叢集角色
- 如果只有綁訂一個群組,執行以下指令:
$ oc patch clusterrolebinding.rbac self-provisioners -p ‘{“subjects”: null}’
- 如果有綁訂一個以上的群組、使用者或系統帳號,執行以下指令:
$ oc adm policy remove-cluster-role-from-group self-provisioner system:authenticated:oauth
-
設定專案建立提示訊息,因為使用者無法自行建立專案,但我們可以在使用者從 Web Console 或 oc 要建立專案時,告訴他要跟誰聯絡或是需要填寫表單之類的。請編輯 master-cofig.yaml 設定檔,設定當中的 projectRequestMessage 訊息,直接設定您要告訴使用只的訊息即可,例:
...
projectConfig:
ProjectRequestMessage: "To create a new project, contact at projectname@example.com."
...
- 變更設定值,避免 self-provisioners 在自動更新時被覆蓋掉。自動更新會將整個叢集的角色回復到原始狀態,請執行以下命令:
$ oc edit clusterrolebinding.rbac self-provisioners
編輯 rbac.authorization.kubernetes.io/autoupdate 的值為 false。
apiVersion: authorization.openshift.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "false"
...
或是使用命令列的方式更新。
$ oc patch clusterrolebinding.rbac self-provisioners -p '{ "metadata": { "annotations": { "rbac.authorization.kubernetes.io/autoupdate": "false" } } }'
Node 篩選器
設定預設的叢集 Node 篩選器
您可以設定 /etc/origin/master/master-config.yaml 中的 nodeSelector 變數來代表您常用的篩選器,可以設定為您常用的節點和 Pod 預設存放的節點,這樣所有新建立的 Pod 都會預設只存在這些節點,編輯 master-config.yaml:
...
projectConfig:
defaultNodeSelector:“type = user-node,region = east”
...
此變更需要重新啟動後才會生效。
# master-restart api
# master-restart controllers
設定專案的預設 Node 篩選器
如果您要建立個人專案,想要此專案下的 Pod 都只存放在特定的節點,又或者是你只想將專案存放在某些區 (譬如亞洲),你可以用 –node-selector 來指定節點。
以下的指令將會建立一個名為 myproject 的專案,並且此專案的 Pod 都只從放在特定的節點 (‘type=user-node,region=east’):
$ oc adm new-project myproject --node-selector='type=user-node,region=east'
注意!oc 與 oc adm 同樣都有 new-project 的參數,但是如果你要使用 –node-selector 的話,必須用 oc adm
您可以編輯設定中的 annotations 資訊來修改 –node-selector 的設定:
...
metadata:
annotations:
openshift.io/node-selector: type=user-node,region=east
...
可使用指令直接修改已存在的專案:
# oc patch namespace myproject -p '{"metadata":{"annotations":{"openshift.io/node-selector":"node-role.kubernetes.io/infra=true"}}}'
如果 openshift.io/node-selector
設定成空值 (oc adm new-project –node-selector=””),表示此專案沒有節點的限制,即使管理員已經設定了預設的值,也不會受到影響。換個說法,身為管理員,你可以先設定預設的 openshift.io/node-selector
,然後清除特別專案設定,讓某一些專案擴展到整個叢集。
Pod 的 Node 篩選器
開發人員如果只要想要 Pod 存放在特定的節點,可以設定 Pod 的設定檔,設定 nodeSelector
這個變數:
apiVersion: v1
kind: Pod
spec:
nodeSelector:
disktype: ssd
...
但是設定在 Pod 設定檔中的篩選器,將不會複寫叢集或是專案的設定,而是附加在條件中。
例如你的專案一開始就設定了
`openshift.io/node-selector: type=user-node,region=east`
若你在 Pod 中又設定了 clearance=classified
,則整個篩選條件會變成:
`penshift.io/node-selector: type=user-node,region=east,clearance=classified`
如果你重複設定了 region=west
,篩選條件不會覆蓋舊的,而是附加上去,變成:
`openshift.io/node-selector: type=user-node,region=east,region=west`。
很有可能造成 Pod 無法運作,需要特別注意。
限制每個用戶可以建立的專案數量
你可以設定 ProjectRequestLimit
來限制每個用戶建立專案的數量。如果你使用 OKD 3.1 的範本建立專案,或是用更早之前的版本所建立的專案,並沒有這個設定值,你需要自行加入。
你需要修改 /etc/orgin/master/master-config.yaml 檔來加入設定,設定的條件是由上而下,符合規則就不在往下比對。沒有符合條件的用戶會套用全域設定,設定的範例如下:
admissionConfig:
pluginConfig:
ProjectRequestLimit:
configuration:
apiVersion: v1
kind: ProjectRequestLimitConfig
limits:
- selector:
level: admin
- selector:
level: advanced
maxProjects: 10
- maxProjects: 2
上述設定的結果是,level=amdin 的用戶沒有上限; level=advanced 的用戶最多只能建立 10 個專案; 而不在這兩個條件的用戶都只能建立 2 個專案。修改後需重新啟動 master:
# master-restart api
# master-restart controllers
啟用系統帳號 (Service Account) 建立專案
預設上,系統帳號 (Service Account) 不能建立專案,但是管理者可以額外開啟此設定,並且可以針對每一個系統帳號建立專案的數量進行限制。您必須使用使用 [admission control] 外掛的 ProjectRequestlimit
設定。步驟:
- 建立系統帳號 (如果需要的話)
$ oc create sa
-
賦予權限
$ oc adm policy \
add-cluster-role-to-user self-provisioner \
system:serviceaccount::
修改 /etc/origin/master/master-config.yaml 檔,設定 ProjectRequestLimit
中的 maxProjectsForServiceAccounts
參數來代表可建立專案的最大數量。範例:
admissionConfig:
pluginConfig:
ProjectRequestLimit:
configuration:
apiVersion: v1
kind: ProjectRequestLimitConfig
maxProjectsForServiceAccounts: 3
- 重新啟動 OKD
完成後,您需要 重新啟動 OKD 後,變更才會生效。
# master-restart api
# master-restart controllers
文章資訊
slug:okd-manage-projects
title:OpenShift (OKD) 內的專案管理
tags:manage,projects,openshift,okd
categories:openshift
thumbnail:imagesopenshift-2.jpg