專案
建立專案
專案資源只能在管理叢集上建立。請參閱以下內容以了解如何在受管理叢集中建立專案下的命名空間。
建立基本專案
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: Project
metadata:
generateName: p-
namespace: c-m-abcde
spec:
clusterName: c-m-abcde
displayName: myproject
EOF
建立新專案時,您有兩個主要選項來設定名稱:
- 自動產生: 使用
metadata.generateName來確保唯一的專案 ID。但請注意,您必須使用kubectl create(而不是kubectl apply) 來使用此選項,因為kubectl apply不支援它。 - 手動命名: 您可以使用
metadata.name明確設定專案 ID。如果具有該確切名稱的專案已存在,則名稱請求將被拒絕。 UI 中看到的顯示名稱由spec.displayName設定。如果未提供spec.displayName,則會改用metadata.name欄位。
將 metadata.namespace 和 spec.clusterName 設定為專案所屬叢集的 ID。
如果您透過叢集成員帳戶建立專案,並希望該帳戶能夠存取該專案,則必須包含註解 field.cattle.io/creatorId,並將其設定為叢集成員帳戶的使用者 ID。
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: Project
metadata:
annotations:
field.cattle.io/creatorId: user-id
generateName: p-
namespace: c-m-abcde
spec:
clusterName: c-m-abcde
displayName: myproject
EOF
設定 field.cattle.io/creatorId 欄位會建立一個 ProjectRoleTemplateBinding,授予指定使用者使用 get 指令查看專案資源並在 Rancher UI 中檢視專案的能力。叢集擁有者和管理員帳戶無需設定此註解即可執行這些任務。
將 field.cattle.io/creator-principal-name 註解設定為使用者的 principal,會將其保留在自動為專案擁有者建立的 projectroletemplatebinding 中。
如果您不希望將建立者新增為專案的擁有者成員 (例如,如果建立者是叢集管理員),您可以將 field.cattle.io/no-creator-rbac 註解設定為 true,這將防止建立對應的 projectroletemplatebinding。
建立具有資源配額的專案
請參閱 Kubernetes Resource Quota。
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: Project
metadata:
generateName: p-
namespace: c-m-abcde
spec:
clusterName: c-m-abcde
displayName: myproject
resourceQuota:
limit:
limitsCpu: 1000m
namespaceDefaultResourceQuota:
limit:
limitsCpu: 50m
EOF
建立具有容器限制範圍的專案
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: Project
metadata:
generateName: p-
namespace: c-m-abcde
spec:
clusterName: c-m-abcde
displayName: myproject
containerDefaultResourceLimit:
limitsCpu: 100m
limitsMemory: 100Mi
requestsCpu: 50m
requestsMemory: 50Mi
EOF
支援命名空間
建立專案後,status.backingNamespace 欄位會被填充。這代表在管理叢集中建立的命名空間,用於管理專案相關資源。儲存在支援命名空間中的資源範例包括專案範圍的密碼和專案角色範本繫結。
將成員新增到專案
查詢專案的支援命名空間以指定 metadata.namespace 欄位值,並查詢專案的 ID 以指定 projectName 欄位值。
kubectl --namespace c-m-abcde get projects
查詢角色範本 ID 以指定 roleTemplateName 欄位值 (例如 project-member 或 project-owner)。
kubectl get roletemplates
新增使用者成員時,請指定 userPrincipalName 欄位:
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: ProjectRoleTemplateBinding
metadata:
generateName: prtb-
namespace: c-m-abcde-p-vwxyz
projectName: c-m-abcde:p-vwxyz
roleTemplateName: project-member
userPrincipalName: keycloak_user://user
EOF
新增群組成員時,請改為指定 groupPrincipalName 欄位:
kubectl create -f - <<EOF
apiVersion: management.cattle.io/v3
kind: ProjectRoleTemplateBinding
metadata:
generateName: prtb-
namespace: p-vwxyz
projectName: c-m-abcde:p-vwxyz
roleTemplateName: project-member
groupPrincipalName: keycloak_group://group
EOF
為您想要指派給專案成員的每個角色建立一個 projectroletemplatebinding。
列出專案成員
查詢專案支援命名空間:
kubectl --namespace c-m-abcde get projects
要列出專案支援命名空間中的 projectroletemplatebinding:
kubectl --namespace c-m-abcde-p-vwxyz get projectroletemplatebindings
從專案中刪除成員
如列出專案成員區段所述,在專案命名空間中查詢包含成員的 projectroletemplatebinding ID。
從專案命名空間中刪除 projectroletemplatebinding:
kubectl --namespace c-m-abcde-p-vwxyz delete projectroletemplatebindings prtb-qx874 prtb-7zw7s
在專案中建立命名空間
專案資源位於管理叢集中,即使專案是用於受管理叢集。專案下的命名空間位於受管理叢集中。
在管理叢集上,如果使用 metadata.generateName 產生,請查詢您正在管理的叢集的專案 ID:
kubectl --namespace c-m-abcde get projects
在受管理叢集上,建立具有專案註解的命名空間:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
annotations:
field.cattle.io/projectId: c-m-abcde:p-vwxyz
EOF
注意格式,<叢集 ID>:<專案 ID>。
刪除專案
在叢集命名空間中查詢要刪除的專案:
kubectl --namespace c-m-abcde get projects
刪除叢集命名空間下的專案:
kubectl --namespace c-m-abcde delete project p-vwxyz
請注意,此指令不會刪除先前屬於該專案的命名空間和資源。
它確實會刪除專案的所有專案角色範本繫結,因此重新建立專案不會恢復新增到專案的成員,您必須再次將使用者新增為成員。