Kf のトラブルシューティング

Kf の実行時に発生する可能性のあるさまざまな問題のトラブルシューティング手順について説明します。

Kf インストール時の障害

Istio's IP is not ready(Istio の IP の準備ができていません)

Istio による外部 IP の取得に時間がかかりすぎている可能性があります。数分待ってから Cloud Build の送信手順を再度実施します。ただし、他のことが原因の可能性もあります。

Error from server (Bad Request): Invalid character(サーバーエラー(不正なリクエスト): 無効な文字)

このエラーが構成のデフォルトを設定する際に表示された場合、コマンド内の ${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 を使用して、トラブルシューティングするリソースのインスタンスを取得します。オブジェクトが Namespace にない場合は、-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 の値を確認します。この数は、オブジェクトが更新されるたびに増加します。この数が非常に大きい場合は、2 つの Kubernetes コントローラがオブジェクトに対して競合している可能性が考えられます。クラスタをチェックし、ポリシーの適用によって望ましい状態からオブジェクトが変更されていないか確認します。
    2. オブジェクトが属する Namespace が削除中になっていないか確認します。削除中の場合は、オブジェクトの整合性が確保されない可能性があります。
    3. status.observedGeneration フィールドが存在することを確認します。存在していない場合は、コントローラがオブジェクトに対してまだ実行されていない可能性があります。kf doctor を使用して、クラスタとコントローラが正常な状態であることを確認します。
    4. metadata.generation フィールドが status.observedGeneration フィールドと一致していることを確認します。一致していない場合は、kf doctor を使用してクラスタとコントローラが正常な状態であることを確認します。
    5. 次のよくあるエラーのリストに照らし合わせて、status.conditions リストに障害がないか確認します。
    • NotOwned: クラスタまたは Namespace に、このオブジェクトが作成しようとしているリソースがすでに存在します。メッセージを読んで重複している名前を探し、競合しているリソースまたは Kf オブジェクトの名前を変更します。
    • TemplateError: Kf リソース仕様または Kf 構成に設定ミスがあり、子リソースが間違った形に調整されています。Kf オブジェクトと Kf スペースの設定を確認します。
    • CacheOutdated: Kf コントローラが Kubernetes から受け取るアップデートに遅延が発生しています。Kubernetes クラスタの状態を確認します。
    • ReconciliationError: Kf コントローラが必要な子リソースを作成できません。クラスタが正常な状態であること、Kf が実行中であること、そして、メッセージで示されているオブジェクトが Kf で作成不可になるようなポリシーが適用されていないことを確認します。

    削除できない

    1. オブジェクトの metadata.deletionTimestamp が設定されていることを確認します。設定されていない場合、リクエストされた削除は機能しません。
    2. オブジェクトの metadata.deletionTimestamp が過去の日時であることを確認します。未来の日時になっている場合は、オブジェクトが削除されない可能性があります。
    3. オブジェクトに metadata.finalizers リストが存在するかどうかを確認します。存在する場合、ファイナライザが削除されてからでなければオブジェクトを削除できません。ファイナライザを待たずに削除を強制する場合は、オブジェクトを編集してファイナライザを削除します。
    4. オブジェクトの削除を妨げる子オブジェクトが存在する場合があります。管理者に依頼して、Namespace とクラスタ内の全オブジェクトをチェックし、いずれかを手動で削除する必要がないか確認してください。