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 login
Crie um cluster. Pode usar o seguinte
gcloud
comando ou criar um cluster através da Google Cloud consola.gcloud container clusters create CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo 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 21s
O nome do pod é
esp-echo-174578890-x09gl
e tem dois contentores:esp
eecho
.Para ver os registos num pod, use
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
Onde
POD_NAME
eCONTAINER_NAME
são devolvidos pelo comandokubectl get pod
no 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 que especificou no campo --service
no ficheiro de manifesto de implementação (denominado ficheiro deployment.yaml
) corresponde ao nome no campo host
no seu documento OpenAPI (denominado ficheiro openapi.yaml
).
Se o nome incorreto estiver no ficheiro deployment.yaml
:
Abra o ficheiro
deployment.yaml
e 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_NAME
para que corresponda ao nome no campohost
no elementoopenapi.yaml
e guarde o ficheirodeployment.yaml
.Inicie o serviço Kubernetes:
kubectl create -f deployment.yaml
Se o nome incorreto estiver no ficheiro openapi.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_NAME
pelo 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
openapi.yaml
, corrija o nome no campohost
e guarde o ficheiro.Implemente a configuração do serviço atualizada:
gcloud endpoints services deploy openapi.yaml
Aguarde 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
ssh
para se ligar ao pod através dekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo 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çãonginx
com 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
ssh
para se ligar ao pod através dekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo nome do seu contentor ePOD_NAME
pelo nome do seu pod.Instale
curl
.Introduza os seguintes dados:
curl http://localhost:8090/endpoints_status
Apresenta 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.