이 문서에서는 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 Console의 Endpoints > Services 페이지에 측정항목이나 로그가 표시되지 않으면 다음 단계를 따르세요.
Extensible Service Proxy에서 로그에 액세스
문제 진단을 위해 Extensible Service Proxy(ESP) 로그에 액세스해야 하는 경우 다음과 같이 kubectl을 사용하세요.
pod 이름을 가져옵니다.
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21spod 이름은
esp-echo-174578890-x09gl이며 컨테이너 두 개(esp와echo)가 있습니다.pod의 로그를 보려면
kubectl logs를 사용합니다.kubectl logs POD_NAME -c CONTAINER_NAME
여기에서
POD_NAME과CONTAINER_NAME은 이전 단계의kubectl get pod명령어에서 반환된 값입니다. 예를 들면 다음과 같습니다.kubectl logs esp-echo-174578890-x09gl -c esp
서비스 이름 확인
Fetching service config failed 오류 메시지가 표시되면 배포 매니페스트 파일(deployment.yaml 파일)의 --service 필드에 지정한 서비스 이름이 gRPC API 구성 YAML 파일(api_config.yaml 파일)에 지정한 name 속성의 호스트 이름과 일치하는지 확인하세요.
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" ]api_config.yaml파일의name속성에 지정된 호스트 이름과 일치하도록SERVICE_NAME을 변경하고deployment.yaml파일을 저장합니다.Kubernetes 서비스를 시작합니다.
kubectl create -f deployment.yaml
api_config.yaml 파일에 이름이 잘못된 경우 다음을 수행합니다.
Endpoints에서 사용하도록 구성된 서비스 이름을 가져옵니다.
서비스를 삭제합니다.
gcloud endpoints services delete SERVICE_NAME
SERVICE_NAME을 이전 단계의 이름으로 바꿉니다. 서비스가 Google Cloud에서 삭제되는 데 30일이 걸립니다. 이 기간 동안에는 이 서비스 이름을 다시 사용할 수 없습니다.api_config.yaml파일을 열고name속성의 호스트 이름을 수정한 후 파일을 저장합니다.업데이트된 서비스 구성을 배포합니다.
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.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 가져오기를 참조하세요.