Kf 문제 해결

다음 안내에 따라 Kf를 실행할 때 발생할 수 있는 다양한 문제를 해결할 수 있습니다.

Kf 설치 오류

Istio의 IP가 준비되지 않음

이 문제는 Istio가 외부 가져오는 데 시간이 너무 오래 걸릴 때 발생할 수 있습니다. 몇 분 기다린 후 Cloud Build 제출 단계를 다시 실행합니다. 하지만 다른 문제가 있을 수도 있습니다.

서버의 오류(잘못된 요청): 잘못된 문자

config 기본값을 설정할 때 이 오류가 표시된다면 명령어에 사용된 ${DOMAIN} env var 값에 이스케이프 처리된 '$'가 포함되었을 가능성이 있습니다. 다음과 같이 작은따옴표를 사용하여 공백 이름 또는 다른 대체 기호로 도메인을 정의하세요.

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. 하위 객체가 있어서 객체 삭제가 방지될 수도 있습니다. 관리자에게 문의하여 네임스페이스 및 클러스터의 모든 객체에서 수동으로 먼저 삭제해야 하는 항목이 있는지 확인합니다.