Neste documento, apresentamos as técnicas de solução de problemas para implantações do Cloud Endpoints no Google Kubernetes Engine (GKE) e no Kubernetes.
Falha em kubectl create -f gke.yaml
Se você vir a mensagem de erro Failed in kubectl create -f gke.yaml
, siga estas etapas:
Autorize
gcloud
:gcloud auth login gcloud auth application-default login
Crie um cluster. É possível usar o seguinte comando
gcloud
ou criar um cluster usando Console do Google Cloud.gcloud container clusters create CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo nome do cluster.Consiga credenciais para o cluster e as disponibilize no
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
Métricas e registros do Endpoints não são exibidos
Se você conseguir enviar solicitações para a API, mas não visualizar métricas ou registros na página Endpoints > Services no console do Google Cloud, siga estas etapas:
- Verifique se todos os serviços obrigatórios estão ativados.
- Verifique se todas as permissões necessárias foram concedidas.
Como acessar registros do Extensible Service Proxy
Se você precisar acessar os registros do Extensible Service Proxy (ESP) para diagnosticar problemas, use kubectl
desta forma:
Consiga 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 ele tem dois contêineres:esp
eecho
.Para ver os registros em um pod, use
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
Em que
POD_NAME
eCONTAINER_NAME
são retornados pelo comandokubectl get pod
, na etapa anterior. Exemplo:kubectl logs esp-echo-174578890-x09gl -c esp
Como verificar o nome do serviço
Caso a mensagem de erroFetching service config failed
seja exibida, verifique se o nome de serviço especificado no campo --service
do arquivo de manifesto de implantação (chamado de arquivo deployment.yaml
) corresponde ao nome do host na propriedade name
especificada no arquivo YAML de configuração da API gRPC (chamado de arquivo api_config.yaml
).
Se o arquivo deployment.yaml
tiver o nome incorreto:
Abra o arquivo
deployment.yaml
e vá para a seção configurada para o contêiner do ESP. 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 do host especificado na propriedadename
do arquivoapi_config.yaml
e salve o arquivodeployment.yaml
.Inicie o serviço do Kubernetes:
kubectl create -f deployment.yaml
Se o arquivo api_config.yaml
tiver o nome incorreto:
Solicite o nome do serviço em que o Endpoints foi configurado para uso.
Exclua o serviço:
gcloud endpoints services delete SERVICE_NAME
Substitua
SERVICE_NAME
pelo nome da etapa anterior. O serviço é excluído do Google Cloud em 30 dias. Não é possível reutilizar o nome do serviço durante esse período.Abra o arquivo
api_config.yaml
e corrija o nome do host na propriedadename
. Depois, salve o arquivo.Implante a configuração do serviço atualizada:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
Aguarde até que a implantação da configuração do serviço seja concluída com sucesso.
Inicie o serviço do Kubernetes:
kubectl create -f deployment.yaml
Como verificar arquivos de configuração
Use
ssh
para se conectar ao pod usandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo nome do contêiner ePOD_NAME pelo nome do pod. No diretório
etc/nginx/endpoints/
, verifique se há erros nos seguintes arquivos de configuração:nginx.conf
- O arquivo de configuraçãonginx
com diretivas ESPservice.jso
- O arquivo de configuração do serviço
Como acessar a página de status do Endpoints
Se você definiu rollout_strategy
como managed
quando iniciou o ESP e precisa descobrir qual é o ID de configuração usado por uma instância do ESP, a página de status do Endpoints tem essas informações.
Veja como acessar a página de status do Endpoints:
Use
ssh
para se conectar ao pod usandokubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Substitua
CONTAINER_NAME
pelo nome do contêiner ePOD_NAME
pelo nome do pod.Instale
curl
.Digite o seguinte:
curl http://localhost:8090/endpoints_status
Isso exibe algo semelhante a:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
O valor no rolloutId
é o ID de configuração do serviço que o ESP está usando. Para garantir que o ESP use a mesma configuração que o Endpoints, consulte Como conseguir o nome e o ID de configuração do serviço.