本文說明在 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 主控台的「Endpoints」>「Services」頁面上看見任何指標或記錄,請採取下列步驟:
從可擴充服務 Proxy 存取記錄
若您需要存取可擴充服務 Proxy (ESP) 記錄以診斷問題,請使用 kubectl
,如下所示:
取得 pod 的名稱:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21s
Pod 名稱為
esp-echo-174578890-x09gl
,並包含兩個容器:esp
和echo
。如要查看 pod 中的記錄,請使用
kubectl logs
: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
欄位中指定的服務名稱,與 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" ]
變更
SERVICE_NAME
,使其與openapi.yaml
中host
欄位的名稱相符,然後儲存deployment.yaml
檔案。啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
如果 openapi.yaml
檔案中的名稱有誤:
刪除服務:
gcloud endpoints services delete SERVICE_NAME
將
SERVICE_NAME
替換為上一步的名稱。從Google Cloud中刪除服務需要 30 天。在此期間,您無法重複使用服務名稱。開啟
openapi.yaml
檔案並更正host
欄位中的名稱,然後儲存檔案。部署已更新的服務設定:
gcloud endpoints services deploy openapi.yaml
等待服務設定成功部署。
啟動 Kubernetes 服務:
kubectl create -f deployment.yaml
檢查設定檔
使用
ssh
透過kubectl
連線至 Pod:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
將
CONTAINER_NAME
替換為容器名稱,並將POD_NAME 替換為 pod 名稱。 在
etc/nginx/endpoints/
目錄中,檢查以下設定檔是否有錯誤:nginx.conf
:帶有 ESP 指令的nginx
設定檔service.jso
- 服務設定檔
存取 Endpoints 狀態頁面
如果在啟動 ESP 時,將 rollout_strategy
設為 managed
,且您需要找出 ESP 執行個體使用的設定 ID,則可在 Endpoints 狀態頁面找到相關資訊。
如要存取 Endpoints 狀態頁面,請執行下列操作:
使用
ssh
透過kubectl
連線至 Pod:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
將
CONTAINER_NAME
替換為容器名稱,並將POD_NAME
替換為 Pod 名稱。安裝
curl
。輸入下列指令:
curl http://localhost:8090/endpoints_status
系統會顯示如下的內容:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
rolloutId
中的值是 ESP 使用的服務設定 ID。如要確保 ESP 正使用與 Endpoints 相同的設定,請參閱「取得服務名稱和設定 ID」。