本文說明在 Google Kubernetes Engine (GKE) 和 Kubernetes 上部署 Endpoints 的疑難排解技巧。
失敗時間: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 console 的「Endpoints」>「Services」(服務) 頁面上看見任何指標或記錄,請按照下列步驟操作:
從可擴充服務 Proxy 存取記錄
若您需要存取可擴充服務 Proxy (ESP) 記錄以診斷問題,請使用 kubectl,如下所示:
取得 pod 的名稱:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sPod 名稱為
esp-echo-174578890-x09gl,其中包含兩個容器:esp和echo。請使用
kubectl logs查看 pod 中的記錄:kubectl logs POD_NAME -c CONTAINER_NAME
在上一步中,從
kubectl get pod指令傳回POD_NAME與CONTAINER_NAME。例如:kubectl logs esp-echo-174578890-x09gl -c esp
驗證服務名稱
如果看到Fetching service config failed 錯誤訊息,請確認部署資訊清單檔案 (稱為 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" ]將
SERVICE_NAME變更為與api_config.yaml檔案中name屬性指定的伺服器名稱相符,然後儲存deployment.yaml檔案。啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
如果 api_config.yaml 檔案中的名稱有誤:
刪除服務:
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 服務:
kubectl create -f deployment.yaml
檢查設定檔
使用
kubectl,透過ssh連線至 Pod:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
將您的容器名稱替換為
CONTAINER_NAME,並將您的 Pod 名稱替換為POD_NAME。 在
etc/nginx/endpoints/目錄中,檢查以下設定檔是否有錯誤:nginx.conf- 帶有 ESP 指令的nginx設定檔service.jso- 服務設定檔
存取 Endpoints 狀態頁面
如果在啟動 ESP 時,將 rollout_strategy 設定為 managed,且您需要找到 ESP 執行個體正在使用的設定 ID,則可在 Endpoints 狀態頁面找到相關資訊。
如要存取 Endpoints 狀態頁面,請執行下列操作:
使用
kubectl,透過ssh連線至 Pod:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
將您的容器名稱替換為
CONTAINER_NAME,並將您的 Pod 名稱替換為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。