使用舰队管理器托管的命名空间实现多集群多租户管理(预览版)

适用于: ✔️具有中心群集的 Fleet Manager

本文介绍如何使用 Fleet Manager 托管命名空间来定义资源配额和网络策略,以及如何委托多个群集上命名空间的用户访问权限。

重要

Azure Kubernetes 舰队管理器预览功能可以通过自助服务方式选择性启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 客户支持部门会尽力为 Azure Kubernetes 舰队管理器预览功能提供部分支持。 因此,这些功能并不适合用于生产。

在您开始之前

重要

本文适用于需要跨群创建、配置和管理多群集托管命名空间 的平台管理员 。 如果您是开发人员或团队成员,想要查看和访问现有的托管命名空间,请参阅 查看您有权访问的托管命名空间

  • 需要一个具有活动订阅的 Azure 帐户。 创建账户

  • 需要一个包含中心群集的舰队。 如果没有,请参阅 创建至少一个 Azure Kubernetes 服务(AKS)群集并将其加入机群

  • 阅读 多群集托管命名空间概述 ,了解托管命名空间的概念。

  • 需要安装 Azure CLI 版本 2.58.0 或更高版本才能完成本文的操作。 若要安装或升级,请参阅安装 Azure CLI

  • 你需要 fleet Azure CLI 扩展。 您可以使用az extension addaz extension update命令安装并更新到最新版本。

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • 使用 az extension show 命令确认机群扩展版本至少为 1.7.0。

    az extension show --name fleet
    
  • 为订阅 ID、资源组、机队和机群成员设置以下环境变量:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • 使用 az account set 命令设置默认 Azure 订阅。

    az account set --subscription ${SUBSCRIPTION_ID}
    

创建新的多群集托管命名空间

重要

创建多群集托管命名空间时,需要接纳策略和删除策略。

  • 使用 az fleet namespace create 命令创建新的多群集托管命名空间。

        az fleet namespace create \
            --resource-group $GROUP \
            --fleet-name $FLEET \
            --name my-managed-namespace \ 
            --annotations annotation1=value1 annotation2=value2 \
            --labels team=myTeam label2=value2 \
            --cpu-requests 1m \
            --cpu-limits 4m \
            --memory-requests 1Mi \
            --memory-limits 4Mi \
            --ingress-policy allowAll \
            --egress-policy allowAll \
            --delete-policy keep \
            --adoption-policy never
    

重要

如果多群集托管命名空间采用单个群集托管命名空间,反之亦然,可能会导致所有权冲突。 如果这样做,请使用删除策略 keep 来避免删除仍在由 Fleet 或 AKS 群集主动管理的 Kubernetes 资源。

将访问权限委派给用户

现在,可以使用其中一个 内置角色在成员群集中为托管命名空间分配对用户的访问权限。

  • 使用 az role assignment create 命令创建角色分配。 以下示例将 Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters 角色分配给成员群集:

    az role assignment create --role "Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters" --assignee <USER-ENTRA-ID> --scope $FLEET_ID/managedNamespaces/my-managed-namespace
    

将成员群集添加到托管命名空间

可以通过指定成员群集名称的所需列表来控制要将托管命名空间部署到哪个成员群集。 在不在指定列表中的成员群集上,具有相同名称的任何未管理的命名空间将保持不变。

重要

确保成员群集满足以下要求:

  • 托管命名空间中的成员群集必须具有至少 1.30.0 的目标 Kubernetes 版本。 低于此版本的群集 将不会 阻止终端用户修改放置的资源。
  • 指定的群集必须是车队的成员。
  • 指定要将托管命名空间部署到成员群集的完整列表,使用 az fleet namespace create 命令和 --member-cluster-names 参数。 命名空间将传播到列表中的所有群集。

    在此示例中,命名空间将部署到clusterAclusterBclusterC

    az fleet namespace create \
        --resource-group $GROUP \
        --fleet-name $FLEET \
        --name my-managed-namespace \
        --member-cluster-names clusterA clusterB clusterC
    

从托管命名空间中删除成员群集

可以通过指定要保留命名空间的成员群集列表(不包括要删除的任何群集)从托管命名空间中删除成员群集。 此作从列表中不包含的群集中删除命名空间。

  • 使用带有 az fleet namespace create 参数的 --member-cluster-names 命令,指定托管命名空间需保留的成员集群列表。 命名空间将从列表中排除的任何群集中删除。

    在此示例中,将从 clusterC中删除命名空间。

    az fleet namespace create \
        --resource-group $GROUP \
        --fleet-name $FLEET \
        --name my-managed-namespace \
        --member-cluster-names clusterA clusterB
    

查看多群集托管命名空间

  • 使用 az fleet namespace show 命令查看托管命名空间。

    az fleet namespace show \
       --resource-group $GROUP \
       --fleet-name $FLEET \
       --name my-managed-namespace \
       -o table
    

    输出应类似于以下示例输出:

    AdoptionPolicy  DeletePolicy   ETag                                    Location   Name                  ProvisioningState   ResourceGroup
    --------------  ------------   -------------------------------------   --------   --------------------  -----------------   -------------
    Always          Delete         "aaaaaaaa-0b0b-1c1c-2d2d-333333333333   chinanorth3    my-managed-namespace  Succeeded           test-rg
    

删除多群集托管命名空间

  • 使用 az fleet namespace delete 命令删除多群集托管命名空间。

    az fleet namespace delete \
        --resource-group $GROUP \
        --fleet-name $FLEET \
        --name my-managed-namespace \
    

重要

删除托管命名空间时,将删除放置在托管命名空间上的 RBAC 角色,而不考虑删除策略配置

后续步骤