Kf 问题排查

请按照以下步骤排查运行 Kf 时可能出现的各种问题。

安装 Kf 时失败

服务器错误(请求有误):字符无效

如果您在设置配置默认值时看到此错误,可能是因为命令中使用的 ${DOMAIN} 环境变量的值包含转义的“$”。请使用英文单引号定义具有空间名称或其他替代内容的网域:

Error from server (BadRequest): invalid character '$' in string escape code

Kf Kubernetes 对象错误

请按照以下说明对 Kf Kubernetes 对象进行问题排查。

  1. 通过列出所有 Kf 资源,找到要进行问题排查的 Kubernetes 资源类型的名称:

    kubectl api-resources --api-group=kf.dev
    

    输出示例:

    NAME                      SHORTNAMES   APIGROUP   NAMESPACED   KIND
    apps                                   kf.dev     true         App
    builds                                 kf.dev     true         Build
    clusterservicebrokers                  kf.dev     false        ClusterServiceBroker
    routes                                 kf.dev     true         Route
    servicebrokers                         kf.dev     true         ServiceBroker
    serviceinstancebindings                kf.dev     true         ServiceInstanceBinding
    serviceinstances                       kf.dev     true         ServiceInstance
    spaces                                 kf.dev     false        Space
    
  2. 使用 kubectl 获取要进行问题排查的资源实例。如果对象不在命名空间中,请省略 -n 标志:

    kubectl get api-resource-name.kf.dev object-name -n space-name -o yaml
    

    例如:

    kubectl get apps.kf.dev my-app -n my-space -o yaml
    
  3. 从以下标签页中选择您的问题:

    对象未协调

    1. 检查 metadata.generation 的值。每次更新对象时,此数字都会递增。如果此数字非常大,可能是两个 Kubernetes 控制器在控制该对象。检查您的集群,以了解是否有任何政策应用于正在从所需状态进行更改的对象。
    2. 检查对象所属的命名空间是否会被删除。如果会,对象可能不会进行协调。
    3. 检查 status.observedGeneration 字段是否存在。如果不存在,控制器可能尚未对该对象执行。使用 kf doctor 验证集群和控制器的运行状况是否良好。
    4. 检查 metadata.generation 字段是否与 status.observedGeneration 字段匹配。如果不匹配,请使用 kf doctor 验证集群和控制器是否运行状况良好。
    5. 根据以下常见错误列表,检查 status.conditions 列表中是否存在错误:

      • NotOwned:集群或命名空间中存在与此对象尝试创建的资源同名的另一个资源。阅读消息以查找重复的名称,并重命名冲突的资源或 Kf 对象。
      • TemplateError:Kf 资源规范或 Kf 配置中存在错误配置,导致子资源未正确协调。验证 Kf 对象的设置和 Kf 空间设置。
      • CacheOutdated:Kf 控制器接收来自 Kubernetes 的更新的速度不够快。检查 Kubernetes 集群的运行状况。
      • ReconciliationError:Kf 控制器无法创建必要的子资源。检查以确保您的集群正常运行,Kf 正在运行,且未强制执行任何会阻止 Kf 创建消息中引用的对象的政策。

    对象未删除

    1. 检查是否已设置对象的 metadata.deletionTimestamp。如果未设置,则请求的删除操作不起作用。
    2. 检查对象的 metadata.deletionTimestamp 是过去的时间。如果它是将来的时间,则不能删除该对象。
    3. 检查对象中是否存在 metadata.finalizers 列表。如果存在终结器,则必须等待对象被移除,然后才能将其删除。如果要强制删除而不等待终结器,请修改该对象以将其移除。
    4. 可能存在阻止删除对象的子对象。请让管理员检查命名空间和集群中的所有对象,以确定是否需要先手动删除其中一个对象。