Solucionar problemas no Kf

Use estas etapas para resolver vários problemas que podem ocorrer ao executar o Kf.

Falhas ao instalar o Kf

O IP do Istio não está pronto

Isso pode acontecer se o Istio estiver demorando muito para receber um IP externo. Aguarde alguns minutos e execute novamente a etapa de envio do Cloud Build. No entanto, é possível que haja outro problema.

Erro do servidor (Solicitação inválida): caractere inválido

Se você vir esse erro ao definir padrões de configuração, é provável que o valor da variável de ambiente ${DOMAIN} usada no comando inclua um "$" de escape. Use aspas simples para definir um domínio com um nome de espaço ou outra substituição:

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

Erros com objetos Kf Kubernetes

Siga estas instruções para solucionar problemas em objetos do Kubernetes KF.

  1. Encontre o nome do tipo de recurso do Kubernetes que você quer solucionar listando todos os recursos do Kubernetes:

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

    Exemplo de saída:

    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. Receba a instância do recurso que você quer solucionar usando kubectl. Se o objeto não estiver em um namespace, omita a sinalização -n:

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

    Exemplo:

    kubectl get apps.kf.dev my-app -n my-space -o yaml
    
  3. Selecione seu problema nas guias abaixo:

    O objeto não está fazendo reconciliação

    1. Verifique o valor de metadata.generation. Esse número é incrementado sempre que o objeto é atualizado. Quando esse número é extremamente alto, é provável que dois controladores do Kubernetes estejam lutando pelo objeto. Verifique o cluster para ver se alguma política está sendo aplicada ao objeto, o que pode alterar o estado pretendido.
    2. Verifique se o namespace do objeto está sendo excluído. Se estiver, o objeto poderá não ser reconciliado.
    3. Verifique se o campo status.observedGeneration existe. Caso contrário, o controlador pode não ter sido executado no objeto ainda. Confira se o cluster e os controladores estão íntegros usando kf doctor.
    4. Verifique se o campo metadata.generation corresponde ao campo status.observedGeneration. Caso contrário, confirme se o cluster e os controladores estão íntegros usando kf doctor.
    5. Verifique se há falhas na lista do status.conditions com esta lista de motivos comuns de erro:
    • NotOwned: há outro recurso que existe no cluster ou no namespace daquele que esse objeto está tentando criar. Leia a mensagem para encontrar o nome duplicado e renomear o recurso conflitante ou o objeto Kf.
    • TemplateError: há uma configuração incorreta na especificação do recurso Kf ou na configuração do Kf que faz com que o recurso filho seja reconciliado incorretamente. Valide as configurações do objeto Kf e do espaço Kf.
    • CacheOutdated: o controlador Kf não está recebendo atualizações do Kubernetes rápido o suficiente. Verifique a integridade do cluster do Kubernetes.
    • ReconciliationError: o controlador Kf não pode criar o recurso filho necessário. Verifique se o cluster está íntegro, se o Kf está em execução e se não há políticas aplicadas que impeçam o Kf de criar o objeto referenciado na mensagem.

    O objeto não está excluindo

    1. Verifique se o metadata.deletionTimestamp do objeto foi definido. Se não tiver sido, a exclusão solicitada não funcionou.
    2. Verifique se o metadata.deletionTimestamp do objeto está no passado. Se ele está no futuro, o objeto poderá não ser excluído.
    3. Verifique se existe uma lista metadata.finalizers no objeto. Se houver finalizadores, o objeto precisará aguardar a remoção antes da exclusão. Se você quiser forçar uma exclusão sem esperar os finalizadores, edite o objeto para removê-los.
    4. É possível que haja objetos filhos que estejam impedindo que o objeto seja excluído. Peça a um administrador para verificar todos os objetos no namespace e no cluster e ver se um deles precisa ser excluído manualmente primeiro.