Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat
dokumentasi Apigee Edge.
Gejala
Deployment proxy API gagal dengan peringatan No active runtime pods di UI hybrid Apigee.
Pesan error
Peringatan Tidak ada pod runtime aktif ditampilkan dalam dialog Detail di sebelah pesan error Masalah deployment di ENVIRONMENT: REVISION_NUMBER di halaman proxy API:
Masalah ini dapat berupa error yang berbeda di halaman resource UI lainnya. Berikut adalah beberapa contoh pesan error:
Pesan error Hybrid UI #1: Error Datastore
Anda mungkin melihat Error Datastore di halaman Produk API dan Aplikasi dari UI hybrid seperti yang ditunjukkan di bawah ini:
Pesan error Hybrid UI #2: Error Server Internal
Anda mungkin melihat Error Server Internal di halaman Developer UI seperti yang ditunjukkan di bawah ini:
Output perintah Kubectl
Anda dapat melihat status pod apiege-mart
, apigee-runtime
, dan apigee-
synchronizer
yang diubah menjadi CrashLoopBackOff
dalam
output perintah kubectl get pods
:
Pesan error log komponen
Anda akan mengamati error kegagalan pemeriksaan keaktifan berikut dalam log pod apigee-runtime
dalam rilis hybrid Apigee >= 1.4.0:
{"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\t ","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
Anda akan mengamati error Cannot build a cluster without contact points
berikut
di log pod apigee-synchronizer
dalam rilis hybrid Apigee >= 1.4.0:
{"timestamp":"1621575636434","level":"ERROR","thread":"main","logger":"KERNEL.DEPLOYMENT","message": "ServiceDeployer.deploy() : Got a life cycle exception while starting service [SyncService, Cannot build a cluster without contact points] : {}","context":"apigee-service- logs","exception":"java.lang.IllegalArgumentException: Cannot build a cluster without contact points\n\tat com.datastax.driver.core.Cluster.checkNotEmpty(Cluster.java:134)\n\tat com.datastax.driver.core.Cluster.<init>(Cluster.java:127)\n\tat com.datastax.driver.core.Cluster.buildFrom(Cluster.java:193)\n\tat com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1350)\n\tat io.apigee.persistence.PersistenceContext.newCluster(PersistenceContext.java:214)\n\tat io.apigee.persistence.PersistenceContext.<init>(PersistenceContext.java:48)\n\tat io.apigee.persistence.ApplicationContext.<init>(ApplicationContext.java:19)\n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceImpl.<init>(RuntimeConfigServiceImpl.java:75) \n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceFactory.newInstance(RuntimeConfigServiceFactory. java:99)\n\tat io.apigee.common.service.AbstractServiceFactory.initializeService(AbstractServiceFactory.java:301)\n \tat ...","severity":"ERROR","class":"com.apigee.kernel.service.deployment.ServiceDeployer","method":"sta rtService"}
Anda akan mengamati error kegagalan pemeriksaan keaktifan berikut di log pod apigee-mart
dalam rilis hybrid Apigee >= 1.4.0:
{"timestamp":"1621576757592","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\t","conte xt":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621576757593","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
Informasi tentang error Tidak ada pod runtime aktif
Dalam rilis Apigee Hybrid 1.4.0, fitur pemeriksaan keaktifan ditambahkan ke pod apigee-runtime
dan apigee-mart
untuk memeriksa status pod Cassandra. Jika semua pod Cassandra menjadi tidak tersedia, pemeriksaan keaktifan
apigee-runtime
dan apigee-mart
pod akan gagal. Dengan demikian, apigee-runtime
dan apigee-mart
pod akan masuk ke
status CrashLoopBackOff
yang menyebabkan deployment proxy API gagal dengan peringatan
No active runtime pods
.
Pod apigee-synchronizer
juga akan berpindah ke status CrashLoopBackOff
karena pod Cassandra tidak tersedia.
Kemungkinan penyebab
Berikut adalah beberapa kemungkinan penyebab error ini:
Penyebab | Deskripsi |
---|---|
Pod Cassandra tidak aktif | Pod Cassandra sedang tidak aktif; oleh karena itu, pod apigee-runtime tidak akan dapat berkomunikasi dengan database Cassandra. |
Replika Cassandra yang dikonfigurasi hanya dengan satu pod | Hanya memiliki satu pod Cassandra bisa menjadi titik tunggal kegagalan. |
Penyebab: Pod Cassandra tidak berfungsi
Selama proses deployment proxy API, pod apigee-runtime
terhubung ke
database Cassandra untuk mengambil resource, seperti Key Value Maps (KVM) dan cache, yang ditentukan dalam proxy API. Jika tidak ada pod Cassandra yang berjalan, pod apigee-runtime
tidak akan dapat terhubung ke database Cassandra. Hal ini menyebabkan kegagalan deployment Proxy API.
Diagnosis
- Mencantumkan pod Cassandra:
kubectl -n apigee get pods -l app=apigee-cassandra
Contoh output 1:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 0/1 Pending 0 9m23s
Contoh output 2:
NAME READY STATUS RESTARTS AGE apigee-cassandra-0 0/1 CrashLoopBackoff 0 10m
- Verifikasi status setiap pod Cassandra. Status semua pod Cassandra harus dalam status
Running
. Jika salah satu pod Cassandra berada dalam status yang berbeda, hal tersebut mungkin menjadi penyebab masalah ini. Lakukan langkah-langkah berikut untuk menyelesaikan masalah:
Resolusi
- Jika salah satu pod Cassandra berada dalam status
Pending
, lihat Pod Cassandra terjebak dalam status Tertunda untuk memecahkan masalah dan menyelesaikan masalah. - Jika salah satu pod Cassandra berada dalam status
CrashLoopBackoff
, lihat Pod Cassandra terhenti dalam status CrashLoopBackoff untuk memecahkan dan menyelesaikan masalah.Contoh output:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
Penyebab: Replika Cassandra yang dikonfigurasi hanya dengan satu pod
Jika jumlah replika Cassandra dikonfigurasi ke satu, hanya akan ada satu pod Cassandra yang tersedia dalam runtime. Akibatnya, pod apigee-runtime
dapat mengalami masalah konektivitas jika pod Cassandra tidak tersedia selama jangka waktu tertentu.
Diagnosis
- Dapatkan kumpulan stateful Cassandra dan periksa jumlah replika saat ini:
kubectl -n apigee get statefulsets -l app=apigee-cassandra
Contoh output:
NAME READY AGE apigee-cassandra-default 1/1 21m
- Jika jumlah replika dikonfigurasi ke 1, lakukan langkah-langkah berikut untuk meningkatkannya ke jumlah yang lebih tinggi.
Resolusi
Deployment non-produksi hybrid Apigee mungkin memiliki jumlah replika Cassandra yang ditetapkan ke 1. Jika ketersediaan tinggi Cassandra penting dalam deployment non-produksi, tingkatkan jumlah replika menjadi 3 untuk mengatasi masalah ini.
Lakukan langkah-langkah berikut untuk menyelesaikan masalah ini:
- Perbarui file
overrides.yaml
dan tetapkan jumlah replika Cassandra ke 3:cassandra: replicaCount: 3
Untuk informasi konfigurasi Cassandra, lihat Referensi properti konfigurasi.
- Terapkan konfigurasi di atas menggunakan CLI
apigeectl
:cd path/to/hybrid-files apigeectl apply -f overrides/overrides.yaml
- Dapatkan kumpulan stateful Cassandra dan periksa jumlah replika saat ini:
kubectl -n get statefulsets -l app=apigee-cassandra
Contoh output:
NAME READY AGE apigee-cassandra-default 3/3 27m
- Dapatkan pod Cassandra dan periksa jumlah instance saat ini. Jika semua pod belum siap dan
dalam status
Running
, tunggu pod Cassandra baru dibuat dan diaktifkan:kubectl -n get pods -l app=apigee-cassandra
Contoh output:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 29m apigee-cassandra-default-1 1/1 Running 0 21m apigee-cassandra-default-2 1/1 Running 0 19m
Contoh output:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
Harus mengumpulkan informasi diagnostik
Jika masalah terus berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Google Cloud Customer Care.
- ID Project Google Cloud
- Organisasi Apigee Hybrid/Apigee
- Untuk Apigee Hybrid:
overrides.yaml
, yang menutupi semua informasi sensitif - Status pod Kubernetes di semua namespace:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Dump info cluster Kubernetes:
# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
Referensi
- Menskalakan Cassandra secara horizontal
- Introspeksi dan Proses Debug Aplikasi Kubernetes
- Tips Praktis kubectl