Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat dokumentasi
Apigee Edge.
Gejala
Deployment proxy API gagal dengan peringatan Tidak ada pod runtime aktif di UI hybrid Apigee.
Pesan error
Peringatan Tidak ada pod runtime aktif ditampilkan di dialog Details di samping pesan error Deployment issues on ENVIRONMENT: REVISION_NUMBER di halaman proxy API:
Masalah ini dapat muncul sebagai error yang berbeda di halaman resource lain pada UI. Berikut beberapa contoh pesan error:
Pesan error UI campuran #1: Error Datastore
Anda dapat mengamati Error Datastore di halaman API Products dan Apps pada UI campuran seperti yang ditunjukkan di bawah:
Pesan error UI campuran #2: Error Server Internal
Anda mungkin melihat Internal Server Error di halaman Developer pada UI seperti yang ditunjukkan di bawah ini:
Output perintah Kubectl
Anda dapat mengamati 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 liveness probe berikut di log pod apigee-runtime
dalam rilis campuran 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 melihat 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 liveness probe berikut dalam log pod apigee-mart
di rilis campuran 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 liveness probe ditambahkan ke pod apigee-runtime
dan apigee-mart
untuk memeriksa status pod Cassandra. Jika semua pod Cassandra tidak tersedia, pemeriksaan keaktifan pod
apigee-runtime
dan apigee-mart
akan gagal. Dengan demikian, pod
apigee-runtime
dan apigee-mart
akan masuk ke
status CrashLoopBackOff
yang menyebabkan deployment proxy API gagal dengan peringatan
No active runtime pods
.
Pod apigee-synchronizer
juga akan beralih ke status CrashLoopBackOff
karena pod Cassandra tidak tersedia.
Kemungkinan penyebab
Berikut beberapa kemungkinan penyebab error ini:
Penyebab | Deskripsi |
---|---|
Pod Cassandra tidak berfungsi | Pod Cassandra 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 dapat menjadi titik tunggal kegagalan. |
Penyebab: Pod Cassandra tidak aktif
Selama proses deployment proxy API, pod apigee-runtime
terhubung ke database Cassandra untuk mengambil resource, seperti Peta Nilai Kunci (KVM) dan cache, yang ditentukan di 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 ada pod Cassandra yang berada dalam status yang berbeda, hal itu dapat menjadi alasan masalah ini. Lakukan langkah-langkah berikut untuk mengatasi masalah ini:
Resolusi
- Jika ada pod Cassandra yang berada dalam status
Pending
, lihat Pod Cassandra macet dalam status Tertunda untuk memecahkan masalah dan menyelesaikan masalah. - Jika ada pod Cassandra yang berada dalam status
CrashLoopBackoff
, lihat Pod Cassandra macet dalam status CrashLoopBackoff untuk memecahkan masalah 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 dikonfigurasi hanya dengan satu pod
Jika jumlah replika Cassandra dikonfigurasi menjadi satu, hanya akan ada satu pod Cassandra yang tersedia
dalam runtime. Akibatnya, pod apigee-runtime
mungkin mengalami masalah konektivitas
jika pod Cassandra tersebut tidak tersedia selama jangka waktu tertentu.
Diagnosis
- Dapatkan set 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 Apigee hybrid 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 mengatasi 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
apigeectl
CLI:cd path/to/hybrid-files apigeectl apply -f overrides/overrides.yaml
- Dapatkan set 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 meskipun setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Layanan Pelanggan Google Cloud.
- ID Project Google Cloud
- Apigee hybrid/organisasi Apigee
- Untuk Apigee Hybrid:
overrides.yaml
, yang menyamarkan 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
- Intropeksi dan Proses Debug Aplikasi Kubernetes
- Tips Praktis kubectl