Memecahkan masalah Apigee Hybrid yang macet saat membuat atau merilis status

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Tidak ada padanan Dokumentasi Apigee Edge untuk topik ini.

Dokumen ini menjelaskan cara mereset komponen hybrid Apigee saat terhenti di Status creating atau releasing.

Jalankan perintah berikut untuk menampilkan daftar komponen utama penginstalan hybrid Apigee:

kubectl get crd | grep apigee
apigeeorganization (apigeeorganizations.apigee.cloud.google.com)
apigeeenvironment (apigeeenvironments.apigee.cloud.google.com)
apigeedatastore (apigeedatastores.apigee.cloud.google.com)
apigeetelemetries (apigeetelemetries.apigee.cloud.google.com)
apigeeredis (apigeeredis.apigee.cloud.google.com)

Jalankan perintah berikut untuk menampilkan status saat ini:

kubectl get apigeedatastore -n NAMESPACE

Jika berfungsi sepenuhnya, masing-masing komponen ini akan berada dalam status running. Contoh:

NAME      STATE     AGE
default   running   5d6h

Jika penginstalan tidak berhasil, komponen mungkin terhenti dalam creating (atau releasing). Contoh:

NAME      STATE     AGE
default   creating   5d6h

Mengidentifikasi masalah

Untuk mengidentifikasi penyebab masalah, mulailah dengan menjelaskan setiap komponen. Komponennya adalah disusun sebagai berikut:

Setiap resource kustom ApigeeOrganization direpresentasikan oleh hierarki berikut:

ApigeeOrganization/HASHED_VALUE
├─ApigeeDeployment/apigee-connect-agent-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-connect-agent-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-connect-agent-HASHED_VALUE
│ ├─ReplicaSet/apigee-connect-agent-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-connect-agent-HASHED_VALUE-VER-xxxx
├─ApigeeDeployment/apigee-mart-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-mart-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-mart-HASHED_VALUE
│ ├─ReplicaSet/apigee-mart-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-mart-HASHED_VALUE-VER-xxxx
├─ApigeeDeployment/apigee-watcher-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-watcher-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-watcher-HASHED_VALUE
│ ├─ReplicaSet/apigee-watcher-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-watcher-HASHED_VALUE-VER-xxxx

Setiap resource kustom ApigeeEnvironment direpresentasikan oleh hierarki berikut:

ApigeeEnvironment/HASHED_VALUE
├─ApigeeDeployment/apigee-runtime-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-runtime-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-runtime-HASHED_VALUE
│ ├─ReplicaSet/apigee-runtime-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-runtime-HASHED_VALUE-VER-xxxx
├─ApigeeDeployment/apigee-synchronizer-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-synchronizer-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-synchronizer-HASHED_VALUE
│ ├─ReplicaSet/apigee-synchronizer-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-synchronizer-HASHED_VALUE-VER-xxxx
├─ApigeeDeployment/apigee-udca-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-udca-HASHED_VALUE-VER-xxxx
│ ├─PodDisruptionBudget/apigee-udca-HASHED_VALUE
│ ├─ReplicaSet/apigee-udca-HASHED_VALUE-VER-xxxx
│ │ └─Pod/apigee-udca-HASHED_VALUE-VER-xxxx

Mulailah identifikasi masalah dengan menjelaskan komponen root. Contoh:

kubectl describe apigeeorganization -n NAMESPACE COMPONENT_NAME

Periksa untuk melihat apakah State komponen adalah running:

      Replicas:
        Available:  1
        Ready:      1
        Total:      1
        Updated:    1
      State:        running
  State:            running
Events:             <none>

Jika tidak ada peristiwa yang dicatat pada level ini, ulangi proses dengan apigeedeployments diikuti dengan ReplicaSet. Contoh:

kubectl get apigeedeployment -n NAMESPACE AD_NAME>

Jika apigeedeployments dan ReplicaSet tidak menampilkan error apa pun, fokus pada pod yang belum siap:

kubectl get pods -n NAMESPACE
NAME                                                              READY   STATUS
apigee-cassandra-default-0                                        1/1     Running
apigee-connect-agent-apigee-b56a362-150rc2-42gax-dbrrn            1/1     Running
apigee-logger-apigee-telemetry-s48kb                              1/1     Running
apigee-mart-apigee-b56a362-150rc2-bcizm-7jv6w                     0/2     Running
apigee-runtime-apigee-test-0d59273-150rc2-a5mov-dfb29             0/1     Running

Dalam contoh ini, mart dan runtime belum siap. Memeriksa log pod untuk menentukan error:

kubectl logs -n NAMESPACE POD_NAME

Menghapus komponen

Jika Anda melakukan kesalahan dengan salah satu komponen ini, cukup hapus komponen dan terapkan apigeectl untuk komponen tersebut. Misalnya, untuk menghapus lingkungan:

kubectl delete -n apigee apigeeenv HASHED_ENV_NAME

Tindak lanjuti langkah ini dengan membuat lingkungan (setelah melakukan koreksi yang diperlukan):

apigeectl apply -f overrides.yaml –env=$ENV

Memeriksa pengontrol

Jika tidak ada pesan error yang jelas dalam pod, tetapi komponen belum ditransisikan ke Status running, periksa apigee-controller untuk melihat pesan error. Tujuan apigee-controller berjalan di namespace apigee-system.

kubectl logs -n apigee-system $(k get pods -n apigee-system | sed -n '2p' | awk '{print $1}') | grep -i error

Hal ini memungkinkan pengguna melihat mengapa pengontrol tidak dapat memproses permintaan. (dari create/delete/update, dll.).

Datastore Apigee

Apache Cassandra diimplementasikan sebagai StatefulSet. Setiap instance Cassandra berisi:

ApigeeDatastore/default
├─Certificate/apigee-cassandra-default
│ └─CertificateRequest/apigee-cassandra-default-wnd7s
├─Secret/config-cassandra-default
├─Service/apigee-cassandra-default
│ ├─EndpointSlice/apigee-cassandra-default-7m9kx
│ └─EndpointSlice/apigee-cassandra-default-gzqpr
└─StatefulSet/apigee-cassandra-default
  ├─ControllerRevision/apigee-cassandra-default-6976b77bd
  ├─ControllerRevision/apigee-cassandra-default-7fc76588cb
  └─Pod/apigee-cassandra-default-0
  

Contoh ini menunjukkan satu pod; namun, penginstalan produksi standar berisi tiga pod atau lebih.

Jika status untuk Cassandra adalah creating atau releasing, status HARUS {i>reset<i}. Masalah tertentu (seperti perubahan sandi Cassandra) dan masalah yang tidak terkait dengan jaringan mungkin mengharuskan Anda menghapus komponen. Sangat mungkin bahwa dalam kasus seperti itu, Anda tidak dapat menghapus instance (yaitu, kubectl delete apigeedatastore -n NAMESPACE default). Menggunakan --force atau --grace-period=0 juga tidak membantu.

Tujuan reset adalah untuk mengubah status komponen (apigeedatastore) dari creating atau releasing kembali ke running. Mengubah status dengan cara ini biasanya tidak akan menyelesaikan masalah masalah yang mendasarinya. Biasanya, komponen akan dihapus setelah direset.

  1. Coba hapus (tindakan ini tidak akan berhasil):

    kubectl delete -n NAMESPACE apigeedatastore default
    

    Biasanya perintah ini tidak selesai. Gunakan Ctrl+C dan hentikan panggilan.

  2. Reset status:

    Pada Jendela 1:

    kubectl proxy
    

    Pada Jendela 2:

    curl -X PATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'
    

    Hapus finalr (Window 2):

    kubectl edit -n NAMESPACE apigeedatastore default
    

    Cari dua baris berikut dan hapus:

    finalizers:
    - apigeedatastore.apigee.cloud.google.com
    

Skenario error umum

Konfigurasi proxy tidak tersedia dengan runtime

Error ini dapat muncul dalam salah satu dari dua cara berikut:

  • runtime tidak dalam status ready.
  • runtime belum menerima versi terbaru API.
  1. Mulai dengan pod synchronizer.

    Periksa log untuk synchronizer. Error umumnya adalah sebagai berikut:

    • Kurangnya konektivitas jaringan (ke *.googleapi.com)
    • Akses IAM salah (akun layanan tidak tersedia atau tidak disediakan oleh izin Pengelola Sinkronisasi)
    • setSyncAuthorization API tidak dipanggil
  2. Periksa pod runtime.

    Memeriksa log dari pod runtime akan menunjukkan alasan runtime tidak memuat konfigurasi. Bidang kontrol mencoba mencegah sebagian besar kesalahan konfigurasi, bahkan saat beralih ke bidang data. Jika suatu validasi tidak mungkin atau tidak diterapkan dengan benar, runtime akan gagal dimuat anotasi.

"Tidak ada pod runtime" di bidang kontrol

  1. Mulai dengan pod synchronizer.

    Periksa log untuk synchronizer. Error umumnya adalah sebagai berikut:

    • Kurangnya konektivitas jaringan (ke *.googleapi.com)
    • Akses IAM salah (akun layanan tidak tersedia atau tidak disediakan oleh izin Pengelola Sinkronisasi)
    • setSyncAuthorization API tidak dipanggil. Mungkin konfigurasi tidak pernah berhasil ke bidang data.
  2. Periksa pod runtime.

    Memeriksa log dari runtime pod akan menunjukkan alasan runtime tidak memuat konfigurasi Anda.

  3. Periksa pod watcher.

    Ini adalah komponen watcher yang mengonfigurasi traffic masuk (perutean) dan laporan status deployment proxy dan masuk ke bidang kontrol. Periksa log ini untuk mengetahui alasannya watcher tidak melaporkan statusnya. Alasan umumnya meliputi ketidakcocokan antara nama di file overrides.yaml dan bidang kontrol untuk dan/atau nama grup lingkungan.

Sesi debug tidak muncul di bidang kontrol

  1. Mulai dengan pod synchronizer.

    Periksa log untuk synchronizer. Error umumnya adalah sebagai berikut:

    • Kurangnya konektivitas jaringan (ke *.googleapi.com)
    • Akses IAM salah (akun layanan tidak tersedia atau tidak disediakan oleh izin Pengelola Sinkronisasi)
    • setSyncAuthorization API tidak dipanggil.
  2. Periksa pod runtime.
    Memeriksa log dari runtime pod akan menunjukkan alasan runtime tidak mengirim log debug ke UDCA.
  3. Periksa pod UDCA.
    Memeriksa log dari UDCA akan menunjukkan alasan UDCA tidak mengirim informasi sesi debug ke bidang kontrol.

Cassandra menampilkan respons cache yang besar

Pesan peringatan berikut menunjukkan bahwa Cassandra menerima permintaan baca atau tulis dengan payload yang lebih besar dan dapat diabaikan dengan aman karena batas peringatan ini disetel ke nilai yang lebih rendah untuk menunjukkan ukuran payload respons.

Batch for [cache_ahg_gap_prod_hybrid.cache_map_keys_descriptor, cache_ahg_gap_prod_hybrid.cache_map_entry] is of size 79.465KiB, exceeding specified threshold of 50.000KiB by 29.465KiB