本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

项目

创建项目

项目资源只能在管理集群上创建。请参见下面关于在托管集群中的项目下创建名称空间的内容。

创建基本项目

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。如果已经存在具有该确切名称的项目,则名称请求被拒绝。 在用户界面中看到的显示名称由`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`注释设置为用户的主体会在为项目所有者自动创建的projectroletemplatebinding中保留它。

如果您不希望创建者被添加为项目的所有者成员(例如,如果创建者是集群管理员),您可以将`field.cattle.io/no-creator-rbac`注释设置为`true`,这将防止相应的projectroletemplatebinding被创建。

创建具有资源配额的项目

请参阅 Kubernetes资源配额

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

创建具有容器限制范围的项目

请参阅 Kubernetes限制范围

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

要列出项目后备名称空间中的projectroletemplatebindings:

kubectl --namespace c-m-abcde-p-vwxyz get projectroletemplatebindings

从项目中删除成员

查找项目名称空间中包含成员的projectroletemplatebinding ID,如列出项目成员部分所述。

从项目的名称空间中删除项目角色模板绑定:

kubectl --namespace c-m-abcde-p-vwxyz delete projectroletemplatebindings prtb-qx874 prtb-7zw7s

在项目中创建名称空间

项目资源位于管理集群中,即使该项目是为托管集群创建的。项目下的名称空间位于托管集群中。

在管理集群中,查找您正在管理的集群的项目 ID,如果是使用 metadata.generateName 生成的:

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

注意格式,<cluster ID>:<project ID>

删除项目

在集群名称空间中查找要删除的项目:

kubectl --namespace c-m-abcde get projects

在集群名称空间下删除项目:

kubectl --namespace c-m-abcde delete project p-vwxyz

请注意,此命令不会删除以前属于该项目的名称空间和资源。

它会删除所有项目角色模板绑定,因此重新创建项目不会恢复添加到项目中的成员,您必须再次将用户添加为成员。