作为 vSphere 管理员,您可以创建主管命名空间,为命名空间设置 CPU、内存和存储限制,分配权限,以及以模板形式激活集群上的命名空间服务。因此,DevOps 工程师可以自助方式创建主管命名空间,并在该命名空间内部署工作负载。

自助命名空间创建和配置工作流

作为 vSphere 管理员,您可以创建主管命名空间,为命名空间设置 CPU、内存和存储限制,分配权限,以及以模板形式置备或激活集群上的命名空间服务。
图 1. 自助命名空间模板置备工作流
""
作为 DevOps 工程师,您能够以自助方式创建主管命名空间,并在其中部署工作负载。您可以将其与其他 DevOps 工程师共享,也可以在不再需要时将其删除。要与其他 DevOps 工程师共享命名空间,请联系 vSphere 管理员。
图 2. 自助式命名空间创建工作流
""

创建和配置自助命名空间模板

作为 vSphere 管理员,您可以创建主管命名空间并配置为自助命名空间模板。然后,DevOps 工程师可以使用 kubectl 命令行创建和删除主管命名空间。

前提条件

使用 vSphere IaaS control plane 配置集群。

过程

  1. vSphere Client 中,导航到 主管
  2. 单击配置选项卡,然后选择主管下的常规
  3. 选择命名空间服务
  4. 切换状态开关以启用该功能。
    将显示 创建命名空间模板页面。
  5. 配置窗格中,配置命名空间的资源。
    选项 描述
    CPU 要为命名空间预留的 CPU 资源量。
    内存 要为命名空间预留的内存量。
    存储 要为命名空间预留的总存储空间量。
    存储策略 要用于需要持久存储的工作负载的存储策略。
    网络 网络下拉菜单中,为命名空间选择网络。
    虚拟机类 用于部署独立虚拟机的虚拟机类。
    内容库 包含要用于虚拟机部署的虚拟机映像的内容库。
  6. 单击下一步
  7. 权限窗格中,添加 DevOps 工程师和组,使其能够使用模板创建命名空间。
    选择标识源、用户或组,然后单击 下一步
  8. 查看并确认窗格中,将显示您配置的属性。
    查看属性,然后单击 完成

结果

命名空间模板已配置且处于活动状态。作为vSphere管理员,您可以编辑模板。DevOps 工程师可以使用模板创建命名空间。

停用自助命名空间

作为 vSphere 管理员,您可以停用集群上的自助命名空间。

在您停用自助命名空间模板后,DevOps 工程师将无法使用该模板在集群上创建新命名空间。它们可以删除已创建的命名空间。

过程

  1. vSphere Client 中,导航到 主管
  2. 单击配置选项卡,然后选择主管下的常规
  3. 命名空间服务窗格中,切换状态开关以停用模板。
  4. 要再次激活模板,请切换状态开关。
    您可以创建另一个自助命名空间或使用现有的命名空间。

创建自助命名空间

作为 DevOps 工程师,您可以创建自助命名空间,并在其内运行工作负载。创建命名空间后,可以与其他 DevOps 工程师共享它,也可以在不再需要时将其删除。

前提条件

  • 确认 vSphere 管理员已在集群上创建并激活自助命名空间模板。请参见创建和配置自助命名空间模板
  • 确认您已被单独或作为组成员添加到自助命名空间模板的权限列表中。
  • 获取 主管 控制平面的 IP 地址。

过程

  1. 使用 kubectl 的 vSphere 插件主管 进行身份验证。请参见以 vCenter Single Sign-On 用户身份连接到主管
    kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME
  2. 将上下文切换到 主管
    kubectl config use-context SUPERVISOR-CLUSTER-IP
  3. 在集群上创建自助命名空间。
    kubectl create namespace NAMESPACE NAME
    例如
    kubectl create namespace test-ns
    注: 启用 vSphere IaaS control plane 并升级集群后,DevOps 工程师具有所有者权限。如果您只是升级了 vCenter Server 但未升级集群,则 DevOps 工程师将仅具有命名空间的编辑权限。
    您创建的命名空间将显示在集群中。要与其他 DevOps 工程师共享命名空间,请联系 vSphere 管理员。

创建带有注释和标签的自助命名空间

DevOps 工程师可以使用 kubectl 命令行创建带有注释和标签的自助命名空间。

DevOps 工程师可以使用包含用户定义的注释和标签的 YAML 清单。

过程

  1. 登录到 主管
    kubectl vsphere login --server IP-ADDRESS-SUPERVISOR-CLUSTER --vsphere-username VCENTER-SSO-USERNAME
  2. 创建带有注释和标签的命名空间 YAML 清单文件。
    kubectl create -f ns-create.yaml
    例如,创建以下 ns-create.yaml 文件:
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test-ns-yaml
      labels:
        my-label: "my-label-val-yaml"
      annotations:
        my-ann-yaml: "my-ann-val-yaml"
  3. 应用 YAML 清单。
    kubectl create -f ns-create.yaml

    kubectl apply -f ns-create.yaml
  4. 描述您创建的命名空间以查看更改。
    root@localhost [ /tmp ]# kubectl describe ns test-ns-yaml
    Name:         test-ns-yaml
    Labels:       my-label=my-label-val-yaml
                  vSphereClusterID=domain-c50
    Annotations:  my-ann-yaml: my-ann-val-yaml
                  vmware-system-namespace-owner-count: 1
                  vmware-system-resource-pool: resgroup-171
                  vmware-system-resource-pool-cpu-limit: 0.4770
                  vmware-system-resource-pool-memory-limit: 2000Mi
                  vmware-system-self-service-namespace: true
                  vmware-system-vm-folder: group-v172
    Status:       Active
     
    Resource Quotas
     Name:             test-ns-yaml
     Resource          Used  Hard
     --------          ---   ---
     requests.storage  0     5000Mi
     
     Name:                                                                           test-ns-yaml-storagequota
     Resource                                                                        Used  Hard
     --------                                                                        ---   ---
     namespace-service-storage-profile.storageclass.storage.k8s.io/requests.storage  0     9223372036854775807
     
    No LimitRange resource.

使用 kubectl 注释和 kubectl 标签更新自助命名空间

DevOps 工程师可以使用 kubectl annotatekubectl label 命令更新或删除自助命名空间注释和标签。

前提条件

确认您对要更新的命名空间具有所有者权限。

过程

  1. 登录到 主管
    kubectl vsphere login --server IP-ADDRESS-SUPERVISOR-CLUSTER --vsphere-username VCENTER-SSO-USERNAME
  2. 描述要更新的命名空间。
    root@localhost [ /tmp ]# kubectl describe ns testns
    Name:         testns
    Labels:       my-label=test-label-2
                  vSphereClusterID=domain-c50
    Annotations:  my-ann: test-ann-2
                  vmware-system-namespace-owner-count: 2
                  vmware-system-resource-pool: resgroup-153
                  vmware-system-resource-pool-cpu-limit: 0.4770
                  vmware-system-resource-pool-memory-limit: 2000Mi
                  vmware-system-self-service-namespace: true
                  vmware-system-vm-folder: group-v154
    Status:       Active
     
     
    Resource Quotas
     Name:             testns
     Resource          Used  Hard
     --------          ---   ---
     requests.storage  0     5000Mi
     
     
     Name:                                                                           testns-storagequota
     Resource                                                                        Used  Hard
     --------                                                                        ---   ---
     namespace-service-storage-profile.storageclass.storage.k8s.io/requests.storage  0     9223372036854775807
  3. 使用 kubectl annotate 命令更新注释。
    例如, kubectl annotate --overwrite ns testns my-ann="test-ann-3"
    要删除注释,请运行命令 kubectl annotate --overwrite ns testns my-ann-
  4. 使用 kubectl label 命令更新标签。
    例如, kubectl label --overwrite ns testns my-label="test-label-3"
    要删除标签,请运行命令 kubectl label --overwrite ns testns my-label-
  5. 描述命名空间,查看更新。
    root@localhost [ /tmp ]# kubectl describe ns testns
    Name:         testns
    Labels:       my-label=test-label-3
                  vSphereClusterID=domain-c50
    Annotations:  my-ann: test-ann-3
                  vmware-system-namespace-owner-count: 2
                  vmware-system-resource-pool: resgroup-153
                  vmware-system-resource-pool-cpu-limit: 0.4770
                  vmware-system-resource-pool-memory-limit: 2000Mi
                  vmware-system-self-service-namespace: true
                  vmware-system-vm-folder: group-v154
    Status:       Active
     
     
    Resource Quotas
     Name:             testns
     Resource          Used  Hard
     --------          ---   ---
     requests.storage  0     5000Mi
     
     
     Name:                                                                           testns-storagequota
     Resource                                                                        Used  Hard
     --------                                                                        ---   ---
     namespace-service-storage-profile.storageclass.storage.k8s.io/requests.storage  0     9223372036854775807
     
     
    No LimitRange resource.

使用 kubectl edit 更新自助命名空间

DevOps 工程师可以使用 kubectl edit 命令更新自助命名空间。

前提条件

确认您对要更新的命名空间具有所有者权限。

过程

  1. 登录到 主管
    kubectl vsphere login --server IP-ADDRESS-SUPERVISOR-CLUSTER --vsphere-username VCENTER-SSO-USERNAME
  2. 描述要更新的命名空间。
    kubectl describe ns testns-1
    Name:         testns
    Labels:       vSphereClusterID=domain-c50
    Annotations:  my-ann: test-ann-2
                  vmware-system-namespace-owner-count: 2
                  vmware-system-resource-pool: resgroup-153
                  vmware-system-resource-pool-cpu-limit: 0.4770
                  vmware-system-resource-pool-memory-limit: 2000Mi
                  vmware-system-self-service-namespace: true
                  vmware-system-vm-folder: group-v154
    Status:       Active
     
     
    Resource Quotas
     Name:             testns-1
     Resource          Used  Hard
     --------          ---   ---
     requests.storage  0     5000Mi
     
     
     Name:                                                                           testns-1-storagequota
     Resource                                                                        Used  Hard
     --------                                                                        ---   ---
     namespace-service-storage-profile.storageclass.storage.k8s.io/requests.storage  0     9223372036854775807
  3. 使用 kubectl edit 命令编辑命名空间。
    例如, kubectl edit ns testns-1
    kubectl edit 命令将在 KUBE_EDITOR 或 EDITOR 环境变量定义的文本编辑器中打开命名空间清单。
  4. 更新标签。
    例如, my-label=test-label
  5. 更新注释。
    例如, my-ann: test-ann
  6. 描述命名空间,查看更新。
    root@localhost [ /tmp ]# kubectl describe ns testns-1
    Name:         testns-1
    Labels:       my-label=test-label
                  vSphereClusterID=domain-c50
    Annotations:  my-ann: test-ann
                  vmware-system-namespace-owner-count: 1
                  vmware-system-resource-pool: resgroup-173
                  vmware-system-resource-pool-cpu-limit: 0.4770
                  vmware-system-resource-pool-memory-limit: 2000Mi
                  vmware-system-self-service-namespace: true
                  vmware-system-vm-folder: group-v174
    Status:       Active
     
     
    Resource Quotas
     Name:             testns-1
     Resource          Used  Hard
     --------          ---   ---
     requests.storage  0     5000Mi
     
     
     Name:                                                                           testns-1-storagequota
     Resource                                                                        Used  Hard
     --------                                                                        ---   ---
     namespace-service-storage-profile.storageclass.storage.k8s.io/requests.storage  0     9223372036854775807
     
     
    No LimitRange resource.
    

删除自助命名空间

作为 DevOps 工程师,您可以删除自己创建的自助命名空间。

前提条件

确认已使用 kubectl 的 vSphere 插件 创建自助命名空间。

过程

  1. 使用 kubectl 的 vSphere 插件主管 进行身份验证。请参见以 vCenter Single Sign-On 用户身份连接到主管
  2. 从集群中删除自助命名空间。
    kubectl delete namespace NAMESPACE NAME
    例如:
    kubectl delete namespace test-ns