为什么安装 IBM Cloud Object Storage 插件失败?

虚拟私有云 传统基础设施

由于先前安装的资源冲突,安装 IBM Cloud Object Storage 插件失败。

安装 ibm-object-storage-plugin 时,安装失败。

您将看到与下例类似的错误信息:

Error: rendered manifest contains a resource that already exists. Unable to continue with install. Existing resource conflict: namespace: , name: ibmc-s3fs-smart-cross-region, existing_kind: storageClass, new_kind: storage.k8s.io/v1, Kind=StorageClass
Error: plugin "ibmc" exited with error

在安装过程中,IBM Cloud Object Storage 插件会执行许多不同的任务,如创建存储类和群集角色绑定。 有些资源可能已经存在于以前安装的 IBM Cloud Object Storage 插件中,但在删除或升级插件时没有正确删除。

解决问题

删除错误消息中显示的资源,然后重试安装。

  1. 删除错误消息中显示的资源。

    kubectl delete <resource_kind> <resource_name>
    

    删除存储类资源的示例:

    kubectl delete storageclass <storage_class_name>
    
  2. 重试安装

  3. 如果继续出现同样的错误,请确定并删除以前安装的所有冲突资源。

  4. 获取由 ibmcloud-object-storage-plugin 创建的存储类的列表。

    kubectl get sc --all-namespaces \
            -l app=ibmcloud-object-storage-plugin \
            -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
    
  5. 获取由 ibmcloud-object-storage-plugin 创建的集群角色绑定的列表。

    kubectl get ClusterRoleBinding --all-namespaces \
            -l app=ibmcloud-object-storage-plugin \
            -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
    
  6. 获取由 ibmcloud-object-storage-driver 创建的角色绑定的列表。

    kubectl get RoleBinding --all-namespaces \
        -l app=ibmcloud-object-storage-driver \
        -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
    
  7. 获取由 ibmcloud-object-storage-plugin 创建的角色绑定的列表。

    kubectl get RoleBinding --all-namespaces \
            -l app=ibmcloud-object-storage-plugin \
            -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
    
  8. 获取由 ibmcloud-object-storage-plugin 创建的集群角色的列表。

    kubectl get ClusterRole --all-namespaces \
        -l app=ibmcloud-object-storage-plugin \
        -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
    
  9. 获取由 ibmcloud-object-storage-plugin 创建的部署的列表。

    kubectl get deployments --all-namespaces \
        -l app=ibmcloud-object-storage-plugin \
        -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
    
  10. 获取由 ibmcloud-object-storage-driver 创建的守护程序集的列表。

kubectl get DaemonSets --all-namespaces \
    -l app=ibmcloud-object-storage-driver \
    -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
  1. 获取由 ibmcloud-object-storage-driver 创建的服务帐户的列表。
kubectl get ServiceAccount --all-namespaces \
    -l app=ibmcloud-object-storage-driver \
    -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
  1. 获取由 ibmcloud-object-storage-plugin 创建的服务帐户的列表。
kubectl get ServiceAccount --all-namespaces \
    -l app=ibmcloud-object-storage-plugin \
    -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
  1. 删除之前步骤中确定的冲突资源。
kubectl delete <resource_kind> <resource_name>
  1. 删除有冲突的资源后,请 重试安装

  2. 验证插件是否安装成功。

kubectl get pods -n kube-system | grep object-storage