Deployment proxy API gagal tanpa peringatan pod runtime 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 Apigee Hybrid.

Pesan error

Peringatan No active runtime pods ditampilkan dalam 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 UI lainnya. Berikut beberapa contoh pesan error:

Pesan error UI Hybrid #1: Error Datastore

Anda dapat melihat Error Datastore di halaman Produk API dan Aplikasi UI hybrid seperti yang ditunjukkan di bawah:

Pesan error UI Hybrid #2: Error Server Internal

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

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 melihat error kegagalan pemeriksaan keaktifan berikut di 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 melihat Cannot build a cluster without contact points error berikut dalam log pod apigee-synchronizer di 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 melihat 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

Pada 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 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 aktif Pod Cassandra tidak aktif; oleh karena itu, pod apigee-runtime tidak akan dapat berkomunikasi dengan database Cassandra.
Replika Cassandra dikonfigurasi dengan hanya 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 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 ada pod Cassandra yang memiliki status berbeda, hal itu dapat menjadi penyebab masalah ini. Lakukan langkah-langkah berikut untuk mengatasi masalah ini:

Resolusi

  1. Jika ada pod Cassandra dalam status Pending, lihat Pod Cassandra macet dalam status Tertunda untuk memecahkan masalah dan menyelesaikannya.
  2. Jika ada pod Cassandra dalam status CrashLoopBackoff, lihat Pod Cassandra macet dalam status CrashLoopBackoff untuk memecahkan masalah dan menyelesaikannya.

    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 dengan hanya satu pod

Jika jumlah replika Cassandra dikonfigurasi menjadi satu, hanya akan ada satu pod Cassandra yang tersedia di runtime. Akibatnya, pod apigee-runtime dapat mengalami masalah konektivitas jika pod Cassandra tersebut tidak tersedia selama 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-langkah berikut untuk menambahkannya menjadi 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:

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

    Untuk mengetahui informasi konfigurasi Cassandra, lihat Referensi properti konfigurasi.

  2. Terapkan konfigurasi di atas menggunakan Helm:

    Uji coba:

      helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE \
      --dry-run
    

    Instal diagram Helm

      helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE
    
  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. Dapatkan pod Cassandra dan periksa jumlah instance saat ini. Jika semua pod belum siap dan dalam status Running, tunggu hingga 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 petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Layanan Pelanggan Google Cloud.

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