En este documento se presentan técnicas para solucionar problemas de implementaciones de Endpoints en Google Kubernetes Engine (GKE) y Kubernetes.
No se ha podido kubectl create -f gke.yaml
Si aparece el mensaje de error Failed in kubectl create -f gke.yaml
, sigue estos pasos:
Autorizar
gcloud
:gcloud auth login gcloud auth application-default login
Crea un clúster. Puedes usar el siguiente
gcloud
comando o crear un clúster con la Google Cloud consola.gcloud container clusters create CLUSTER_NAME
Sustituye
CLUSTER_NAME
por el nombre de tu clúster.Obtén las credenciales de tu clúster y ponlas a disposición de
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME
No se muestran las métricas ni los registros de los endpoints
Si puedes enviar solicitudes a tu API correctamente, pero no ves ninguna métrica ni registro en la página Endpoints > Services de la consolaGoogle Cloud , sigue estos pasos:
- Comprueba que todos los servicios obligatorios estén habilitados.
- Comprueba que se hayan concedido todos los permisos necesarios.
Acceder a los registros de Extensible Service Proxy
Si necesitas acceder a los registros de Extensible Service Proxy (ESP) para diagnosticar problemas, usa kubectl
de la siguiente manera:
Obtener el nombre del pódcast:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21s
El nombre del pod es
esp-echo-174578890-x09gl
y tiene dos contenedores:esp
yecho
.Para ver los registros de un pod, usa
kubectl logs
:kubectl logs POD_NAME -c CONTAINER_NAME
POD_NAME
yCONTAINER_NAME
se devuelven del comandokubectl get pod
del paso anterior. Por ejemplo:kubectl logs esp-echo-174578890-x09gl -c esp
Verificar el nombre del servicio
Si aparece el mensaje de errorFetching service config failed
, compruebe que el nombre del servicio que ha especificado en el campo --service
de su archivo de manifiesto de implementación (denominado archivo deployment.yaml
) coincida con el nombre de host de la propiedad name
especificada en su archivo YAML de configuración de la API gRPC (denominado archivo api_config.yaml
).
Si el nombre incorrecto está en el archivo deployment.yaml
:
Abre el archivo
deployment.yaml
y ve a la sección configurada para el contenedor de ESP. Por ejemplo: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" ]
Cambia
SERVICE_NAME
para que coincida con el nombre de host especificado en la propiedadname
del archivoapi_config.yaml
y guarda el archivodeployment.yaml
.Inicia el servicio de Kubernetes:
kubectl create -f deployment.yaml
Si el nombre incorrecto está en el archivo api_config.yaml
:
Obtén el nombre del servicio que se configuró para usar Endpoints.
Elimina el servicio:
gcloud endpoints services delete SERVICE_NAME
Sustituye
SERVICE_NAME
por el nombre del paso anterior. El servicio tardará 30 días en eliminarse de Google Cloud. No podrás volver a usar el nombre del servicio durante ese tiempo.Abre el archivo
api_config.yaml
y corrige el nombre de host en la propiedadname
. Después, guarda el archivo.Implementa la configuración del servicio actualizada:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yaml
Espera a que la configuración del servicio se implemente correctamente.
Inicia el servicio de Kubernetes:
kubectl create -f deployment.yaml
Comprobar archivos de configuración
Usa
ssh
para conectarte al pod mediantekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sustituye
CONTAINER_NAME
por el nombre de tu contenedor yPOD_NAME por el nombre de tu pod. En el directorio
etc/nginx/endpoints/
, comprueba si hay errores en los siguientes archivos de configuración:nginx.conf
- El archivo de configuraciónnginx
con directivas ESPservice.jso
: el archivo de configuración del servicio
Acceder a la página de estado de Endpoints
Si has definido rollout_strategy
como managed
al iniciar ESP y necesitas saber el ID de configuración que está usando una instancia de ESP, puedes consultar la página de estado de Endpoints.
Para acceder a la página de estado de Endpoints, sigue estos pasos:
Usa
ssh
para conectarte al pod mediantekubectl
:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Sustituye
CONTAINER_NAME
por el nombre de tu contenedor yPOD_NAME
por el nombre de tu pod.Instala
curl
.Introduce lo siguiente:
curl http://localhost:8090/endpoints_status
Se muestra algo similar a lo siguiente:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
El valor de rolloutId
es el ID de configuración del servicio que usa ESP. Para asegurarte de que ESP usa la misma configuración que Endpoints, consulta Obtener el nombre del servicio y el ID de configuración.