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 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

  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, hal tersebut mungkin menjadi penyebab masalah ini. Lakukan langkah-langkah berikut untuk menyelesaikan masalah:

Resolusi

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

  1. 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
  2. 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:

  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 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
    
  4. 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 Dukungan Apigee.

  1. ID Project Google Cloud
  2. Organisasi Apigee Hybrid/Apigee
  3. Untuk Apigee Hybrid: overrides.yaml, yang menutupi 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