Este documento apresenta técnicas de resolução de problemas para implementações do Endpoints no Google Kubernetes Engine (GKE) e no Kubernetes.
Falha em kubectl create -f gke.yaml
Se vir a mensagem de erro Failed in kubectl create -f gke.yaml, siga os
passos seguintes:
Autorizar
gcloud:gcloud auth login gcloud auth application-default loginCrie um cluster. Pode usar o seguinte
gcloudcomando ou criar um cluster através da Google Cloud consola.gcloud container clusters create CLUSTER_NAME
Substitua
CLUSTER_NAMEpelo nome do cluster.Obtenha credenciais para o seu cluster e disponibilize-as a
kubectl:gcloud container clusters get-credentials CLUSTER_NAME
As métricas e os registos dos pontos finais não são apresentados
Se conseguir enviar pedidos com êxito para a sua API, mas não vir métricas nem registos na página Endpoints > Serviços naGoogle Cloud consola, siga estes passos:
- Verifique se todos os serviços necessários estão ativados.
- Verifique se todas as autorizações necessárias foram concedidas.
Aceder aos registos a partir do proxy de serviço extensível
Se precisar de aceder aos registos do proxy de serviço extensível (ESP) para diagnosticar problemas, use kubectl da seguinte forma:
Obtenha o nome do pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sO nome do pod é
esp-echo-174578890-x09gle tem dois contentores:espeecho.Para ver os registos num pod, use
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
Onde
POD_NAMEeCONTAINER_NAMEsão devolvidos pelo comandokubectl get podno passo anterior. Por exemplo:kubectl logs esp-echo-174578890-x09gl -c esp
Validar o nome do serviço
Se vir a mensagem de erroFetching service config failed, verifique se o nome do serviço especificado no campo --service no ficheiro de manifesto de implementação (denominado ficheiro deployment.yaml) corresponde ao nome do anfitrião na propriedade name especificada no ficheiro YAML de configuração da API gRPC (denominado ficheiro api_config.yaml).
Se o nome incorreto estiver no ficheiro deployment.yaml:
Abra o ficheiro
deployment.yamle aceda à secção configurada para o contentor do ESP. Por exemplo: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" ]Altere
SERVICE_NAMEpara que corresponda ao nome do anfitrião especificado na propriedadenameno ficheiroapi_config.yamle guarde o ficheirodeployment.yaml.Inicie o serviço Kubernetes:
kubectl create -f deployment.yaml
Se o nome incorreto estiver no ficheiro api_config.yaml:
Obtenha o nome do serviço que o Endpoints foi configurado para usar.
Elimine o serviço:
gcloud endpoints services delete SERVICE_NAME
Substitua
SERVICE_NAMEpelo nome do passo anterior. A eliminação do serviço de Google Clouddemora 30 dias. Não pode reutilizar o nome do serviço durante este período.Abra o ficheiro
api_config.yamle corrija o nome do anfitrião na propriedadenamee guarde o ficheiro.Implemente a configuração do serviço atualizada:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yamlAguarde pela implementação bem-sucedida da configuração do serviço.
Inicie o serviço Kubernetes:
kubectl create -f deployment.yaml
Verificar ficheiros de configuração
Use o
sshpara se ligar ao pod através dekubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAMEpelo nome do seu contentor ePOD_NAME pelo nome do seu pod. No diretório
etc/nginx/endpoints/, verifique se existem erros nos seguintes ficheiros de configuração:nginx.conf- O ficheiro de configuraçãonginxcom diretivas ESPservice.jso: o ficheiro de configuração do serviço
Aceder à página Estado dos endpoints
Se definiu rollout_strategy como managed quando iniciou o ESP,
e precisar de saber o ID de configuração que uma instância do
ESP está a usar, a página de estado dos Endpoints tem as informações.
Para aceder à página Estado dos endpoints:
Use o
sshpara se ligar ao pod através dekubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAMEpelo nome do seu contentor ePOD_NAMEpelo nome do seu pod.Instale
curl.Introduza os seguintes dados:
curl http://localhost:8090/endpoints_statusApresenta algo semelhante ao seguinte:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
O valor em rolloutId é o ID de configuração do serviço que o ESP está a usar. Para se certificar de que o ESP está a usar a mesma configuração que o Endpoints, consulte o artigo Obter o nome do serviço e o ID da configuração.