为什么无法创建或删除集群或工作程序节点?

在创建或删除集群时排查问题。

您无法在集群上执行与基础设施相关的命令,例如:

  • 在现有集群中添加工作程序节点或在创建新集群时添加工作程序节点。
  • 正在除去工作程序节点。
  • 正在重新加载或重启工作节点。
  • 正在调整工作程序池的大小。
  • 正在更新集群。
  • 正在删除集群。

查看以下部分中的错误消息,以对由 不正确的集群许可权其他基础架构帐户中的孤立集群帐户上基于时间的一次性密码(TOTP) 导致的与基础架构相关的问题进行故障诊断。

由于许可权和凭证错误,无法创建或删除集群或工作程序节点

您无法管理群集的工作者节点,并收到一条错误消息,其中提到 permissionscredentialsSoftLayerAPI keysrole

查看有关 准入和凭证错误 的信息,并按照相关步骤操作。

由于不正确的帐户错误,无法创建或删除工作程序节点

经典基础设施

您无法在经典 IBM Cloud 基础架构账户中管理群集的工作节点或查看群集工作节点。 但是,可以更新和管理帐户中的其他集群。

此外,您已验证自己是否具有正确的基础架构凭证

您可能会在工作程序节点状态中接收到类似于以下示例的错误消息。

incorrect account for worker - The 'classic' infrastructure user credentials changed and no longer match the worker node instance infrastructure account.

该集群可能部署在经典版 IBM Cloud 基础设施账户中,而该账户已不再与您的 Red Hat OpenShift on IBM Cloud 账户相关联。 该集群即为孤立集群。 由于这些资源位于另一个账户中,您没有修改这些资源所需的基础设施凭据。

请参考以下示例场景,以了解集群为何会变成“孤儿”集群。

  1. 您具有 IBM Cloud 现收现付帐户。
  2. 您创建了名为 Cluster1 的集群。 工作程序节点和其他基础架构资源供应到现收现付帐户随附的基础架构帐户中。
  3. 后来,您发现您的团队使用的是一个旧版或共享的经典 IBM Cloud 基础架构帐户。 您可以使用 ibmcloud oc credential set 命令,将 IBM Cloud 的基础设施凭据更改为使用您的团队账户。
  4. 您创建了另一个名为 Cluster2 的集群。 工作程序节点和其他基础架构资源供应到团队基础架构帐户中。
  5. 您注意到 Cluster1 需要工作程序节点更新或工作程序节点重新装入,或者您只是想通过删除工作程序节点来将其清除。 但是,由于 Cluster1 是通过另一个基础设施账户进行配置的,因此您无法修改其基础设施资源。Cluster1 已成为孤立资源。
  6. 请按照下一节中的故障排除步骤操作,但请勿将基础设施凭据重新设置为您的团队账户。 您可以删除 Cluster1,但现在 Cluster2 会成为孤立集群。
  7. 您将基础架构凭证改回创建 Cluster2 的团队帐户。 现在,您不再有孤立的集群!

请执行以下步骤来查看基础架构凭证,并确定您看到凭证错误的原因。

  1. 登录控制台

  2. 访问 Red Hat OpenShift 集群

  3. 检查您的集群所在区域当前在使用哪个基础架构帐户来供应集群。 将 REGION 替换为集群所在的 IBM Cloud 区域。

    ibmcloud oc credential get --region REGION
    

    如果您看到类似于以下内容的消息,那么帐户将使用缺省的链接基础架构帐户。

    No credentials set for resource group <resource group>.: The user credentials could not be found.
    
  4. 检查哪个基础架构帐户已用于供应集群。

    1. 工作程序节点选项卡中,选择工作程序节点,并记下其标识
    2. 打开菜单菜单图标,然后点击基础设施 > 经典基础设施
    3. 在“基础架构”导航窗格中,单击 “设备”>“设备列表”
    4. 搜索您先前记下的工作程序节点标识。
    5. 如果您找不到工作节点 ID,则说明该工作节点尚未配置到此基础设施账户中。 请切换到其他基础架构帐户,然后重试。
  5. 比较基础架构帐户。

    • 如果工作程序节点位于链接的基础架构帐户中: 请使用 ibmcloud oc credential unset 命令 来恢复使用与现收现付帐户链接的缺省基础架构凭证。

    • 如果工作程序节点位于不同的基础架构帐户中: 使用 ibmcloud oc credential set 命令 将基础架构凭证更改为您在上一步中找到的供应集群工作程序节点的帐户。

      如果无法再访问基础架构凭据,可以打开 IBM Cloud 支持案例,以确定其他基础架构账户管理员的电子邮件地址。 但是,IBM Cloud Support 无法为您删除孤儿群集,您必须联系另一个账户的管理员以获取基础架构凭据。

    • 如果基础架构帐户匹配: 请检查集群中的其余工作程序节点,并查看是否有任何工作程序节点分配给不同的基础架构帐户。 确保检查了集群中存在凭证问题的工作程序节点。 查看其他 公共基础架构凭证问题

  6. 现在已更新基础结构凭证,请重试阻止的操作 (例如,更新或删除工作程序节点),并验证操作是否成功。

  7. 如果同一区域和资源中的其他集群需要先前的基础架构凭证,请重复步骤 3 以将基础架构凭证重置为先前的帐户。 请注意,如果创建集群使用的基础架构帐户不同于切换到的帐户,那么可能会使这些集群变为孤立集群。

    每次需要执行集群或工作程序操作时,是否已厌倦切换基础架构帐户? 请考虑在同一基础架构帐户中重新创建区域和资源组中的所有集群。 然后,迁移工作负载并从不同的基础架构帐户中除去旧集群。

由于端点错误,无法创建或删除工作程序节点

您无法管理集群的工作程序节点,并且会收到类似于以下内容之一的错误消息。

Worker deploy failed due to network communications failing to master or registry endpoints. Please verify your network setup is allowing traffic from this subnet then attempt a worker replace on this worker
Pending endpoint gateway creation

工作节点可通过群集的虚拟专用端点(VPE)与 Kubernetes 主站通信。

在 VPC 中每个集群创建一个 VPE 网关资源。 如果未在 VPC 中正确创建集群的 VPE 网关,那么将从 VPC 中删除 VPE 网关,或者从 VPC 子网中删除为 VPE 保留的 IP 地址,那么工作程序节点将失去与 Kubernetes 主节点的连接。

在工作节点和 Kubernetes 主节点之间重新建立 VPE 连接。

  1. 要在 VPC 基础架构控制台中检查集群的 VPE 网关,请打开 VPC 仪表板的虚拟专用端点网关,并查找格式为 iks-<cluster_ID> 的 VPE 网关。

  2. 刷新集群主节点。 如果 VPC 中不存在 VPE 网关,那么将创建该网关,并且将重新建立与工作程序节点所连接到的子网上的保留 IP 地址的连接。 刷新集群后,请等待几分钟以允许操作完成。

    ibmcloud oc cluster master refresh -c <cluster_name_or_ID>
    
  3. 通过打开 VPC 仪表板的虚拟专用端点网关 并查找格式为 iks-<cluster_ID> 的 VPE 网关,验证是否为集群创建了 VPE 网关。

  4. 如果在刷新集群主节点后仍无法管理工作程序节点,请更换无法访问的工作程序节点。

    1. 列出集群中的所有工作程序节点,并记下要替换的工作程序节点的 name
        oc get nodes
        ```
         此命令中返回的 **name** 是分配给工作程序节点的专用 IP 地址。 运行 `ibmcloud oc worker ls --cluster <cluster_name_or_ID>` 命令后,查找具有相同**私有IP地址**的工作节点,即可获取有关该工作节点的更多信息。
    
    2. 替换工作程序节点。 在替换过程中,会将在工作程序节点上运行的 pod 排出并重新调度到集群中的其余工作程序节点上。 工作程序节点也被封锁,或者被标记为不可用于将来的 pod 调度。 请使用 `ibmcloud oc worker ls --cluster <cluster_name_or_ID>` 命令返回的 worker 节点 ID。
    ```sh {: pre}
        ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID>
        ```
    3. 验证工作程序节点是否已替换。
    ```sh {: pre}
        ibmcloud oc worker ls --cluster <cluster_name_or_ID>
        ```
    

由于付费帐户或一次性密码错误,无法创建或删除工作程序节点

经典基础设施

您无法管理集群的工作程序节点,并且会收到类似于以下其中一个示例的错误消息。

Unable to connect to the IBM Cloud account. Ensure that you have a paid account.
can't authenticate the infrastructure user: Time-based One Time Password authentication is required to log in with this user.

您的 IBM Cloud 帐户通过现收现付帐户使用自己的自动链接基础架构。

但是,帐户管理员已启用基于时间的一次性密码 (TOTP) 选项,以便在用户登录时提示用户输入基于时间的一次性密码 (TOTP)。 此类型的多因子认证 (MFA) 基于帐户,会影响对帐户的所有访问权。 TOTP MFA 还会影响 IBM Cloud Kubernetes Service 对 IBM Cloud 基础架构进行调用所需的访问权。 如果该账户启用了 TOTP,则无法在 IBM Cloud Kubernetes Service 中创建和管理集群及工作节点。

IBM Cloud 账户所有者或账户管理员必须采取以下行动之一。

  • 对帐户禁用 TOTP,然后继续使用 IBM Cloud Kubernetes Service 的自动链接的基础架构凭证。
  • 继续使用 TOTP,但创建 IBM Cloud Kubernetes Service 对 IBM Cloud 基础架构 API 进行直接调用时可以使用的基础架构 API 密钥。

对帐户禁用 TOTP MFA

  1. 登录到 IBM Cloud 控制台。 在菜单栏中,选择 “管理”>“访问”(IAM)
  2. 单击 设置 页面。
  3. 多因子认证下,单击编辑
  4. 选择,然后单击更新

使用 TOTP MFA 为 IBM Cloud Kubernetes Service 创建基础架构 API 密钥

  1. IBM Cloud 控制台中,选择 “管理” > “访问(IAM)” >“用户”,然后点击账户所有者的姓名。 注意:如果不使用账户所有者的凭据,请 确保使用其凭据的身份在 IBM Cloud Kubernetes Service 中具有管理员平台角色,如果使用服务 ID,则在 IAM Identity Service 中具有操作员平台角色

  2. API 密钥部分中,找到或创建经典基础架构 API 密钥。

  3. 使用基础架构 API 密钥来设置 IBM Cloud Kubernetes Service 的基础架构 API 凭证。 对创建集群的每个区域重复此命令。

    ibmcloud oc credential set classic --infrastructure-username <infrastructure_API_username> --infrastructure-api-key <infrastructure_API_authentication_key> --region <region>
    
  4. 验证是否已设置正确的凭证。

    ibmcloud oc credential get --region <region>
    

    示例输出

    Infrastructure credentials for user name user@email.com set for resource group default.
    
  5. 为确保现有集群使用更新后的基础设施 API 凭据,请在您拥有集群的每个区域中运行 ibmcloud oc api-key reset --region <region>