对 Kf ServiceInstances 进行问题排查

使用以下步骤对使用 Kf ServiceInstances 时可能出现的各种问题进行排查。

对象在删除时遇到问题。

运行以下命令以获取资源信息,然后检查下面列出的原因:

kubectl get serviceinstances.kf.dev -n SPACE_NAME SERVICEINSTANCE_NAME -o yaml

kf CLI 可以帮助您检查一些问题:

kf doctor --space SPACE_NAME serviceinstance/SERVICEINSTANCE_NAME
可能的原因解决方案
删除时间戳在将来。

如果时钟有偏差,metadata.deletionTimestamp 可能仍在将来。等待几分钟,查看对象是否已删除。

该对象上存在终结器。

终结器存在于对象上,在删除对象之前,必须由设置终结器的控制器将其删除。

如要在不等待终结器的情况下强制删除,请修改对象以将其从 metadata.finalizers 数组中移除。

如需从对象中移除终结器,请使用 kubectl edit RESOURCE_TYPE RESOURCE_NAME -n my-space 命令。

如需了解详情,请参阅使用终结器控制删除

警告:移除控制器却不允许控制器完成操作可能会导致错误、安全问题、数据丢失或孤立的资源。

可能存在依赖对象。

在删除对象之前,对象可能正在等待要删除的依赖项。如需了解详情,请参阅 Kubernetes 垃圾回收指南。让管理员检查命名空间和集群中的所有对象,以查看是否有某个对象被禁止删除。

如需不等待依赖项的情况下删除对象,请使用 kubectl delete 并将级联标志设置为 --cascade=orphan

对象生成状态偏移。

运行以下命令以获取资源信息,然后检查下面列出的原因:

kubectl get serviceinstances.kf.dev -n SPACE_NAME SERVICEINSTANCE_NAME -o yaml

kf CLI 可以帮助您检查一些问题:

kf doctor --space SPACE_NAME serviceinstance/SERVICEINSTANCE_NAME
可能的原因解决方案
对象生成版本偏移。

此错误通常发生在 Kf 控制器未读取对象最新版本时,一旦 Kubernetes 副本达到最终一致性,此错误通常会自行恢复,并且通常不需要用户执行操作。

对象协调失败。

运行以下命令以获取资源信息,然后检查下面列出的原因:

kubectl get serviceinstances.kf.dev -n SPACE_NAME SERVICEINSTANCE_NAME -o yaml

kf CLI 可以帮助您检查一些问题:

kf doctor --space SPACE_NAME serviceinstance/SERVICEINSTANCE_NAME
可能的原因解决方案
对象存在 TemplateError

当用户在自定义资源规范中输入无效属性,或者空间/集群配置有误时,通常会发生此错误。

如需了解根本原因,用户可使用 kubectl describe RESOURCE_TYPE RESOURCE_NAME -n space 命令来读取对象的 status.conditions 中的详细错误消息。例如:kubectl describe serviceinstance my-service -n my-space

对象存在 ChildNotOwned 错误(名称冲突)

此错误通常表示控制器尝试创建的对象已存在。如果用户创建的 K8s 资源与控制器尝试创建的对象同名,则会发生这种情况;但更常见的情况是,如果用户删除资源,但 Kf 控制器之后尝试重新创建该资源,则会发生此错误。如果子资源仍然挂起,则其所有者将是不再存在的旧资源。

如需从错误中恢复,建议用户删除受影响的资源,然后重新创建该资源。如需删除对象,请使用 Kf 删除命令或使用 kubectl delete RESOURCE_TYPE RESOURCE_NAME -n SPACE 命令。例如 kf delete-space my-spacekubectl delete space my-space

如需重新创建资源,请使用 Kf 命令。例如:kf create-space my-space

对象存在 ReconciliationError

此错误通常表示 Kf 控制器向 Kubernetes API 服务器发出的 HTTP 调用(用以创建/更新资源)发生了问题。

如需了解根本原因,用户可使用 kubectl describe RESOURCE_TYPE RESOURCE_NAME -n space 命令来读取对象的 status.conditions 中的详细错误消息。例如:kubectl describe serviceinstance my-service -n my-space

支持性资源协调失败。

运行以下命令以获取资源信息,然后检查下面列出的原因:

kubectl get serviceinstances.kf.dev -n SPACE_NAME SERVICEINSTANCE_NAME -o yaml

kf CLI 可以帮助您检查一些问题:

kf doctor --space SPACE_NAME serviceinstance/SERVICEINSTANCE_NAME
可能的原因解决方案
存在支持性资源 DeprovisionFailed 错误。

当支持性资源(托管在外部 OSB 服务器上的 MySQL 数据库)未能成功取消配置时,通常会发生此错误。Kf 无法安全地确定依赖项资源是否已取消配置。

如需从错误中恢复,建议用户使用 kubectl describe RESOURCE_TYPE RESOURCE_NAME -n space 命令来读取对象的 status.conditions 中的详细错误消息。例如:kubectl describe servipropogatesceinstance my-service -n my-space

确认错误消息后,请让管理员检查支持性资源并进行手动清理。确定支持性资源已安全释放后,便可通过使用 kubectl edit serviceinstance my-service -n my-space 命令手动移除对象规范中的 Finalizer 来成功协调受影响的 Kf 资源。