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

  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 berada dalam status yang berbeda, hal itu dapat menjadi alasan masalah ini. Lakukan langkah-langkah berikut untuk mengatasi masalah ini:

Resolusi

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

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

  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 apigeectl CLI:
    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. 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.

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