Dokumen ini menyajikan teknik pemecahan masalah untuk deployment Endpoints di Google Kubernetes Engine (GKE) dan Kubernetes.
Gagal di kubectl create -f gke.yaml
Jika Anda melihat pesan error Failed in kubectl create -f gke.yaml, lakukan
langkah-langkah berikut:
Izinkan
gcloud:gcloud auth login gcloud auth application-default loginMembuat cluster. Anda dapat menggunakan perintah
gcloudberikut, atau membuat cluster menggunakan Google Cloud konsol.gcloud container clusters create CLUSTER_NAME
Ganti
CLUSTER_NAMEdengan nama cluster Anda.Dapatkan kredensial untuk cluster Anda dan sediakan kredensial tersebut untuk
kubectl:gcloud container clusters get-credentials CLUSTER_NAME
Metrik dan log endpoint tidak ditampilkan
Jika Anda berhasil mengirim permintaan ke API, tetapi tidak melihat metrik atau log di halaman Endpoints > Services di konsolGoogle Cloud , lakukan langkah-langkah berikut:
- Pastikan semua layanan yang diperlukan telah diaktifkan.
- Pastikan semua izin yang diperlukan telah diberikan.
Mengakses log dari Extensible Service Proxy
Jika Anda perlu mengakses log Extensible Service Proxy (ESP) untuk mendiagnosis masalah, gunakan kubectl sebagai berikut:
Dapatkan nama pod:
kubectl get pod NAME READY STATUS RESTARTS AGE esp-echo-174578890-x09gl 2/2 Running 2 21sNama pod adalah
esp-echo-174578890-x09gldan memiliki dua penampung:espdanecho.Untuk melihat log di pod, gunakan
kubectl logs:kubectl logs POD_NAME -c CONTAINER_NAME
Dengan
POD_NAMEdanCONTAINER_NAMEditampilkan dari perintahkubectl get pod, di langkah sebelumnya. Contoh:kubectl logs esp-echo-174578890-x09gl -c esp
Memverifikasi nama layanan
Jika Anda melihat pesan errorFetching service config failed, pastikan
nama layanan yang Anda tentukan di kolom --service dalam file manifes Deployment (disebut sebagai file deployment.yaml) cocok dengan nama host
di properti name yang ditentukan dalam file YAML konfigurasi gRPC API
(disebut sebagai file api_config.yaml).
Jika nama yang salah ada dalam file deployment.yaml:
Buka file
deployment.yamldan buka bagian yang dikonfigurasi untuk penampung ESP. Contoh: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" ]Ubah
SERVICE_NAMEagar cocok dengan nama host yang ditentukan dalam propertinamedi fileapi_config.yamldan simpan filedeployment.yaml.Mulai layanan Kubernetes:
kubectl create -f deployment.yaml
Jika nama yang salah ada dalam file api_config.yaml:
Dapatkan nama layanan yang dikonfigurasi untuk digunakan Endpoint.
Hapus layanan:
gcloud endpoints services delete SERVICE_NAME
Ganti
SERVICE_NAMEdengan nama dari langkah sebelumnya. Perlu waktu 30 hari agar layanan dihapus dari Google Cloud. Anda tidak dapat menggunakan kembali nama layanan selama waktu ini.Buka file
api_config.yamldan perbaiki nama host di propertiname, lalu simpan file.Deploy konfigurasi layanan yang telah diperbarui:
gcloud endpoints services deploy api_descriptor.pb api_config.yaml api_config_http.yamlTunggu hingga konfigurasi layanan berhasil di-deploy.
Mulai layanan Kubernetes:
kubectl create -f deployment.yaml
Memeriksa file konfigurasi
Gunakan
sshuntuk terhubung ke pod menggunakankubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ganti
CONTAINER_NAMEdengan nama penampung danPOD_NAME dengan nama pod Anda. Di direktori
etc/nginx/endpoints/, periksa file konfigurasi berikut untuk menemukan error:nginx.conf- File konfigurasinginxdengan perintah ESPservice.jso- File konfigurasi layanan
Mengakses halaman status Endpoints
Jika Anda menetapkan rollout_strategy ke managed saat memulai ESP,
dan Anda perlu mengetahui ID konfigurasi yang digunakan instance
ESP, halaman status Endpoint memiliki informasi tersebut.
Untuk mengakses halaman status Endpoints:
Gunakan
sshuntuk terhubung ke pod menggunakankubectl:kubectl exec -ti -c CONTAINER_NAME POD_NAME bash
Ganti
CONTAINER_NAMEdengan nama penampung danPOD_NAMEdengan nama pod Anda.Instal
curl.Masukkan:
curl http://localhost:8090/endpoints_statusTampilannya akan terlihat seperti berikut:
"serviceConfigRollouts": { "rolloutId": "2017-08-09r27", "percentages": { "2017-08-09r26": "100" } }
Nilai di rolloutId adalah ID konfigurasi layanan yang
digunakan ESP. Untuk memastikan ESP menggunakan konfigurasi yang sama dengan Endpoint, lihat Mendapatkan nama layanan dan ID konfigurasi.