第 9 章 卸载过程中的故障排除和删除剩余的资源

有时,由 Operator 管理的一些自定义资源可能会处于 "Terminating" 状态,等待终结器完成,尽管您执行了所有必要的清理任务。在这种情况下,您需要强制删除这些资源。如果不这样做,资源仍会处于"Terminating"状态,即使您执行了所有卸载步骤。

  1. 检查 openshift-storage 命名空间在删除时是否处于 Terminating 状态。

    $ oc get project -n <namespace>

    输出:

    NAME                DISPLAY NAME   STATUS
    openshift-storage                  Terminating
  2. 在命令输出的 STATUS 部分检查 NamespaceFinalizersRemainingNamespaceContentRemaining 信息,并对列出的每个资源执行下一步。

    $ oc get project openshift-storage -o yaml

    输出示例:

    status:
      conditions:
      - lastTransitionTime: "2020-07-26T12:32:56Z"
        message: All resources successfully discovered
        reason: ResourcesDiscovered
        status: "False"
        type: NamespaceDeletionDiscoveryFailure
      - lastTransitionTime: "2020-07-26T12:32:56Z"
        message: All legacy kube types successfully parsed
        reason: ParsedGroupVersions
        status: "False"
        type: NamespaceDeletionGroupVersionParsingFailure
      - lastTransitionTime: "2020-07-26T12:32:56Z"
        message: All content successfully deleted, may be waiting on finalization
        reason: ContentDeleted
        status: "False"
        type: NamespaceDeletionContentFailure
      - lastTransitionTime: "2020-07-26T12:32:56Z"
        message: 'Some resources are remaining: cephobjectstoreusers.ceph.rook.io has
          1 resource instances'
        reason: SomeResourcesRemain
        status: "True"
        type: NamespaceContentRemaining
      - lastTransitionTime: "2020-07-26T12:32:56Z"
        message: 'Some content in the namespace has finalizers remaining: cephobjectstoreuser.ceph.rook.io
          in 1 resource instances'
        reason: SomeFinalizersRemain
        status: "True"
        type: NamespaceFinalizersRemaining
  3. 删除上一步中列出的所有剩余资源。

    对于要删除的每个资源,请执行以下操作:

    1. 获取需要删除的资源的对象类型。查看以上输出中的消息。

      示例:

      message:Some content in the namespace has finalizers remaining: cephobjectstoreuser.ceph.rook.io

      其中 cephobjectstoreuser.ceph.rook.io 是对象类型。

    2. 获取与对象类型对应的对象名称。

      $ oc get  <Object-kind> -n  <project-name>

      示例:

      $ oc get cephobjectstoreusers.ceph.rook.io -n openshift-storage

      输出示例:

      NAME                           AGE
      noobaa-ceph-objectstore-user   26h
    3. 修补资源。

      $ oc patch -n <project-name> <object-kind>/<object-name> --type=merge -p '{"metadata": {"finalizers":null}}'

      例如:

      $ oc patch -n openshift-storage cephobjectstoreusers.ceph.rook.io/noobaa-ceph-objectstore-user \
      --type=merge -p '{"metadata": {"finalizers":null}}'

      输出:

      cephobjectstoreuser.ceph.rook.io/noobaa-ceph-objectstore-user patched
  4. 验证 openshift-storage 项目是否已删除。

    $ oc get project openshift-storage

    输出:

    Error from server (NotFound): namespaces "openshift-storage" not found

    如果问题仍然存在,请联系红帽支持团队