Deployment proxy API gagal tanpa peringatan pod runtime yang aktif

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 Apigee Hybrid UI.

Pesan error

Peringatan Tidak ada pod runtime yang aktif ditampilkan di Detail dialog di samping pesan error Masalah deployment pada ENVIRONMENT: REVISION_NUMBER di halaman proxy API:

Masalah ini dapat bermunculan sebagai error yang berbeda di halaman resource UI lainnya. Berikut beberapa contoh pesan error:

Pesan error UI Hybrid #1: Error Datastore

Anda mungkin melihat Error Datastore pada Produk API dan Aplikasi UI campuran seperti yang ditunjukkan di bawah ini:

Pesan error UI Hybrid #2: Error Server Internal

Anda mungkin melihat Error Server Internal di halaman Developer pada UI seperti yang ditunjukkan di bawah ini:

Output perintah Kubectl

Anda mungkin melihat status pod apiege-mart, apigee-runtime, dan apigee- synchronizer berubah menjadi CrashLoopBackOff di Output perintah kubectl get pods:

Pesan error log komponen

Anda akan mengamati error kegagalan pemeriksaan keaktifan berikut di apigee-runtime Log pod 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 apigee-synchronizer log pod pada 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 pod apigee-mart log 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 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 CrashLoopBackOff status menyebabkan deployment proxy API gagal dengan peringatan No active runtime pods. Pod apigee-synchronizer juga akan dipindahkan 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 tidak aktif; sehingga 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 aktif

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 sedang berjalan, maka pod apigee-runtime tidak akan dapat terhubung ke dari database Cassandra. Hal ini menyebabkan kegagalan deployment Proxy API.

Diagnosis

  1. 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
  2. Verifikasi status setiap pod Cassandra. Status semua pod Cassandra harus dalam status Running. Jika salah satu pod Cassandra berada dalam status yang berbeda, itu bisa berarti alasan untuk masalah ini. Lakukan langkah-langkah berikut untuk menyelesaikan masalah:

Resolusi

  1. Jika salah satu pod Cassandra berada dalam status Pending, lihat Pod Cassandra macet dalam status Tertunda untuk memecahkan masalah dan menyelesaikan masalah.
  2. Jika salah satu pod Cassandra berada dalam status CrashLoopBackoff, lihat Pod Cassandra macet 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 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 untuk jangka waktu tertentu.

Diagnosis

  1. 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
  2. Jika jumlah replika dikonfigurasi menjadi 1, lakukan langkah berikut untuk meningkatkannya angka yang lebih tinggi.

Resolusi

Deployment non-produksi hybrid Apigee mungkin Jumlah replika Cassandra ditetapkan ke 1. Jika ketersediaan tinggi Cassandra penting dalam kondisi non- deployment produksi, tingkatkan jumlah replika menjadi 3 untuk menyelesaikan masalah ini.

Lakukan langkah-langkah berikut untuk menyelesaikan masalah ini:

  1. Perbarui file overrides.yaml dan tetapkan jumlah replika Cassandra ke 3:
    cassandra:
      replicaCount: 3

    Untuk informasi konfigurasi Cassandra, lihat Referensi properti konfigurasi.

  2. Terapkan konfigurasi di atas menggunakan CLI apigeectl:
    cd path/to/hybrid-files
    apigeectl apply -f overrides/overrides.yaml
    
  3. 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
    
  4. Mendapatkan pod Cassandra dan memeriksa 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 berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Google Cloud Customer Care.

  1. ID Project Google Cloud
  2. Organisasi Apigee Hybrid/Apigee
  3. Untuk Apigee Hybrid: overrides.yaml, yang menyamarkan semua informasi sensitif
  4. Status pod Kubernetes di semua namespace:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
    
  5. 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