Resolver problemas de SourcePackages do Kf

Siga estas etapas para resolver vários problemas que podem ocorrer ao usar SourcePackages do Kf.

Não é possível excluir o objeto

Execute o comando a seguir para ver as informações dos recursos. Depois, verifique as causas abaixo:

kubectl get sourcepackages.kf.dev -n SPACE_NAME SOURCEPACKAGE_NAME -o yaml

A CLI kf permite verificar alguns dos problemas:

kf doctor --space SPACE_NAME sourcepackage/SOURCEPACKAGE_NAME
Possível causaSolução
O carimbo de data/hora da exclusão está no futuro.

Com o desvio do relógio, pode ser que o metadata.deletionTimestamp ainda esteja no futuro. Aguarde alguns minutos para ver se o objeto foi excluído.

Há finalizadores no objeto.

Há finalizadores presentes no objeto. Eles precisam ser removidos pelo controlador que os definiu antes da exclusão do objeto.

Para forçar uma exclusão sem esperar os finalizadores, edite o objeto para removê-los da matriz metadata.finalizers.

Aviso: remover os finalizadores sem permitir que os controladores sejam concluídos pode causar erros, problemas de segurança, perda de dados ou recursos órfãos.

Pode ser que existam objetos dependentes.

O objeto pode estar aguardando que os dependentes sejam excluídos antes de ser excluído. Consulte o guia de coleta de lixo do Kubernetes para saber mais. Peça a um admin para verificar todos os objetos no namespace e no cluster e conferir se algum deles está bloqueando a exclusão.

Se você precisar remover o objeto sem esperar os dependentes, use kubectl delete com a flag de cascata configurada como: --cascade=orphan.

Inconsistência do estado de geração de objetos

Execute o comando a seguir para ver as informações dos recursos. Depois verifique as causas abaixo:

kubectl get sourcepackages.kf.dev -n SPACE_NAME SOURCEPACKAGE_NAME -o yaml

A CLI kf permite verificar alguns dos problemas:

kf doctor --space SPACE_NAME sourcepackage/SOURCEPACKAGE_NAME
Possível causaSolução
Há uma inconsistência na versão de geração do objeto.

Em geral, isso ocorre quando o controlador do Kf não lê a versão mais recente do objeto. Esse erro costuma ter uma recuperação automática quando as réplicas do Kubernetes alcançam a consistência posterior, e isso normalmente não requer ação dos usuários.

Falha na reconciliação de objetos

Execute o comando a seguir para ver as informações dos recursos. Depois verifique as causas abaixo:

kubectl get sourcepackages.kf.dev -n SPACE_NAME SOURCEPACKAGE_NAME -o yaml

A CLI kf permite verificar alguns dos problemas:

kf doctor --space SPACE_NAME sourcepackage/SOURCEPACKAGE_NAME
Possível causaSolução
O objeto tem TemplateError

Em geral, esse erro ocorre quando o usuário insere uma propriedade inválida na especificação de recurso personalizado ou quando a configuração no espaço/cluster é inválida.

Para entender a causa raiz, o usuário pode ler a mensagem de erro mais longa no status.conditions do objeto usando o comando: kubectl describe RESOURCE_TYPE RESOURCE_NAME -n space. Por exemplo, kubectl describe serviceinstance my-service -n my-space.

O objeto tem um erro ChildNotOwned (conflitos de nome)

Em geral, esse erro significa que os objetos que o controlador está tentando criar já existem. Isso acontece quando o usuário cria um recurso do K8s com o mesmo nome daquele que o controlador está tentando criar e ocorre com mais frequência quando o usuário exclui um recurso e, em seguida, o controlador do Kf tenta recriá-lo. Se ainda houver um recurso filho, o proprietário dele será o recurso antigo que não existe mais.

Para corrigir o erro, recomendamos que o usuário exclua o recurso afetado e o recrie. Para excluir o objeto, use o comando kubectl delete RESOURCE_TYPE RESOURCE_NAME -n SPACE ou um de exclusão do Kf. Por exemplo, kf delete-space my-space ou kubectl delete space my-space.

Para recriar um recurso, use um comando do Kf. Por exemplo, kf create-space my-space.

O objeto tem ReconciliationError

Em geral, esse erro significa que algo deu errado com a chamada HTTP feita pelo controlador do Kf para o servidor da API do Kubernetes para criar/atualizar o recurso.

Para entender a causa raiz, o usuário pode ler a mensagem de erro mais longa no status.conditions do objeto usando o comando: kubectl describe RESOURCE_TYPE RESOURCE_NAME -n space. Por exemplo, kubectl describe serviceinstance my-service -n my-space.