このドキュメントでは、Google Kubernetes Engine(GKE)と Kubernetes での Endpoints の Deployment に関するトラブルシューティング方法について説明します。
kubectl create -f gke.yaml
のエラー
「Failed in kubectl create -f gke.yaml
」というエラー メッセージが表示されたら、次の操作を行います。
gcloud
を承認します。gcloud auth login gcloud auth application-default login
クラスタを作成します。次の
gcloud
コマンドを使用するか、Google Cloud Console を使用してクラスタを作成します。gcloud container clusters create CLUSTER_NAME
CLUSTER_NAME
をクラスタ名で置き換えます。クラスタの認証情報を取得し、
kubectl
で使用可能にします。gcloud container clusters get-credentials CLUSTER_NAME
Endpoints の指標とログが表示されない
API にリクエストを正常に送信できたものの、Google Cloud コンソールの [Endpoints] > [サービス] ページに指標またはログが表示されない場合は、次の手順を行います。
Extensible Service Proxy ログにアクセスする
問題を診断するために Extensible Service Proxy(ESP)ログにアクセスする必要がある場合は、次のように kubectl
を使用します。
ポッドの名前を取得します。
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21s
ポッド名は
esp-echo-174578890-x09gl
で、esp
とecho
の 2 つのコンテナがあります。ポッドのログを表示するには、
kubectl logs
を使用します。kubectl logs POD_NAME -c CONTAINER_NAME
POD_NAME
とCONTAINER_NAME
は、前のステップのkubectl get pod
コマンドから返されます。例:kubectl logs esp-echo-174578890-x09gl -c esp
サービス名を確認する
「Fetching service config failed
」というエラー メッセージが返された場合は、Deployment マニフェスト ファイル(deployment.yaml
)の --service
フィールドで指定したサービス名が、OpenAPI ドキュメント(openapi.yaml
)の host
フィールドの名前と一致していることを確認します。
deployment.yaml
ファイルに誤った名前が指定されている場合:
deployment.yaml
ファイルを開き、ESP コンテナ用に構成されたセクションに進みます。例:containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "--http_port=8081", "--backend=127.0.0.1:8080", "--service=SERVICE_NAME", "--rollout_strategy=managed" ]
openapi.yaml
のhost
フィールド内の名前と一致するようにSERVICE_NAME
を変更して、deployment.yaml
ファイルを保存します。Kubernetes Service を起動します。
kubectl create -f deployment.yaml
openapi.yaml
ファイルに誤った名前が指定されている場合:
Endpoints で使用するように構成されていたサービス名を取得します。
サービスを削除します。
gcloud endpoints services delete SERVICE_NAME
SERVICE_NAME
は、前のステップで取得した名前に置き換えます。サービスが Google Cloud から削除されるまでに 30 日かかります。この間に同じサービス名を再利用することはできません。openapi.yaml
ファイルを開き、host
フィールドの名前を訂正してファイルを保存します。更新されたサービス構成をデプロイします。
gcloud endpoints services deploy openapi.yaml
サービス構成のデプロイが正常に完了するまで待ちます。
Kubernetes Service を起動します。
kubectl create -f deployment.yaml
構成ファイルを確認する
kubectl
を使用してポッドに接続するには、ssh
を使用します。kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
CONTAINER_NAME
をコンテナ名に、POD_NAME をポッド名に置き換えます。 etc/nginx/endpoints/
ディレクトリで、以下の構成ファイルにエラーがないか調べます。nginx.conf
- ESP ディレクティブを含むnginx
構成ファイルservice.jso
- サービス構成ファイル
Endpoints ステータス ページを表示する
ESP の起動時に rollout_strategy
を managed
に設定しており、ESP インスタンスが使用している構成 ID を確認する必要がある場合は、Endpoints ステータス ページに情報があります。
Endpoints ステータス ページにアクセスするには:
kubectl
を使用してポッドに接続するには、ssh
を使用します。kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
CONTAINER_NAME
をコンテナ名に、POD_NAME
をポッド名に置き換えます。curl
をインストールします。次の情報を入力します。
curl http://localhost:8090/endpoints_status
次のような内容が表示されます。
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
rolloutId
の値は、ESP が使用しているサービス構成 ID です。ESP が Endpoints と同じ構成を使用するようにするには、サービス名と構成 ID の取得をご覧ください。