このドキュメントでは、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 コンソールを使用してクラスタを作成します。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
フィールドに指定したサービス名が、gRPC API 構成 YAML ファイル(api_config.yaml
)の name
プロパティに指定されているホスト名と一致することを確認します。
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" ]
api_config.yaml
ファイルのname
プロパティのホスト名に一致するようにSERVICE_NAME
を変更し、deployment.yaml
ファイルを保存します。Kubernetes Service を起動します。
kubectl create -f deployment.yaml
api_config.yaml
ファイルに誤った名前が指定されている場合:
Endpoints で使用するように構成されていたサービス名を取得します。
サービスを削除します。
gcloud endpoints services delete SERVICE_NAME
SERVICE_NAME
は、前のステップで取得した名前に置き換えます。サービスが Google Cloud から削除されるまでに 30 日かかります。この間に同じサービス名を再利用することはできません。api_config.yaml
ファイルを開き、name
プロパティのホスト名を修正してファイルを保存します。更新されたサービス構成をデプロイします。
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.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 の取得をご覧ください。