Pratinjau administrasi dan penginstalan Apigee hybrid baru


Panduan Pengguna Pratinjau:
Pratinjau prosedur penginstalan dan administrasi baru untuk Apigee Hybrid v1.8.


Dalam dokumen ini:

Pratinjau


Dokumen ini ditujukan untuk persona operator Apigee (pengguna yang menginstal/mengelola/mengelola penginstalan hybrid Apigee). Pengalaman dalam menginstal Apigee Hybrid di salah satu platform Kubernetes yang didukung adalah prasyarat untuk mengikuti petunjuk dalam dokumen ini. Sebaiknya buat org evaluasi Apigee untuk mencoba langkah-langkah di bawah.

Respons

Harap kirimkan masukan mengenai proses ini ke Apigee-hybrid-install-preview@google.com.


Ringkasan

Pengalaman penginstalan hybrid Apigee yang baru menginstal komponen Apigee menggunakan kubectl serta mengintegrasikan penginstalan dan pengelolaan Apigee Hybrid dengan alat orkestrasi konfigurasi Kubernetes seperti Kustomize. Validasi dan visibilitas komponen yang diinstal lebih baik memberikan kemampuan debug yang lebih baik dan meningkatkan proses penginstalan secara keseluruhan.

Skrip penginstalan, apigee-hybrid-setup.sh, menyediakan alat yang mudah digunakan untuk penginstalan dasar. Anda dapat menggunakannya untuk membuat penginstalan campuran lalu mengubahnya agar sesuai dengan kebutuhan Anda dengan kubectl, atau Anda dapat membuat penginstalan campuran dari awal menggunakan kubectl. Semua properti konfigurasi hybrid Apigee disimpan dalam file yaml, satu untuk setiap komponen utama. Hal ini memungkinkan kontrol yang jauh lebih terperinci atas penginstalan hybrid di lingkungan Kubernetes Anda. Anda dapat menemukan file konfigurasi dan skrip penginstalan di repositori di GitHub.

Perubahan pada proses penginstalan baru

Apigee mengubah proses penginstalan Apigee Hybrid karena alasan berikut:

  • Metode baru penginstalan Apigee Hybrid dapat diintegrasikan dengan alat Kubernetes CI/CD yang sudah ada, seperti Argo, Flux, atau Anthos Config Management, yang tidak menggunakan file konfigurasi overrides.yaml.
  • Apigee Hybrid telah menyediakan apigeectl, alat pembuatan template kustom yang menghasilkan manifes Kubernetes (di antaranya) untuk menginstal dan mengelola Apigee Hybrid di cluster Kubernetes. Proses penginstalan dan pengelolaan baru ini memberikan pengalaman yang mirip dengan yang berasal dari vendor software lain.
  • Proses baru ini memungkinkan penginstalan dasar secara cepat dengan membuat akun layanan secara otomatis dengan izin yang diperlukan, sertifikat TLS, default yang terisi otomatis, dan elemen dasar lainnya yang diperlukan.

Prasyarat

Sebelum menggunakan penginstalan pratinjau ini, Anda harus memenuhi prasyarat berikut:

Versi pratinjau

Pratinjau ini ditujukan untuk berfungsi dengan Apigee Hybrid versi 1.8.x. Versi Apigee Hybrid yang lebih baru tidak didukung.

Penyiapan hybrid Apigee

Sebelum melanjutkan penginstalan Apigee Hybrid yang sebenarnya, Anda diharapkan telah menyelesaikan petunjuk berikut yang tercantum di bagian dokumentasi berikut:

  1. Penyiapan Project dan Org
  2. Penyiapan runtime hybrid

Alat

Selain itu, Anda harus mendownload dan mengonfigurasi alat berikut di workstation Anda:

  • curl
  • docker diperlukan untuk menjalankan skrip apigee-hybrid-setup.sh. Ikuti petunjuk di Get Docker untuk menginstal Docker.
  • envsubst harus tersedia di sebagian besar sistem berbasis Linux/UNIX. Untuk MacOS dan sistem lainnya, ikuti petunjuk di repo ini.
  • jq harus diinstal. Download jq.
  • kpt Download kpt.

  • kubectl versi 1.23 atau yang lebih baru. Baca artikel Menginstal Alat: kubectl dalam dokumentasi kubernetes.

Variabel umum yang digunakan dalam panduan ini

Panduan ini menggunakan variabel lingkungan berikut dalam beberapa langkah. Anda dapat menentukannya di command line atau dengan skrip, atau Anda dapat mengganti teks dalam perintah saat memasukkannya.

  • APIGEE_NAMESPACE: Namespace Apigee Anda. Secara default, nilainya adalah apigee. Namun, Anda dapat menggunakan namespace berbeda.
  • CLUSTER_NAME: Nama cluster tempat Anda menginstal Apigee Hybrid. Ini adalah cluster yang Anda buat pada Langkah 1: Buat Cluster
  • CLUSTER_LOCATION: Region cluster Anda. Prosedur dalam panduan ini mengasumsikan bahwa Anda menggunakan cluster regional. Jika Anda menggunakan cluster zona, lihat petunjuk di Langkah 1: Membuat Cluster
  • ENV_GROUP: Nama grup lingkungan untuk penginstalan hybrid Apigee. Ini adalah grup lingkungan yang Anda buat pada Langkah 3: Buat grup lingkungan. Anda dapat membuat beberapa grup lingkungan.
  • ENV_NAME: Nama grup lingkungan untuk penginstalan hybrid Apigee. Ini adalah grup lingkungan yang Anda buat pada Langkah 3: Buat grup lingkungan. Anda dapat membuat beberapa grup lingkungan.
  • INSTALL_DIR: Direktori tempat Anda menginstal Apigee Hybrid. Secara default, ini adalah subdirektori apigee-hybrid-install/ dari direktori tempat Anda mendownload penginstal, misalnya: /myhybrid/apigee-hybrid-install/. Ini adalah direktori utama untuk struktur file yang didokumentasikan dalam Struktur Folder Penyiapan Hybrid Apigee.
  • INSTANCE_DIR: Direktori untuk instance hybrid Apigee tertentu. Secara default, instance pertama diberi nama instance-1. Dir instance adalah subdirektori dari ${INSTALL_DIR}/overlays/instances/. Anda dapat menentukan nama apa pun untuk instance hybrid Anda. Lihat Penginstalan Multi-Instance.
  • ORG_NAME: Nama organisasi hybrid Apigee Anda. ID ini harus sama dengan ID project Google Cloud Anda. Lihat: Langkah 2: Buat organisasi.

Penginstalan hybrid Apigee dasar

Untuk menginstal Apigee Hybrid dengan cepat tanpa penyesuaian berat, Anda dapat menggunakan prosedur dua langkah berikut.


  • Lingkungan tunggal
  • Satu grup lingkungan
  • Satu akun layanan Google Cloud dibuat dan digunakan untuk semua komponen individual
  • Nilai default untuk semua kunci enkripsi dan sandi.

  1. Mendownload file penyiapan
  2. Menjalankan penyiapan

Download file penyiapan

Download dan siapkan file penyiapan dengan meng-clone repositori GitHub di https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1:

  1. Meng-cloning repository

    git clone https://github.com/apigee/apigee-hybrid-install.git
    
  2. Buka direktori untuk repositori yang di-clone:

    cd apigee-hybrid-install
    
  3. Buat cabang dari tag pratinjau-1:

    git branch preview-1 preview-1
    git checkout preview-1
    
  4. Jadikan skrip penyiapan dapat dieksekusi:

    chmod +x ./tools/apigee-hybrid-setup.sh
    

    Repositori yang di-clone akan memiliki struktur yang menyerupai struktur yang dijelaskan dalam Struktur Folder Penyiapan Hybrid Apigee:

Jalankan penyiapan

Jalankan skrip shell apigee-hybrid-setup.sh yang berada di dalam folder tools/.

./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION --org $ORG_NAME --setup-all

Jika Anda mengalami error, coba jalankan skrip untuk kedua kalinya.


Opsi tambahan yang dapat Anda gunakan adalah:

  • --env $ENV_NAME menentukan nama lingkungan Apigee.
  • --envgroup $ENV_GROUP menentukan grup lingkungan.
  • --ingress-domain $HOSTNAME menentukan nama host yang Anda berikan untuk grup lingkungan.
  • --gcp-project-id $PROJECT_ID menentukan ID project Google Cloud Anda.

Untuk opsi lainnya, lihat Memahami skrip.

Error apa pun selama eksekusi akan dicetak ke output standar.

Setelah skrip berhasil diselesaikan, Anda akan menyelesaikan penginstalan hybrid dasar. Anda dapat menguji penginstalan dengan membuat proxy contoh seperti yang dijelaskan dalam Membuat dan men-deploy proxy API baru.

Penginstalan Apigee Hybrid yang disesuaikan

Bagi pengguna yang lebih mahir dan ingin kontrol penginstalan yang lebih mendetail, Anda dapat mengikuti urutan langkah berikut (untuk sebagian besar langkah yang diberikan di bawah, Anda dapat memilih untuk menjalankan langkah tersebut secara manual, atau menggunakan skrip shell untuk mengotomatiskan setiap langkah tersebut):



Download file penyiapan

Mendownload dan menyiapkan file penyiapan:

  1. Clone repositori GitHub di https://github.com/apigee/apigee-hybrid-install/

    Repositori yang di-clone akan memiliki struktur yang menyerupai struktur yang dijelaskan dalam Struktur Folder Penyiapan Hybrid Apigee:

  2. cd ke direktori apigee-hybrid-install/

  3. Jadikan skrip penyiapan dapat dieksekusi:

    chmod +x ./tools/apigee-hybrid-setup.sh
    

Buat namespace

Buat namespace kubernetes di cluster Anda yang akan berisi semua komponen cluster Apigee.

kubectl create namespace apigee


Jika memilih nama lain untuk namespace, Anda dapat mengikuti salah satu dari tiga opsi di bawah ini:

  • (Direkomendasikan) Gunakan --namespace={YOUR_NAMESPACE_NAME} saat mengisi nilai terlebih dahulu dalam Edit yaml resource.
  • Jalankan dua perintah berikut:

    1. Gunakan kpt untuk menentukan namespace Apigee:

      kpt fn eval "${INSTALL_DIR}/overlays/" \
        --image gcr.io/kpt-fn/apply-setters:v0.2.0 -- \
        APIGEE_NAMESPACE="${APIGEE_NAMESPACE}"
      # This is for replacing the namespace in istio discoveryAddress which cannot be
      # achieved with kpt
      
    2. Gunakan sed untuk mengganti namespace di istio discoveryAddress:

      sed -i -E -e "s/(discoveryAddress: apigee-ingressgateway-manager\.).*(\.svc:15012)/\1${APIGEE_NAMESPACE}\2/" "${INSTALL_DIR}/overlays/controllers/istiod/apigee-istio-mesh-config.yaml"
      
  • Sebagai alternatif, Anda dapat secara manual mengubah masing-masing resource yang akan dibuat dalam namespace pilihan Anda.

Menggunakan image Docker dari repositori pribadi (opsional)

Anda dapat memilih untuk tidak menggunakan image yang dihosting secara publik, dan dapat menggunakan image dari repositori pribadi Anda:

  1. Langkah pertama adalah mengirim semua gambar ke repo pribadi Anda, yang dapat dilakukan dengan mengikuti langkah-langkah di apigee-pull-push | Apigee X. Secara default, gambar diberi tag dengan versi Apigee Hybrid yang sesuai, dan sebaiknya Anda tidak mengedit tag tersebut. Sebaiknya Anda juga tidak mengedit nama gambar sehingga jalur gambar akhir dapat dibuat seperti yang dijelaskan di Hub Gambar.
  2. Tetapkan nilai kolom imageHub yang ada di dalam file apigee-hybrid-config.yaml ke jalur host repo pribadi. (Lihat Image Hub untuk mengetahui detailnya).

    imageHub: "your.private.repo/apigee/hybrid"
    

Tindakan ini akan memastikan bahwa semua komponen hybrid Apigee menggunakan image dari repo pribadi Anda.

Selain itu, sebaiknya gunakan image pribadi untuk controller dan gateway ingress Apigee, sehingga Anda harus mengedit file apigee-controller-deployment.yaml dan apigee-ingressgateway-manager-deployment.yaml, lalu mengganti semua kolom image dengan image dari repo pribadinya.



Mengonfigurasi imagePullSecrets (opsional)

  1. Buat rahasia kubernetes yang berisi kredensial untuk melakukan autentikasi dengan repositori pribadi. Lihat Mengambil Image dari Private Registry untuk memahami cara secret harus dibuat.
  2. Setelah secret dibuat, yang perlu dilakukan adalah merujuk ke secret tersebut, yang dapat dilakukan dengan mengedit file apigee-hybrid-config.yaml dan menyetel nilai kolom imagePullSecret ke nama secret yang dibuat sebelumnya, dan mengaktifkan komponen imagePullSecret dalam file kustomization.yaml yang sesuai.

Jika Anda menentukan imagePullSecrets di kedua tempat tersebut, tempat yang ada di dalam file apigee-controller-manager.yaml akan diprioritaskan.


Mengonfigurasi proxy penerusan (opsional)

Proxy penerusan dapat dikonfigurasi dengan menambahkan kolom forwardProxy ke file apigee-hybrid-config.yaml. Contoh:

  forwardProxy: |
    scheme: HTTP
    host: 10.12.0.47
    port: 3128

Menentukan sertifikat TLS masuk

Menggunakan skrip

./tools/apigee-hybrid-setup.sh --create-ingress-tls-certs

Baca - Memahami skrip untuk mengetahui detail selengkapnya tentang tanda ini.

Manual

Anda diharapkan untuk memberikan sertifikat TLS yang akan digunakan untuk gateway masuk istio. Anda dapat:

Di sini kita akan menggunakan sertifikat yang ditandatangani sendiri sebagai contoh. Sertifikat yang ditandatangani sendiri dapat dibuat menggunakan (dengan asumsi DOMAIN telah ditetapkan dengan benar dan harus cocok dengan nama host yang disetel di envgroup Anda):

openssl req -nodes -new -x509 -keyout ./tls.key -out ./tls.crt -subj '/CN='$DOMAIN'' -days 3650

Tindakan ini akan membuat dua file bernama tls.key dan tls.crt.

Kemudian, Anda perlu membuat secret dengan format berikut. Anda dapat menggunakan kubectl create atau kubectl apply seperti yang dijelaskan dalam Menggunakan pasangan kunci/sertifikat kustom untuk otoritas penandatanganan sertifikat (opsional):

apiVersion: v1
kind: Secret
metadata:
  name: "{ORG_NAME}-{ENV_GROUP_NAME}"
  namespace: {$APIGEE_NAMESPACE}
type: Opaque
data:
  cert: |
    {BASE64_ENCODED_TLS_CRT}
  key: |
    {BASE64_ENCODED_TLS_KEY}

---

Contoh pembuatan rahasia menggunakan kubectl create:

kubectl create secret tls {ORG_NAME}-{ENV_GROUP_NAME} \
  --cert="tls.crt" \
  --key="tls.key" \
  -n {$APIGEE_NAMESPACE}


Mengupdate deployment ingress

Untuk membuat/mengubah deployment ingress - Anda harus mengubah kolom spec.components.ingressGateways di Resource Kustom ApigeeOrganization di bases/initialization/crds/customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml.

Secara default, kami membuat satu deployment ingress dengan parameter default(nilai default akan ditampilkan di dokumen referensi CR ):

ingressGateways:
- name: "prod-1"

Contoh:

A. Mengganti kolom layanan masuk

ingressGateways:
- name: "prod-1"
  serviceSpec:
    annotations:
      {KEY}: ${VALUE}
    loadBalancerIP: ${IP}

B. Ubah Min/Maks replika

ingressGateways:
- name: "prod-1"
  ​​autoScaler:
    minReplicas: 4
    maxReplicas: 10

C. Menambahkan Deployment Ingress baru

ingressGateways:
- name: "prod-1"
- name: "prod-2"

Mengonfigurasi akun layanan Google Cloud kustom



Menggunakan skrip

./tools/apigee-hybrid-setup.sh --create-gcp-sa-and-secrets  --namespace APIGEE_NAMESPACE

Dengan APIGEE_NAMESPACE adalah namespace kustom Anda. Namespace default adalah apigee.

Lihat Memahami skrip untuk detail selengkapnya tentang tanda.

Manual

Kunci akun layanan Google Cloud perlu disimpan sebagai secret dalam cluster. yaml rahasia harus memiliki struktur berikut:

apiVersion: v1
kind: Secret
metadata:
  name: "{NAME}"
  namespace: {APIGEE_NAMESPACE}
type: Opaque
data:
  client_secret.json: |
    {BASE64_ENCODED_SA_KEY}

Untuk mengetahui detail selengkapnya tentang semua akun layanan yang diperlukan dan nama rahasianya, lihat bagian Akun layanan Google Cloud.

Anda bebas memilih nama secret yang berbeda, tetapi Anda harus membuat perubahan yang sesuai dalam komponen tempat nama secret itu digunakan. Misalnya, jika memutuskan untuk mengubah nama rahasia akun layanan runtime dari apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME} menjadi my-runtime-svc, Anda harus membuat perubahan yang sesuai di apigee-environment.yaml untuk lingkungan tersebut



Menggunakan identitas beban kerja


Salah satu dari Mengonfigurasi akun layanan Google Cloud kustom atau Menggunakan identitas workload bersifat wajib.


Prasyarat

Sebelum menggunakan identitas beban kerja, pastikan cluster GKE Anda telah mengaktifkan dukungan tersebut. Lihat Memperbarui Kumpulan Node | Apigee X untuk mengetahui detailnya.

Mengaktifkan workload-identity

Lihat bagian Identitas beban kerja di bagian Kustomize dan Komponen untuk mengetahui detail tentang cara mengaktifkan identitas beban kerja sebelum penginstalan.

Mengedit yaml resource

Beberapa tempat di yaml komponen memerlukan nama grup organisasi, lingkungan, dan lingkungan yang benar. Anda dapat menetapkan nilai ini secara manual, atau menggunakan skrip shell untuk mengisi nilai ini secara otomatis.

Menggunakan skrip

./tools/apigee-hybrid-setup.sh --fill-values

Membuat resource inisialisasi dan pengontrol

#Additional steps for openshift
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/openshift
//apigee datastore
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/components/openshift-scc/scc.yaml
//telemetry
kubectl apply -f ${INSTANCE_DIR}/overlays/instances/${INSTANCE_DIR}/telemetry/components/openshift-scc/scc.yaml

#Create Apigee initialization kubernetes resources
kubectl apply -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/certificates
kubectl apply --server-side --force-conflicts -k ${INSTALL_DIR}/overlays/initialization/crds
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/webhooks
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/rbac
kubectl apply -k ${INSTALL_DIR}/overlays/initialization/ingress

# Create controller config and controller
kubectl apply -k ${INSTALL_DIR}/overlays/controllers

# Wait for the controllers to be available
kubectl wait deployment/apigee-controller-manager deployment/apigee-ingressgateway-manager -n "${APIGEE_NAMESPACE}" --for=condition=available --timeout=2m

# Create the datastore and redis secrets first and then the rest of the secrets.
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/redis/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/${ENV_NAME}/secrets.yaml
kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/organization/secrets.yaml

Memberikan izin ke akun layanan Synchronizer untuk berinteraksi dengan Control Plane

Ikuti langkah-langkah di Langkah 8: Aktifkan akses Synchronizer, ganti nama akun layanan, baik apigee-non-prod maupun apigee-synchronizer, dengan apigee-all-sa, nama akun layanan yang dibuat oleh proses penginstalan baru.


★ Penting: Pastikan untuk mengubah nama akun layanan dalam petunjuk di bagian Aktifkan akses sinkronisasi. Jika tidak, pengaktifan akses untuk sinkronisasi akan gagal.


Membuat komponen bidang data Apigee

Jika Anda telah mengubah nama salah satu sumber daya pada langkah sebelumnya, Anda harus membuat perubahan yang sesuai pada file YAML yang lain tempat sumber daya tersebut direferensikan. Setelah selesai, gunakan perintah dalam contoh berikut:

# Create the rest of the resources.
kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

untuk menginstal semua komponen.

Menunggu resource dimulai

kubectl wait "apigeedatastore/default" \
"apigeeredis/default" \
"apigeeenvironment/${ORG_NAME}-${ENV_NAME}" \
"apigeeorganization/${ORG_NAME}" \
"apigeetelemetry/apigee-telemetry" \
-n "${APIGEE_NAMESPACE}" --for="jsonpath=.status.state=running" --timeout=15m

Menyesuaikan penginstalan untuk pengelola sertifikat di namespace kustom

Sesuaikan namespace tempat pengelola sertifikat dijalankan dengan prosedur berikut.

Jika pengelola sertifikat diinstal di cluster Anda dalam namespace selain pengelola sertifikat, Anda harus mengupdate namespace yang digunakan untuk membuat root certificate Apigee.

  1. Edit file adjustment.yaml untuk pembuatan sertifikat: $INSTALL_DIR/overlays/initialization/certificates/kustomize.yaml
  2. Tambahkan kode berikut ke bagian akhir file.

    - patch: |-
    - op: replace
      path: /metadata/namespace
      value: "gk-cert-manager"
    target:
    group: cert-manager.io
    version: v1
    kind: Certificate
    name: apigee-root-certificate
    
  3. Simpan filenya

Kustomize dan Komponen

Ringkasan

Penginstalan Hybrid baru mewarisi ideologi Kustomize dalam menyusun struktur yaml dalam bentuk Dasar dan Overlay

  • Basis adalah file yang disediakan oleh Apigee, yang mungkin berubah di antara setiap rilis Hybrid baru. Anda tidak diharapkan untuk mengubah file ini. File ini menyimpan beberapa nilai default yang disediakan oleh Apigee. Semua file pada folder bases/ tingkat teratas berisi Basis ini
  • Overlay menyimpan konfigurasi pengguna dan berfungsi sebagai sarana yang dapat Anda gunakan untuk mengubah nilai default yang ditentukan dalam Basis. Semua file pada folder overlays/ tingkat teratas berisi Overlay ini



Cara menggunakan Komponen

Subfolder dalam direktori overlays/ tingkat teratas telah disusun sedemikian rupa sehingga Anda dapat mengaktifkan (atau menonaktifkan) fitur tambahan tertentu dengan memberi komentar (atau menghapus tanda komentar) baris tertentu dalam file kustomization.yaml.

Misalnya, seperti inilah struktur folder overlays/instances/{INSTANCE_NAME}/telemetry akan terlihat:

telemetry
├── components
│   ├── http-proxy
│   ├── imagepullsecret
│   ├── logger
│   ├── metrics
│   ├── nodeselector
│   ├── openshift-scc
│   ├── workload-identity-logger
│   └── workload-identity-metrics
├── apigee-telemetry.yaml
└── kustomization.yaml

Berikut ini tampilan file telemetry/kustomization.yaml secara default:

resources:
- apigee-telemetry.yaml

components:
- ./components/metrics
# - ./components/workload-identity-metrics
# - ./components/logger
# - ./components/workload-identity-logger
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/openshift-scc

Kita dapat melihat bahwa ./components/logger telah dijadikan komentar, yang berarti kita belum mengaktifkan uGoogle Clod logger secara default. Agar dapat mengaktifkannya, Anda cukup menghapus tanda komentar pada baris tersebut:

components:

- ./components/logger

Demikian pula, untuk menonaktifkan metrik, Anda dapat menjadikan baris ./components/metrics sebagai komentar:

...
components:
...
# - ./components/metrics
…

Bagian berikut akan membahas berbagai komponen tersebut, kapan dapat digunakan, dan bagaimana komponen tersebut dapat dikonfigurasi.

OpenShift

Untuk pengguna yang ingin menginstal Apigee Hybrid di cluster OpenShift, Anda mungkin perlu mengaktifkan beberapa komponen/resource sebelum melakukan penginstalan. (Tindakan ini diperlukan jika Anda tidak menggunakan skrip untuk melakukan penginstalan). File yang perlu diubah adalah:

  • overlays/initialization/openshift/kustomization.yaml . Di bagian resources:, hapus tanda komentar:

    # - ../../../bases/initialization/openshift/
    
  • overlays/instances/{INSTANCE_NAME}/datastore/kustomization.yaml Hapus tanda komentar:

    # - ./components/openshift-scc
    

    dan hapus tanda komentar pada kolom "components:" jika masih dikomentari.

  • overlays/instances/{INSTANCE_NAME}/telemetry/kustomization.yaml Hapus tanda komentar:

    # - ./components/openshift-scc
    

    dan hapus tanda komentar pada kolom "components:" jika masih dikomentari.

Kemudian, Anda dapat melanjutkan ke langkah penginstalan.

imagepullsecret

Komponen ini dapat diaktifkan jika Anda memiliki image yang disimpan di repositori pribadi. Untuk mengambil image dari repositori pribadi, Anda dapat membuat secret kubernetes yang akan berisi detail autentikasi Anda dan kemudian dapat merujuk rahasia ini di dalamnya. Lihat Mengonfigurasi imagePullSecrets (opsional) untuk mendapatkan petunjuk. Lihat Mengambil Image dari Private Registry | Kubernetes dalam dokumentasi Kubernetes untuk mengetahui informasi selengkapnya.

Tersedia dalam:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Mengaktifkan:

Hapus tanda komentar pada baris "./components/imagepullsecret/" di masing-masing file kustomization.yaml di mana pun diperlukan.

Perubahan yang akan dilakukan:

  • component/imagepullsecret/patch.yaml
    • WAJIB Tambahkan nama rahasia yang relevan ke daftar di spec.template.spec.imagePullSecrets

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

nodeselector

Dengan komponen ini, Anda dapat menjadwalkan pod untuk resource Apigee pada node tertentu. Lihat Menetapkan Pod ke Node | Kubernetes untuk informasi selengkapnya.

Tersedia dalam:

  • overlays/controllers/apigee-controller
  • overlays/controllers/istiod
  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Mengaktifkan:

Hapus tanda komentar pada baris "./components/nodeselector" di masing-masing file kustomization.yaml di mana pun diperlukan.

Perubahan yang akan dilakukan:

  • component/nodeselector/patch.yaml
    • OPSIONAL Ubah nilai label pemilih node dari apigee-runtime atau apigee-data ke nilai yang diinginkan.

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

identitas-beban kerja

Berbagai container dalam ekosistem Apigee Hybrid memerlukan izin untuk melakukan panggilan API tertentu ke Apigee Control Plane / Management Plane. Workload Identity adalah salah satu pemberian izin kepada pod (dan container di dalamnya). Referensi berguna untuk membaca hal ini lebih lanjut, antara lain: - Memperkenalkan Workload Identity: Autentikasi yang lebih baik untuk aplikasi GKE Anda | Blog Google Cloud - Menggunakan Workload Identity | Dokumentasi Kubernetes Engine | Google Cloud

Tersedia dalam:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/redis
  • overlays/instances/{INSTANCE_NAME}/telemetry

Prasyarat:

Sebelum dapat menggunakan Workload Identity, Anda harus memberikan izin yang relevan dalam project Google Cloud Anda menggunakan:

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${ORG_NAME}.svc.id.goog[${APIGEE_NAMESPACE}/${KSA_NAME}]" \
        ${GSA_NAME}@${ORG_NAME}.iam.gserviceaccount.com

dengan: - ${ORG_NAME} - Nama Organisasi Apigee Anda. - ${APIGEE_NAMESPACE} - Namespace kubernetes tempat komponen Apigee diinstal. Nama ini biasanya adalah apigee, kecuali jika diubah secara eksplisit oleh pengguna selama penginstalan - ${KSA_NAME} - Nama namespace kubernetes. Anda harus menjalankan perintah ini untuk setiap akun layanan kubernetes yang disebutkan dalam akun layanan Kubernetes - ${GSA_NAME} - Nama akun layanan Google Cloud. Jika Anda belum membuat perubahan selama penginstalan, ini akan memiliki nilai apigee-all-sa. Jika menyiapkan beberapa akun layanan Google Cloud untuk masing-masing komponen, Anda harus mencocokkan KSA_NAME dengan GSA_NAME yang sesuai. Anda dapat membandingkan tabel di akun layanan Google Cloud dengan akun layanan Kubernetes untuk menemukan padanannya.

Mengaktifkan:

Hapus tanda komentar pada baris ./components/workload-identity di masing-masing file kustomization.yaml di mana pun diperlukan. Perlu diperhatikan bahwa dalam telemetri, kita memiliki add-on identitas workload terpisah untuk komponen metrics dan logger yang dapat diaktifkan satu per satu.

Penggunaan:

  1. Jika belum menginstal hybrid, Anda cukup mengaktifkan workload-identity seperti yang disebutkan di bagian sebelumnya dan melanjutkan penginstalan yang kemudian akan menggunakan workload-identity secara otomatis.
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-proxy

Anda dapat mengonfigurasi server proxy di setiap komponen berikut sehingga traffic untuk komponen tersebut melewati proxy http yang dikonfigurasi untuk komponen tersebut. Anda dapat mengonfigurasi proxy untuk setiap komponen Apigee satu per satu.

Tersedia dalam:

  • overlays/instances/{INSTANCE_NAME}/datastore
  • overlays/instances/{INSTANCE_NAME}/environments/{ENV_NAME}
  • overlays/instances/{INSTANCE_NAME}/organization
  • overlays/instances/{INSTANCE_NAME}/telemetry

Mengaktifkan:

Hapus tanda komentar pada baris "./components/http-proxy/" di masing-masing file kustomization.yaml di mana pun diperlukan.

Perubahan yang akan dilakukan:

  • component/http-proxy/patch.yaml Parameter berikut dapat dikonfigurasi di spec.httpForwardProxy
    • scheme: WAJIB Salah satu dari HTTP atau HTTPS
    • host: WAJIB Alamat Host proxy Anda
    • port: WAJIB Nomor port
    • username: OPSIONAL Nama pengguna yang terkait dengan proxy Anda
    • password: OPSIONAL Sandi untuk mengakses proxy

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

pencatat log dan metrik

Anda dapat mengaktifkan atau menonaktifkan logger atau metrik satu per satu dalam overlay/instances/{INSTANCE_NAME}/telemetri. Secara default, logger dinonaktifkan dan metrik diaktifkan. Mengaktifkan atau menonaktifkannya cukup dengan menghapus komentar atau mengomentari barisnya dalam telemetri/pelacakanization.yaml

gcs-backup dan gcs-restore

Komponen kustomisasi ini dapat digunakan untuk melakukan pencadangan dan pemulihan database cassandra ke Google Cloud Storage.

Tersedia dalam:

  • overlays/instances/{INSTANCE_NAME}/datastore

Prasyarat:

  1. Download kunci akun layanan Google Cloud untuk akun yang memiliki peran Storage Object Admin.

    • Jika menggunakan skrip untuk melakukan penginstalan dan tidak menggunakan identitas workload, Anda dapat menggunakan kembali kunci download yang tersedia di folder akun layanan yang dibuat oleh skrip.
    • Anda juga dapat menggunakan skrip create-service-account.sh untuk membuat akun layanan baru dan mendownload kuncinya:

      ./tools/create-service-accounts=.sh --env prod --profile apigee‑cassandra
      
  2. Setelah kunci didownload, Anda perlu membuat secret kubernetes dengan nama apigee-cassandra-backup-and-restore-gcp-sa-key yang dapat dilakukan menggunakan perintah:

    kubectl create secret generic "apigee-cassandra-backup-and-restore-gcp-sa-key" \
              --from-file="dbbackup_key.json=${PATH_TO_SA_KEY}" \
              -n "${APIGEE_NAMESPACE}"
    

    Dengan keterangan:

    • ${PATH_TO_SA_KEY} - Jalur ke file yang berisi kunci akun layanan.
    • ${APIGEE_NAMESPACE} - Namespace kubernetes tempat komponen Apigee diinstal. Ini biasanya berupa apigee kecuali jika, diubah secara eksplisit selama penginstalan

Atau, Anda dapat menggunakan file template templates/secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml untuk membuat rahasia ini.

Mengaktifkan:

  • Jika ingin mengaktifkan pencadangan, hapus tanda komentar pada baris "./components/gcs-backup" di file datastore kustomization.yaml.
  • Jika Anda ingin memulihkan cadangan, hapus tanda komentar pada baris "./components/gcs-restore" di file datastore kustomization.yaml.

Modifikasi hanya untuk pencadangan

  • components/gcs-backup/apigee-datastore-patch.yaml
    • Wajib Ubah nilai variabel lingkungan DATABASE_STORAGE_BUCKET yang akan berbentuk gs://BUCKET_NAME dan mengarah ke bucket Google Cloud Storage tempat data perlu dicadangkan. Deskripsi cocok dengan dbStorageBucket yang dijelaskan di sini.
  • component/gcs-backup/cron-patch.yaml
    • WAJIB Ubah spec.schedule untuk menentukan frekuensi pencadangan. Kolom menerima format jadwal Crontab standar. Deskripsi cocok dengan jadwal yang dijelaskan di sini.
    • Wajib Ubah nilai variabel lingkungan DATABASE_STORAGE_BUCKET yang akan berbentuk gs://BUCKET_NAME dan mengarah ke bucket Google Cloud Storage tempat data perlu dicadangkan. Deskripsi cocok dengan dbStorageBucket yang dijelaskan di sini.
    • OPSIONAL Ubah nilai HTTP_PROXY_URL agar mengarah ke proxy yang dikonfigurasi. Formatnya dapat berupa berikut:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS>:${HOST_PORT}

Melakukan Pencadangan

Anda dapat melakukan pencadangan dengan perintah berikut:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

Untuk menerapkan perubahan dan mengaktifkan pencadangan:

Perubahan hanya untuk pemulihan

  • components/gcs-restore/apigee-datastore-patch.yaml
    • Wajib Ubah nilai variabel lingkungan DATABASE_STORAGE_BUCKET yang akan berbentuk gs://BUCKET_NAME dan mengarah ke bucket Google Cloud Storage tempat data perlu dicadangkan. Deskripsi cocok dengan dbStorageBucket yang dijelaskan di sini.
  • component/gcs-restore/job-patch.yaml
    • Wajib Ubah nilai variabel lingkungan DATABASE_STORAGE_BUCKET yang akan berbentuk gs://BUCKET_NAME dan mengarah ke bucket Google Cloud Storage tempat data perlu dicadangkan.
    • Wajib Ubah nilai variabel lingkungan BACKUP_SNAPSHOT_TIMESTAMP. Deskripsi cocok memulihkan:snapshotTimestamp dijelaskan di sini.
    • OPSIONAL Ubah nilai HTTP_PROXY_URL agar mengarah ke proxy yang dikonfigurasi. Formatnya dapat berupa berikut:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Melakukan pemulihan:

Untuk mengetahui informasi latar belakang tentang cara memulihkan cadangan, lihat Memulihkan cadangan | Apigee X | Google Cloud

  1. Membuat cluster Kubernetes baru dengan namespace baru untuk memulihkan deployment runtime hybrid. Anda tidak dapat menggunakan cluster dan namespace yang sama dengan yang digunakan untuk penginstalan hybrid asli.
  2. Selain setelan lain yang Anda inginkan, instal Hybrid ke dalam cluster baru dengan setelan yang telah dikonfigurasi di atas:

    • Anda dapat menggunakan Penginstalan dasar dan penginstalan hybrid di namespace baru:
    ./tools/apigee-hybrid-setup.sh \
    --cluster-name $CLUSTER_NAME \
    --cluster-region $CLUSTER_LOCATION \
    --namespace ${NEW_APIGEE_NAMESPACE}
    
  3. Setelah pemulihan selesai, semua resource di namespace lama dapat dihapus dan dialihkan ke namespace baru.

Untuk informasi selengkapnya, lihat Memulihkan cadangan.

cadangan non-gcs dan pemulihan non-gcs

Komponen kustomisasi ini dapat digunakan untuk melakukan pencadangan dan pemulihan database cassandra ke Google Cloud Storage.

Tersedia dalam:

  • overlays/instances/{INSTANCE_NAME}/datastore

Prasyarat:

  1. Langkah-langkah dari dokumentasi yang sudah ada untuk Menyiapkan server dan SSH dapat digunakan.
  2. Dari langkah-langkah di atas, Anda harus menggunakan kunci pribadi SSH yang tersedia dalam file "ssh_key" yang dihasilkan dengan mengikuti langkah-langkah sebelumnya. Kemudian, kita akan membuat secret kubernetes dengan nama apigee-cassandra-backup-and-restore-gcp-sa-key yang berisi kunci Pribadi SSH ini.



    Rahasia kubernetes dapat dibuat menggunakan perintah berikut:

    kubectl create secret generic "apigee-cassandra-backup-and-restore-key-file" \
            --from-file="key=${PATH_TO_SSH_PRIVATE_KEY}" \
            -n "${APIGEE_NAMESPACE}"
    

    Dengan keterangan:

    • ${PATH_TO_SSH_PRIVATE_KEY} - Jalur ke file yang berisi kunci pribadi SSH
    • ${APIGEE_NAMESPACE} - Namespace kubernetes tempat komponen Apigee diinstal. Ini biasanya berupa apigee kecuali jika, diubah secara eksplisit selama penginstalan

    Atau, Anda dapat menggunakan template file templates/secret-apigee-cassandra-backup-and-restore-key-file.yaml untuk membuat rahasia ini.

Mengaktifkan:

  • Jika ingin mengaktifkan pencadangan, hapus tanda komentar pada baris "./components/non-gcs-backup" di file datastore kustomization.yaml.
  • Jika Anda ingin memulihkan cadangan, hapus tanda komentar pada baris "./components/non-gcs-restore" di file datastore kustomization.yaml.

Modifikasi hanya untuk pencadangan

  • components/non-gcs-backup/apigee-datastore-patch.yaml
    • WAJIB Ubah nilai BACKUP_SERVER_IP. Deskripsi cocok dengan BACKUP_SERVER_IP yang dijelaskan di sini.
    • PERLU Ubah nilai BACKUP_STORAGE_DIR. Deskripsi cocok dengan BACKUP_STORAGE_DIR yang dijelaskan di sini.
  • components/non-gcs-backup/cron-patch.yaml
    • WAJIB Ubah spec.schedule untuk menentukan frekuensi pencadangan. Kolom menerima format jadwal Crontab standar. Deskripsi cocok dengan jadwal yang dijelaskan di sini.
    • WAJIB Ubah nilai BACKUP_SERVER_IP. Deskripsi cocok dengan BACKUP_SERVER_IP yang dijelaskan di sini.
    • PERLU Ubah nilai BACKUP_STORAGE_DIR. Deskripsi cocok dengan BACKUP_STORAGE_DIR yang dijelaskan di sini.
    • OPSIONAL Ubah nilai HTTP_PROXY_URL agar mengarah ke proxy yang dikonfigurasi. Formatnya dapat berupa berikut:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Melakukan Pencadangan

Anda dapat melakukan pencadangan dengan perintah berikut:

kubectl apply -k overlays/instances/{INSTANCE_NAME}

Untuk menerapkan perubahan dan mengaktifkan pencadangan:

Modifikasi hanya untuk pencadangan

  • components/non-gcs-restore/apigee-datastore-patch.yaml
  • components/non-gcs-restore/job-patch.yaml
    • WAJIB Ubah nilai variabel lingkungan BACKUP_SNAPSHOT_TIMESTAMP. Deskripsi cocok dengan restore:snapshotTimestamp yang dijelaskan di sini.
    • WAJIB Ubah nilai BACKUP_SERVER_IP. Deskripsi cocok dengan BACKUP_SERVER_IP yang dijelaskan di sini.
    • WAJIB Ubah nilai BACKUP_STORAGE_DIR. Deskripsi cocok dengan BACKUP_STORAGE_DIR yang dijelaskan di sini.
    • OPSIONAL Ubah nilai HTTP_PROXY_URL agar mengarah ke proxy yang dikonfigurasi. Formatnya dapat berupa berikut:
      • http://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • https://${USERNAME}:${PASSOWORD}@${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}
      • http://${HOST_IP_ADDRESS}:${HOST_PORT}

Melakukan pemulihan:

Untuk ringkasan tentang pemulihan cadangan, lihat Ringkasan pemulihan Cassandra.

  1. Membuat cluster Kubernetes baru dengan namespace baru untuk memulihkan deployment runtime hybrid. Anda tidak dapat menggunakan cluster dan namespace yang sama dengan yang digunakan untuk penginstalan hybrid asli.
  2. Selain setelan lain yang Anda inginkan, instal Hybrid ke dalam cluster baru dengan setelan yang telah dikonfigurasi di atas: Anda dapat menggunakan penginstalan Dasar dan instal hybrid di namespace baru:

    ./tools/apigee-hybrid-setup.sh \
      --cluster-name $CLUSTER_NAME \
      --cluster-region $CLUSTER_LOCATION \
      --namespace ${NEW_APIGEE_NAMESPACE}
    

    Atau, ikuti Penginstalan Hybrid Apigee yang Disesuaikan untuk mengonfigurasi berbagai hal sesuai pilihan Anda.

  3. Setelah pemulihan selesai, semua resource di namespace lama dapat dihapus dan dialihkan ke namespace baru.

    Untuk informasi selengkapnya, lihat Menjadwalkan pencadangan di server jarak jauh.

http-client

Untuk mengetahui petunjuknya, lihat Mengaktifkan klien HTTP | Apigee.

Tersedia dalam:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

Mengaktifkan:

Hapus tanda komentar pada baris "./components/http-client" di masing-masing file route-config/${ENV_GROUP}/kustomization.yaml

Perubahan yang akan dilakukan:

  • Tidak perlu modifikasi wajib.

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

non-sni-klien

Setara dengan Cara mengonfigurasi klien non-SNI | Apigee yang sudah ada.

Tersedia dalam:

  • overlays/instances/${INSTANCE_NAME}/route-config/${ENV_GROUP}

Mengaktifkan:

Hapus tanda komentar pada baris "./components/non-sni-client" di masing-masing file route-config/${ENV_GROUP}/kustomization.yaml

Perubahan yang akan dilakukan:

  • components/non-sni-client/apigee-route.yaml

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

http-and-non-sni-client

Untuk mengetahui petunjuknya, lihat Mengaktifkan dukungan untuk klien non-SNI dan HTTP | Apigee.

Mengaktifkan:

Hapus tanda komentar pada baris "./components/http-and-non-sni-client" di masing-masing file route-config/${ENV_GROUP}/kustomization.yaml

Perubahan yang akan dilakukan:

  • components/http-and-non-sni-client/apigee-route.yaml

Penggunaan:

  1. Jika belum menginstal Apigee Hybrid, Anda dapat melanjutkan dengan langkah-langkah penginstalan dan perubahan ini akan diterapkan dalam proses
  2. Jika sudah menginstal Apigee Hybrid, Anda perlu menerapkan perubahan baru ini menggunakan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

multi-region

Komponen ini dapat digunakan saat mengonfigurasi deployment cassandra multi-region. Untuk mengetahui informasi selengkapnya, lihat Deployment multi-region di GKE dan GKE lokal

Mengaktifkan:

Hapus tanda komentar pada baris "./components/multi-region" di file datastore/kustomization.yaml

Perubahan yang akan dilakukan:

  • components/multi-region/cassandra-data-replication.yaml

    • WAJIB source.region Nama pusat data Cassandra sumber yang akan digunakan untuk mereplikasi data. Dapat diidentifikasi dengan menggunakan perintah berikut di cluster sumber:
    kubectl get apigeedatastore -n ${APIGEE_NAMESPACE} -o=jsonpath='{.items[*].spec.components.cassandra.properties.datacenter}'
    
  • {i>component<i}/multi-region/patch.yaml

    • WAJIB spec.components.properties.multiRegionSeedHost IP Pod dari pod cassandra sumber mana pun. Kita dapat menggunakan:
    kubectl get pods -n ${APIGEE_NAMESPACE} -o wide
    
    • Untuk menampilkan daftar semua pod dan mendapatkan IP dari pod cassandra, gunakan perintah berikut:
    kubectl get pods -o wide -n apigee
    

    Output Anda akan terlihat seperti berikut:

    NAME                      READY   STATUS      RESTARTS   AGE   IP          NODE                                          NOMINATED NODE
    apigee-cassandra-default-0        1/1     Running     0          5d    10.0.0.11   gke-k8s-dc-2-default-pool-a2206492-p55d
    apigee-cassandra-default-1        1/1     Running     0          5d    10.0.2.4    gke-k8s-dc-2-default-pool-e9daaab3-tjmz
    apigee-cassandra-default-2        1/1     Running     0          5d    10.0.3.5    gke-k8s-dc-2-default-pool-e589awq3-kjch
    

Untuk mengetahui informasi selengkapnya, lihat Prasyarat untuk GKE di "Multi-region deployment on GKE, GKE on-prem, dan AKS":

Penggunaan:

Penggunaan komponen ini sebagian besar masuk akal saat Anda menyiapkan Apigee Hybrid di cluster baru dan Anda sudah memiliki penyiapan Apigee Hybrid lain yang berfungsi.

  1. Cluster baru dan yang sudah ada harus menggunakan sertifikat TLS yang sama untuk memastikan komunikasi yang tepat antara pod Cassandra. Jadi, kita harus menyalin rahasia apigee-root-certificate dari cluster yang ada dan juga menggunakannya di cluster yang lebih baru:
  2. Jalankan:

    kubectl config get-contexts
    
    • Untuk mendapatkan daftar semua konteks Kubernetes, lalu jalankan
    kubectl config use-context SOURCE_CLUSTER_CONTEXT
    

    dengan SOURCE_CLUSTER_CONTEXT adalah nama konteks cluster kubernetes sumber.

  3. Simpan rahasia root certificate dalam file:

    kubectl get secret/apigee-root-certificate -n cert-manager -o yaml > apigee-root-certificate.yaml
    
  4. Alihkan konteks cluster ke cluster baru tempat Anda menginstal Apigee Hybrid.

    kubectl config use-context ${NEW_CLUSTER_CONTEXT}
    
  5. Buat rahasia root di cluster baru:

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  6. Menonaktifkan pembuatan root certificate baru. Tindakan ini akan memastikan bahwa kita tidak akan membuat apigee-root-certificate baru dan pada akhirnya akan menimpa ID yang kita buat pada langkah sebelumnya.

  7. Hapus tanda komentar pada baris berikut di file overlays/initialization/certificates/kustomization.yaml:

    # components:
    # - ./components/disable-apigee-root-certificate-generation
    
  8. Lanjutkan dengan penginstalan Apigee Hybrid lainnya menggunakan Penginstalan Hybrid Apigee Dasar atau penginstalan Apigee Hybrid yang Disesuaikan. Misalnya, dengan mengikuti Penginstalan Hybrid Apigee Dasar, Anda dapat menjalankan:

    ./tools/apigee-hybrid-setup.sh --cluster-name $CLUSTER_NAME --cluster-region $CLUSTER_LOCATION
    
  9. Verifikasi status build ulang menggunakan perintah berikut.



    kubectl -n ${APIGEE_NAMESPACE} get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    
  10. Verifikasi proses build ulang dari log. Selain itu, verifikasi ukuran data menggunakan perintah status nodetool:

    kubectl logs apigee-cassandra-default-0 -f -n ${APIGEE_NAMESPACE}
    kubectl exec apigee-cassandra-default-0 -n ${APIGEE_NAMESPACE}  -- nodetool -u ${JMX_USER} -pw ${JMX_PASSWORD} status
    
  11. Verifikasi status build ulang menggunakan perintah berikut.



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    Hasilnya akan terlihat seperti:

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
      "state": "complete",
      "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
      "state": "complete",
      "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
      "state": "complete",
      "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
    

    Lihat juga: Deployment multi-region.

  12. Menghapus baris berikut dari components/multi-region/patch.yaml:

      properties:
        multiRegionSeedHost: {IP_ADDRESS} # To be modified. REQUIRED
    
  13. Terapkan perubahan:

    kubectl apply -k overlays/instances/{INSTANCE_NAME}
    

Konsep

Hub Gambar

Image container Docker umumnya ditentukan dalam format:

${REGISTRY_HOST_PATH}/${IMAGE_NAME}:${IMAGE_TAG}

atau yang menggunakan ringkasan seperti ini:

${REGISTRY_HOST_PATH}/${IMAGE_NAME}@${DIGEST}

Apigee menggunakan konsep "Image Hub", yang dalam format di atas merujuk pada ${REGISTRY_HOST_PATH}. Nilai default Image Hub adalah gcr.io/apigee-release/hybrid/.

(Gambar yang menggunakan DIGEST harus disetel satu per satu di setiap subkomponen)

Apigee membuat jalur image akhir dengan menggabungkan nilai berikut:

  • "Image Hub" yang dapat diganti di apigee-hybrid-config.yaml (lihat bagian Menggunakan image docker dari repositori pribadi untuk mengetahui langkah-langkah mendetail tentang cara mengganti Image Hub).
  • Nilai IMAGE_TAG diperoleh dari kolom version yang ada di dalam file yaml untuk setiap komponen individual (misalnya, apigee-organization.yaml). Apigee memberi tag pada image dengan versi Apigee Hybrid. Artinya, IMAGE_TAG adalah versi 1.8 untuk Apigee Hybrid versi 1.8
  • IMAGE_NAME secara implisit ditentukan dari nama penampung tempat gambar akan digunakan. Misalnya, untuk container apigee-runtime, IMAGE_NAME akan berupa apigee-runtime.

Dengan demikian, contoh lengkap jalur gambar adalah gcr.io/apigee-release/hybrid/apigee-runtime:1.8.0

Dengan cara ini, jalur image akhir akan dibuat, yang kemudian akan digunakan di dalam setiap container di podnya masing-masing.

Akun layanan Google Cloud

Akun layanan Google Cloud adalah akun yang digunakan oleh aplikasi untuk melakukan panggilan yang diizinkan ke Google API. Kunci akun layanan Google Cloud dapat didownload, yang kemudian dapat digunakan untuk tujuan autentikasi. Apigee mengharapkan pengguna menyediakan kunci akun layanan dengan membuat secret. Berikut adalah nama-nama komponen dan nama default secret untuk mencari kunci akun layanan:

Komponen Subkomponen Nama rahasia kubernetes default yang berisi kunci akun layanan
organisasi
connectAgent apigee-connect-agent-gcp-sa-key-${ORG_NAME}
watcher apigee-watcher-gcp-sa-key-${ORG_NAME}
mart apigee-mart-gcp-sa-key-${ORG_NAME}
Udca apigee-udca-gcp-sa-key-${ORG_NAME}
ingressGateways T/A
environment
runtime apigee-runtime-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
Udca apigee-udca-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
sinkronisasi apigee-synchronizer-gcp-sa-key-${ORG_NAME}-${ENV_NAME}
telemetri
metrics apigee-metrics-gcp-sa-key
containerLogs apigee-logger-gcp-sa-key

Akun layanan Kubernetes

Akun layanan Kubernetes memberikan identitas ke pod di cluster Anda. Secara default, pengontrol Apigee akan membuatkan parameter ini untuk Anda. Namun, jika ingin mengganti pembuatan (misalnya, saat Anda menggunakan Identitas workload), Anda dapat melakukannya dengan menentukan kolom podServiceAccountName di berbagai subkomponen.

Daftar komponen dan sub-komponennya masing-masing di mana akun layanan kubernetes dapat ditentukan beserta nama default akun layanan k8s saat Anda mengaktifkan patch identitas workload untuk komponen tersebut.

Komponen Subkomponen Nama default (tersedia jika Anda telah mengaktifkan patch workload identity)
organisasi
connectAgent apigee-connect-agent-svc-account-${ORG_NAME}
watcher apigee-watcher-svc-account-${ORG_NAME}
mart apigee-mart-svc-account-${ORG_NAME}
Udca apigee-udca-svc-account-${ORG_NAME}
environment
sinkronisasi apigee-synchronizer-svc-account-${ORG_NAME}-${ENV_NAME}
Udca apigee-udca-svc-account-${ORG_NAME}-${ENV_NAME}
runtime apigee-runtime-svc-account-${ORG_NAME}-${ENV_NAME}
datastore
cassandra apigee-datastore-svc-account
telemetri
metricsApp apigee-metricsApp-svc-account
metricsProxy apigee-metricsProxy-svc-account
metricsAdapter apigee-metricsAdapter-svc-account
containerLogs apigee-container-logs-svc-account

Workload Identity

Dengan identitas workload, pod (yang menggunakan akun layanan Kubernetes) yang berjalan di GKE dapat langsung melakukan autentikasi dengan Google Cloud API tanpa memerlukan kunci akun layanan Google Cloud.

Menambahkan lingkungan baru

.
├── ...
├── instances/instance1/components
│   ├── ...
│   ├── environments
│   │   ├── dev
│   │   │   └── apigee-environment.yaml
│   │   │   └── secrets.yaml
│   │   └── new-env-name (new)
│   │       └── apigee-environment.yaml (new)
│   │       └── secrets.yaml (new)
└── ...

Menambahkan lingkungan baru semudah:

  1. Membuat folder baru di dalam direktori lingkungan (atau bagaimanapun cara Anda menyusun folder)
  2. Menyalin file apigee-environment.yaml dari lingkungan yang ada ke folder baru.
  3. Jika Anda ingin membuat akun layanan dan kunci enkripsi baru untuk lingkungan baru, salin secrets.yaml ke dalam folder baru dan ganti nama secret dengan tepat untuk membedakannya dari lingkungan lain yang ada (biasanya dilakukan dengan menambahkan nama lingkungan sebagai akhiran)
  4. Membuat perubahan yang sesuai pada apigee-environment.yaml, seperti:
    • Mengubah nama lingkungan
    • Jika akun layanan dan kunci enkripsi baru akan dibuat, keduanya harus direferensikan dengan benar di yaml.
  5. Menerapkan yaml:
kubectl apply -f components/environments/new-env-name/secrets.yaml
kubectl apply -f components/environments/new-env-name/apigee-environment.yaml

Menggunakan force delete di Apigee Datastore

Jika penghapusan datastore tidak berlangsung karena alasan apa pun, sekarang datastore apigee dapat dihapus paksa menggunakan perintah berikut, terlepas dari status cluster saat ini.





  1. Hapus apigeeds di namespace apigee:

    Kubectl delete -n apigee apigeeds default
    

    Jika langkah ini macet, Anda bisa keluar dari sana menggunakan CTRL + C.

  2. Mengedit apigeeds baru:

    Kubectl edit -n apigee apigeeds default
    
  3. Menambahkan/memperbarui kolom forceDelete di spesifikasi datastore apigee

    spec:
    forceDelete: true
    
  4. Simpan file dan keluar.

Sekarang tunggu datastore dihapus. Perlu waktu beberapa menit untuk menghapus semua resource cassandra.

Memahami skrip

Skrip apigee-hybrid-setup.sh menjalankan beberapa validasi dasar dan membantu mengotomatiskan langkah-langkah yang seharusnya Anda lakukan jika menginginkan penyesuaian yang lebih mendetail seperti yang didokumentasikan dalam Penginstalan Apigee Hybrid yang Disesuaikan. Bahkan dengan penginstalan yang disesuaikan, Anda masih dapat menggunakan sebagian skrip untuk membantu tugas tertentu.

Anda dapat menjalankan ./tools/apigee-hybrid-setup.sh --help untuk melihat daftar tanda yang didukung dan mendapatkan beberapa bantuan tambahan terkait skrip. Tanda berikut didukung saat ini:

  • --namespace Secara default, skrip menginstal semua komponen di namespace apigee. Anda dapat mengubah perilaku ini dengan menentukan nama namespace menggunakan flag ini.
  • --org Digunakan untuk memberikan nama organisasi Apigee. Jika tidak ditentukan, setelan defaultnya adalah project Google Cloud yang saat ini dipilih di gcloud
  • --envgroup Digunakan untuk memberikan nama grup lingkungan di dalam organisasi Anda. Jika tidak ditentukan, upaya akan dilakukan untuk mengkueri API bidang kontrol guna menentukan nama grup lingkungan. Jika beberapa grup lingkungan ditemukan, error akan ditampilkan dan skrip keluar.
  • --env Digunakan untuk memberikan nama lingkungan di dalam organisasi Anda. Jika tidak ditentukan, upaya akan dilakukan untuk mengkueri API bidang kontrol guna menentukan nama lingkungan. Jika beberapa lingkungan ditemukan atau lingkungan tersebut bukan bagian dari grup lingkungan, error akan ditampilkan dan skrip keluar.
  • --cluster-name Nama cluster Kubernetes.
  • --cluster-region Region tempat cluster kubernetes berada
  • --gcp-project-id ID Project Google Cloud tempat cluster kubernetes berada
  • --ingress-domain Menentukan nama host/nama domain yang akan digunakan untuk membuat sertifikat TLS yang ditandatangani sendiri untuk istio ingress-gateway. Jika tidak ada yang ditentukan, upaya akan dilakukan untuk menentukan nilai dengan mengkueri API bidang kontrol untuk mendapatkan nilai dari envgroup. Jika ada beberapa masalah saat menentukan envgroup atau ada beberapa nama host yang dikonfigurasi untuk envgroup, error akan ditampilkan dan skrip keluar.
  • --generate-internal-tls-certs Tindakan ini akan membuat rahasia kubernetes bernama apigee-ca yang berisi sertifikat dan pasangan kunci yang kita buat.
  • --create-ingress-tls-certs Tindakan ini akan menghasilkan rahasia bernama {ORG_NAME}-{ENV_GROUP_NAME} (berasal dari nama organisasi dan envgroup) di dalam namespace sistem istio yang akan berisi sertifikat dan pasangan kunci yang akan digunakan untuk komunikasi TLS. Nama domain yang digunakan untuk membuat sertifikat ini berasal dari nilai yang ditemukan dalam konfigurasi envgroup. Jika terjadi konflik (seperti saat kami menemukan beberapa domain), pesan error yang sesuai akan ditampilkan.
  • --create-gcp-sa-and-secrets Membuat satu akun layanan Google Cloud di project Google Cloud, mendownload kunci, lalu membuat secret kubernetes yang berisi kunci tersebut. Nama-nama rahasia ini dapat ditemukan di akun layanan Google Cloud.
  • --fill-values Mengganti nilai org, env, envgroup, dan nama lainnya di mana pun nilai tersebut diperlukan dalam berbagai yaml.
  • --apply-configuration Tindakan ini akan membuat penerbit sertifikat, definisi resource kustom, webhook, peran, dan resource pengontrol. Resource akan dibuat dalam urutan yang benar dan perintah akan diblokir hingga semuanya responsif.
  • -- rename-directories Ganti nama grup lingkungan dan lingkungan menjadi nama grup lingkungan dan lingkungan yang benar.
  • --verbose Menampilkan output mendetail untuk proses debug.
  • --help Menampilkan informasi penggunaan.
  • --setup-all Tindakan ini akan menjalankan semua tugas yang dapat dilakukan oleh skrip ini

Struktur Folder Penyiapan Hybrid Apigee

Secara default, folder apigee-hybrid-setup memiliki struktur hierarki berikut:

.
├── bases
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-controller-deployment.yaml
│   │   │   └── kustomization.yaml
│   │   └── apigee-ingressgateway-manager
│   │       ├── apigee-ingressgateway-manager-deployment.yaml
│   │       └── kustomization.yaml
│   ├── datastore
│   │   └── backup-and-restore
│   │       ├── backup
│   │       │   ├── cronjob.yaml
│   │       │   └── kustomization.yaml
│   │       ├── common
│   │       │   ├── kustomization.yaml
│   │       │   ├── rbac.yaml
│   │       │   └── tls-certificate.yaml
│   │       └── restore
│   │           ├── job.yaml
│   │           └── kustomization.yaml
│   └── initialization
│       ├── certificates
│       │   ├── certificates-and-issuers.yaml
│       │   └── kustomization.yaml
│       ├── crds
│       │   ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│       │   └── kustomization.yaml
│       ├── openshift
│       │   ├── kustomization.yaml
│       │   └── scc.yaml
│       ├── rbac
│       │   ├── apigee-controller
│       │   │   ├── kustomization.yaml
│       │   │   └── rbac.yaml
│       │   └── apigee-embedded-ingress-controller
│       │       ├── cluster-role-bindings.yaml
│       │       ├── cluster-roles.yaml
│       │       ├── kustomization.yaml
│       │       └── service-account.yaml
│       └── webhooks
│           ├── kustomization.yaml
│           ├── mutatingwebhookconfiguration.yaml
│           └── validatingwebhookconfiguration.yaml
├── CONTRIBUTING.md
├── docs
│   └── api_references
│       ├── v1alpha1.md
│       └── v1alpha2.md
├── kokoro
│   ├── build.sh
│   ├── common.cfg
│   ├── continuous.cfg
│   ├── presubmit.cfg
│   └── release.cfg
├── LICENSE
├── overlays
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-hybrid-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   ├── apigee-ingressgateway-manager
│   │   │   ├── apigee-ingressgateway-manager-deployment-patch.yaml
│   │   │   ├── apigee-istio-mesh-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   └── kustomization.yaml
│   ├── initialization
│   │   ├── certificates
│   │   │   ├── apigee-ingressgateway-manager-certificate-patch.yaml
│   │   │   ├── apigee-serving-cert-patch.yaml
│   │   │   ├── components
│   │   │   │   └── disable-apigee-root-certificate-generation
│   │   │   │       └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   ├── crds
│   │   │   └── kustomization.yaml
│   │   ├── ingress
│   │   │   ├── envoyfilter-1.11.yaml
│   │   │   └── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── openshift
│   │   │   ├── kustomization.yaml
│   │   │   └── scc.yaml
│   │   ├── rbac
│   │   │   ├── apigee-controller
│   │   │   │   └── kustomization.yaml
│   │   │   ├── apigee-ingressgateway-manager
│   │   │   │   └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   └── webhooks
│   │       ├── kustomization.yaml
│   │       ├── mutatingwebhookconfiguration.yaml
│   │       └── validatingwebhookconfiguration.yaml
│   └── instances
│       └── instance1
│           ├── datastore
│           │   ├── apigee-datastore.yaml
│           │   ├── components
│           │   │   ├── gcs-backup
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── cron-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── gcs-restore
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── job-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── multi-region
│           │   │   │   ├── cassandra-data-replication.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── non-gcs-backup
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── cron-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── non-gcs-restore
│           │   │   │   ├── apigee-datastore-patch.yaml
│           │   │   │   ├── job-patch.yaml
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── tls-certificate-patch.yaml
│           │   │   ├── openshift-scc
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── scc.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── environments
│           │   ├── kustomization.yaml
│           │   └── test
│           │       ├── apigee-environment.yaml
│           │       ├── components
│           │       │   ├── http-proxy
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── imagepullsecret
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── nodeselector
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   └── workload-identity
│           │       │       ├── kustomization.yaml
│           │       │       ├── patch.yaml
│           │       │       └── service-accounts.yaml
│           │       ├── kustomization.yaml
│           │       └── secrets.yaml
│           ├── kustomization.yaml
│           ├── organization
│           │   ├── apigee-organization.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── redis
│           │   ├── apigee-redis.yaml
│           │   ├── components
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── kustomization.yaml
│           │   │       ├── patch.yaml
│           │   │       └── service-accounts.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── route-config
│           │   ├── kustomization.yaml
│           │   └── test-envgroup
│           │       ├── apigee-route-config.yaml
│           │       ├── components
│           │       │   ├── http-and-non-sni-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   ├── http-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   └── non-sni-client
│           │       │       ├── apigee-route.yaml
│           │       │       └── kustomization.yaml
│           │       └── kustomization.yaml
│           └── telemetry
│               ├── apigee-telemetry.yaml
│               ├── components
│               │   ├── http-proxy
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── imagepullsecret
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── logger
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── metrics
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── nodeselector
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── openshift-scc
│               │   │   ├── kustomization.yaml
│               │   │   └── scc.yaml
│               │   ├── workload-identity-logger
│               │   │   ├── kustomization.yaml
│               │   │   ├── patch.yaml
│               │   │   └── service-accounts.yaml
│               │   └── workload-identity-metrics
│               │       ├── kustomization.yaml
│               │       ├── patch.yaml
│               │       └── service-accounts.yaml
│               └── kustomization.yaml
├── README.md
├── templates
│   ├── certificate-org-envgroup.yaml
│   ├── secret-apigee-cassandra-backup-and-restore-gcp-sa-key.yaml
│   ├── secret-apigee-cassandra-backup-and-restore-key-file.yaml
│   ├── secret-gcp-sa-key.yaml
│   └── secret-ingress-tls-cert-key.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── apigee-pull-push.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

Versi file di atas dapat ditemukan di tag pratinjau-1 repositori github di: https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1.

Folder di atas berisi manifes Kubernetes untuk runtime Apigee hybrid dan menggunakan Kustomize untuk manajemen konfigurasi. Manifes disusun berdasarkan konsep Kustomize basis & overlay. Folder dasar berisi konfigurasi minimal yang diperlukan untuk setiap komponen apigee. Folder overlay berisi beberapa fitur tambahan(konfigurasi) yang ditetapkan sebagai komponen. Komponen dapat dilakukan dengan menghapus tanda komentar pada referensi komponen di kustomization.yaml

Contoh : Guna mengaktifkan gcs-backup untuk apigee datastore, komponen gcs-backup telah dibatalkan komentarnya dalam inventory.yaml di bawah.

Jalur : ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/kustomization.yaml

namespace: "apigee" # kpt-set: ${APIGEE_NAMESPACE}

resources:
- apigee-datastore.yaml

components:
# - ./components/http-proxy
# - ./components/nodeselector/
# - ./components/imagepullsecret
# - ./components/workload-identity
# - ./components/openshift-scc
- ./components/gcs-backup (uncommented)
# - ./components/gcs-restore
# - ./components/non-gcs-backup
# - ./components/non-gcs-restore

Setiap nilai yang memerlukan penyesuaian harus ditetapkan di patch.yaml yang sesuai untuk gcs-backup. Dalam file di bawah ini, nilai CLOUD_STORAGE_BUCKET_PATH harus ditetapkan oleh pengguna

Jalur: $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/datastore/components/gcs-backup/cron-patch.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: apigee-cassandra-backup
  namespace: apigee
spec:
  schedule: "${YOUR_BACKUP_SCHEDULE_CODE}" # To be modified
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: apigee-cassandra-backup
            env:
            - name: APIGEE_CLOUDPROVIDER
              value: "GCP"
            - name: DATABASE_STORAGE_BUCKET
              value: "${CLOUD_STORAGE_BUCKET_PATH}" # To be modified. REQUIRED
            volumeMounts:
            - name: apigee-cassandra-backup
              mountPath: /var/secrets/google
          volumes:
          - name: apigee-cassandra-backup
            secret:
              secretName: "apigee-cassandra-backup-and-restore-svc-account"

Demikian pula, fitur/konfigurasi apa pun yang memerlukan penyesuaian dapat diaktifkan dengan menghapus tanda komentar pada komponen di kustomisasi.yaml komponen apigee. Selain itu, jika diperlukan, nilai yang sesuai untuk kolom di patch.yaml komponen harus ditetapkan sebagaimana mestinya.

Penjelasan singkat tentang folder dan file:

basis

Folder ini memiliki template dengan konfigurasi minimum sederhana yang diperlukan oleh setiap komponen apigee. Anda tidak perlu melakukan modifikasi pada manifes di folder ini.

overlay

Folder ini berisi template komponen kustom untuk konfigurasi tambahan

inisialisasi

namespaces.yaml

Namespace tempat komponen bidang data Apigee akan diinstal. Nama namespace default adalah apigee

sertifikat

Berisi resource Issuer dan Certificate yang digunakan untuk menerbitkan sertifikat ke webhook. Juga berisi Issuer yang digunakan untuk menerbitkan sertifikat ke berbagai pod untuk komunikasi TLS.

rbac

Berisi Role, ClusterRole, RoleBinding dan ClusterRoleBinding yang akan digunakan oleh berbagai komponen.

{i>crds<i}
    Contains the definition of all the CRDs which are used by Apigee.
webhook

Berisi ValidatingWebhookConfiguration dan MutatingWebhookConfiguration yang akan digunakan untuk melakukan validasi pada resource kustom.

masuk

Berisi konfigurasi yang berlaku untuk semua POD Ingress. Mis. Modifikasi header umum, health check, dll.

openshift

Berisi definisi SecurityContextConstraints openshift.

Pengontrol

apigee-controller
apigee-hybrid-config.yaml

Berisi ConfigMap yang disediakan sebagai input di apigee-controller-manager.yaml. ConfigMap ini berisi konfigurasi seperti imageHub, imagePullSecrets, forwardProxy, dan banyak lagi.

apigee-controller-deployment.yaml

Berisi dua Layanan untuk pengontrol dan webhook, serta Deployment untuk pengontrol. Jika Anda ingin menggunakan gambar pribadi untuk pengontrol, di sinilah Anda harus melakukan perubahan.

Istiod

Apigee-istio-mesh-config.yaml Berisi konfigurasi mesh untuk Istio yang digunakan oleh Apigee. Hal ini tidak berlaku untuk penginstalan ASM/Istio lainnya dalam cluster.

apigee-ingressgateway-manager-deployment-patch.yaml

Berisi layanan dan deployment Istiod. Ini adalah wilayah pribadi yang hanya digunakan untuk kasus penggunaan Apigee.

instance/{instanceName}

datastore
apigee-datastore.yaml

Berisi resource kustom ApigeeDatastore yang mengelola cassandra.

secrets.yaml

Berisi kredensial default untuk datastore.

redis
apigee-redis.yaml

Berisi resource kustom ApigeeRedis yang mengelola redis.

secrets.yaml

Berisi kredensial default untuk datastore.

organisasi
apigee-organization.yaml

Berisi resource kustom ApigeeOrganization yang mengelola subkomponen lain seperti connectAgent, watcherAndSynchronizer, MART,UDCA, dan Ingress.

secrets.yaml

Berisi Secret yang direferensikan dalam apigee-organization.yaml. Beberapa rahasia dijadikan sebagai komentar karena rahasia dihasilkan oleh skrip. Jika Anda menonaktifkan pembuatannya, Anda harus membuatnya secara manual

lingkungan

Berisi semua lingkungan di organisasi Anda. Anda harus membuat folder terpisah untuk setiap lingkungan dengan menyalin yang sudah disediakan untuk Anda dan mengonfigurasinya sesuai kebutuhan.

dev
apigee-environment.yaml

Berisi resource kustom ApigeeEnvironment yang mengelola subkomponen lain seperti runtime.

secrets.yaml

Berisi Secret yang direferensikan dalam apigee-environment.yaml. Beberapa rahasia dijadikan sebagai komentar karena rahasia dihasilkan oleh skrip. Jika pembuatannya dinonaktifkan, Anda harus membuatnya secara manual

telemetri
apigee-telemetry.yaml

Berisi resource kustom ApigeeTelemetry.

secrets.yaml

Berisi Secret yang direferensikan dalam apigee-telemetry.yaml. Beberapa rahasia dijadikan sebagai komentar karena rahasia dihasilkan oleh skrip. Jika Anda menonaktifkan pembuatannya, Anda harus membuatnya secara manual

konfigurasi rute
dev-envgroup
apigee-route-config.yaml

Berisi resource kustom ApigeeRouteConfig.

secrets.yaml

Berisi Secret yang direferensikan dalam apigee-route-config.yaml. Hal ini dikomentari karena dibuat secara otomatis oleh skrip apigee-hybrid-setup.sh dan disimpan di sana untuk memberikan contoh tampilan rahasia tersebut jika Anda membuatnya secara manual.

diagnostik

diagnostik-collector.yaml

Referensi yang akan digunakan untuk memunculkan deployment diagnostik

tools

apigee-hybrid-setup.sh
apigee-create-service-account.sh
dump-kubernetes.sh
apigee-pull-push.sh

Menyimpan kunci akun layanan di vault eksternal

Vault (oleh Hashicorp) adalah sistem pengelolaan rahasia populer yang memiliki beberapa integrasi dengan penyimpanan rahasia yang disediakan oleh Google, Azure, AWS, dan lainnya. Dengan Hashicorp Vault, Anda dapat mengambil secret dari sumber eksternal dan menggunakannya dalam resource kubernetes. Ada beberapa cara penggunaan Vault untuk mendapatkan rahasia. Langkah-langkah berikut akan berfungsi sebagai contoh dasar tentang cara menggunakan Penyedia CSI Vault untuk memasang kunci akun layanan Google Cloud yang disimpan di beberapa mesin rahasia yang disediakan oleh Vault.



  1. Kita akan menggunakan Helm untuk menginstal resource terkait Vault di cluster Anda. Ikuti langkah-langkah dalam Menginstal Helm terkait cara menyiapkan helm di sistem Anda.
  2. Ikuti langkah-langkah di Menginstal diagram Helm Vault, yaitu:

    1. Menambahkan repositori Hashicorp ke helm

      helm repo add hashicorp https://helm.releases.hashicorp.com
      
    2. Perbarui repositori helm

      helm repo update
      
    3. Menginstal Vault

      helm install vault hashicorp/vault \
      --set "server.dev.enabled=true" \
      --set "injector.enabled=false" \
      --set "csi.enabled=true"
      
  3. Sekarang kita akan menyimpan rahasia ini di dalam Vault.

    1. Dapatkan shell di dalam dev pod vault

      kubectl exec -it vault-0 -- /bin/sh
       ```
      
    2. Dalam contoh ini, kita akan menggunakan mesin kunci/nilai untuk menyimpan data.

      vault kv put secret/runtime-gcp-sa-key key="${BASE_64_ENCODED_KEY}"
      
    3. Untuk memverifikasi bahwa kunci berhasil disimpan, gunakan:

      vault kv get secret/runtime-gcp-sa-key
      
  4. Siapkan autentikasi agar pod runtime dapat mengambil kunci. Seperti yang dibahas dalam akun layanan Kubernetes, akun layanan Kubernetes memberikan identitas ke pod dan memungkinkan autentikasi dengan sistem lain.

    1. Dapatkan shell di dalam dev pod vault

      kubectl exec -it vault-0 -- /bin/sh
      
    2. Aktifkan metode autentikasi kubernetes

      vault auth enable kubernetes
      
    3. Menulis konfigurasi autentikasi

      vault write auth/kubernetes/config \
      issuer="https://kubernetes.default.svc.cluster.local" \
      token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
      kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" \
      kubernetes_ca_cert=@/var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
      disable_iss_validation=true
      
    4. Membuat kebijakan auth

      vault policy write apigee-runtime-app - <<EOF
      path "secret/data/runtime-gcp-sa-key" {
      capabilities = ["read"]
      }
      EOF
      
    5. Mengikat kebijakan dengan akun layanan

      vault write auth/kubernetes/role/apigee-runtime-role \
      bound_service_account_names=apigee-runtime-sa \
      bound_service_account_namespaces=${APIGEE_NAMESPACE} \
      policies=apigee-runtime-app \
      ttl=20m
      

    Di sini, kita asumsikan bahwa akun layanan berada di dalam namespace apigee. Jika Anda memiliki namespace lain untuk menginstal apigee, nama tersebut akan digunakan.

    1. Keluar dari cangkang di dalam vault-0

      exit
      
  5. Menginstal driver CSI penyimpanan secret

    # Add repo to helm
    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts
    # Install driver in cluster
    helm install csi secrets-store-csi-driver/secrets-store-csi-driver
    
  6. Buat resource kubernetes SecretProviderClass yang mereferensikan rahasia yang Anda buat di dalam vault

    cat > spc-vault.yaml <<EOF
    apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
    kind: SecretProviderClass
    metadata:
    name: vault-apigee-runtime-gcp-sa-key
    spec:
    provider: vault
    parameters:
      vaultAddress: "http://vault.default:8200"
      roleName: "apigee-runtime-role"
      objects: |
        - objectName: "client_secret.json"
          secretPath: "secret/data/runtime-gcp-sa-key"
          secretKey: "key"
    EOF
    
  7. Terapkan yaml

    kubectl apply -f spc-vault.yaml
    
  8. Buat akun layanan kubernetes yang izinnya telah kita tetapkan pada langkah (4.e)

    kubectl create serviceaccount -n ${APIGEE_NAMESPACE} apigee-runtime-sa
    
  9. Ubah file apigee-environment.yaml untuk lingkungan tersebut, lalu tambahkan baris berikut:

    apiVersion: apigee.cloud.google.com/v1alpha2
    kind: ApigeeEnvironment
    # existing content
    spec:
    name: {ENV_NAME}
    organizationRef: {ORG_NAME}
    components:
     runtime:
    # existing content
       pod
       containers:
       - name: apigee-runtime
         podServiceAccountName: apigee-runtime-sa
    # existing content
         volumeMounts:
         - name: secrets-store-inline
           mountPath: "/opt/apigee/sa"
           readOnly: true
       volumes:
       - name: secrets-store-inline
         csi:
           driver: secrets-store.csi.k8s.io
           readOnly: true
           volumeAttributes:
             secretProviderClass: "vault-apigee-runtime-gcp-sa-key"
    
  10. Terapkan perubahan:

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/environments/$ENV_NAME
    

Upgrade Hybrid Apigee



Anda harus telah menyelesaikan semua persyaratan yang disebutkan dalam Prasyarat. Selain itu, sebaiknya Anda melakukan mulai ulang berkelanjutan semua komponen untuk memeriksa apakah cluster responsif. Urutan mulai ulang adalah Cassandra, Redis, ApigeeOrganization, dan ApigeeEnvironment.

Buat Cadangan

  1. Buat salinan cadangan konfigurasi hybrid saat ini. Cadangan akan diperlukan jika Anda perlu melakukan rollback upgrade ke versi saat ini.

    tar -czvf apigee-hybrid-install.v-X.Y.Z.tar.gz $HYBRID_INSTALL_BASE_DIR
    
  2. Buat cadangan database cassandra. Pencadangan Cassandra adalah langkah penting perlindungan terhadap berbagai skenario bencana.

Upgrade platform Kubernetes Anda jika diperlukan

Langkah ini tidak diperlukan setiap saat, tetapi Anda harus mengupgrade platform Kubernetes Anda seperti kubernetes, openshift, dan komponen seperti versi cert-manager, cassandra, dll. jika tidak lagi didukung oleh versi apigee hybrid yang lebih baru. Dokumentasi akan berisi versi yang didukung dari platform dan komponen.

Download file penyiapan

Download repositori dan ganti folder bases dan tools di penyiapan apigee hybrid yang ada dengan yang lebih baru:

  1. Clone tag pratinjau-1 repositori GitHub di https://github.com/apigee/apigee-hybrid-install/releases/tag/preview-1

    Repositori yang di-clone akan memiliki struktur yang menyerupai struktur yang dijelaskan dalam Struktur Folder Penyiapan Hybrid Apigee:

  2. mengganti inisialisasi, alat, dan folder pengontrol dalam pengaturan apigee hybrid yang ada.

    export HYBRID_INSTALL_HOME=PATH_TO_PREVIOUS_HYBRID_INSTALL_DIRECTORY
    mv -f bases $HYBRID_INSTALL_HOME/bases
    mv -f tools $HYBRID_INSTALL_HOME/tools
    

Perbarui izin akun layanan jika diperlukan

Langkah ini juga tidak diperlukan setiap saat, tetapi Anda harus membuat akun layanan baru atau memperbarui izin akun layanan yang ada jika diperlukan. Panduan upgrade akan memberikan detail tentang akun layanan mana yang perlu diubah atau dibuat, dan peran apa saja yang perlu ditambahkan.

  • Jika Anda perlu mengubah izin akun layanan yang ada, gunakan perintah gcloud yang sesuai. Panduan upgrade akan berisi perintah dan peran terperinci yang perlu ditambahkan.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:apigee-component@$PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/$NEW_ROLE"
    
  • Jika versi apigee hybrid yang lebih baru mungkin memerlukan akun layanan tambahan untuk komponen baru / yang sudah ada, Anda harus membuatnya. Anda dapat menggunakan skrip apigee-create-service-account.sh yang dikirimkan dalam folder alat untuk membuat akun layanan baru. Karena skrip sudah diperbarui sebagai bagian dari langkah 4, skrip akan memiliki detail dan profil baru yang diperlukan untuk akun layanan baru yang perlu dibuat.

    Nama akun layanan yang baru dibuat harus dirujuk dalam CR komponen yang sesuai.

    ./tools/create-service-account --env prod --profile apigee-component
    

Upgrade pengontrol

Ubah kolom versi untuk komponen yang tercantum di ${INSTALL_DIR}/overlays/instances/$INSTANCE_DIR/kustomization.yaml ke versi hybrid yang relevan.

Berikut adalah contoh file $INSTALL_DIR/overlays/instances/$INSTANCE_DIR/pelacakanization.yaml. Nilai kolom versi harus diupdate ke versi yang relevan

resources:
- datastore/
- environments/
- organization/
- redis/
- route-config/
- telemetry/

patches:
- target:
    group: apigee.cloud.google.com
    version: v1alpha1
    kind: ApigeeDatastore
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)
- target:
    group: apigee.cloud.google.com
    version: v1alpha2
    kind: ApigeeEnvironment
  patch: |-
    - op: add
      path: /spec/version
      value: 1-6-1 (Modify the version)

Ikuti langkah-langkah yang sama dengan yang diberikan di Membuat resource inisialisasi dan pengontrol di alur kerja penginstalan apigee hybrid. Anda dapat menggunakan skrip atau mengikuti langkah-langkah manual yang diberikan untuk mengupgrade resource inisialisasi dan pengontrol.

Mengupdate komponen Kubernetes Apigee

Anda harus melakukan perubahan berikut: - Jika ada perubahan arsitektur atau pengenalan kolom baru atau penghentian kolom lama, Anda harus mengubah CR dengan perubahan yang sesuai sesuai dengan petunjuk yang diberikan dalam panduan upgrade. - Minimal Anda perlu memperbarui kolom versi dalam CR (yang menunjukkan versi apigee hybrid terinstal) ke versi apigee hybrid yang lebih baru.

Terapkan perubahan untuk CR apigee. Untuk lingkungan non-produksi, Anda dapat menerapkan semua perubahan ke komponen apigee secara bersamaan

kubectl apply -f ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}

Rollback Hybrid Apigee

  1. Memulihkan apigee-hybrid-setup

    Pindah ke direktori yang berisi penyiapan apigee hybrid versi sebelumnya. Jika tidak tersedia, pulihkan dari file zip yang dibuat pada langkah 1[link] selama upgrade apigee Hybrid.

  2. Melakukan rollback komponen Kubernetes

    Menerapkan perubahan untuk CR apigee

    kubectl apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}
    
  3. Pengontrol rollback

    Ikuti langkah-langkah yang sama dengan yang diberikan untuk membuat resource inisialisasi dan pengontrol di alur kerja penginstalan apigee hybrid. Anda dapat menggunakan skrip atau mengikuti langkah-langkah manual yang diberikan untuk melakukan rollback resource inisialisasi dan pengontrol.

  4. Pembersihan

    Anda perlu menghapus semua resource tambahan baru yang dibuat selama upgrade, seperti komponen baru atau akun layanan yang diperkenalkan dalam versi hybrid yang lebih baru. Semua resource yang perlu dibersihkan dan langkah-langkah untuk membersihkannya akan diberikan dalam panduan upgrade.

Menghapus lingkungan



Berikut adalah langkah-langkah untuk menghapus semua resource yang terkait dengan lingkungan dari cluster kubernetes Anda:

  1. Dapatkan nama CR lingkungan. Hal ini dapat dilakukan dengan mendapatkan semua lingkungan:

    kubectl get env -n ${APIGEE_NAMESPACE}
    

    Simpan nama resource di variabel lingkungan APIGEE_ENV.

  2. Hapus kunci enkripsi lingkungan. Misalnya, jika Anda belum mengubah nama kunci enkripsi, Anda dapat menghapusnya dengan menggunakan:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $APIGEE_ENV-encryption-keys
    
  3. Hapus secret akun layanan Google Cloud:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    
  4. Hapus akun layanan kubernetes:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get env $APIGEE_ENV -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  5. Hapus resource kustom lingkungan Apigee:

    kubectl -n ${APIGEE_NAMESPACE} delete env $APIGEE_ENV
    

Menghapus konfigurasi campuran



Berikut adalah langkah-langkah untuk menghapus semua resource yang terkait dengan apigee hybrid dari cluster kubernetes Anda:

  1. Anda harus menghapus tugas penyiapan pengguna dan penyiapan skema apigee.

    # To list all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} get jobs
    # To delete all jobs in ${APIGEE_NAMESPACE}
    kubectl -n ${APIGEE_NAMESPACE} delete jobs $(kubectl -n ${APIGEE_NAMESPACE} get jobs -o custom-columns=':.metadata.name')
    
  2. Anda harus menghapus komponen dataplane hybrid apigee yang di-deploy. Gunakan perintah berikut untuk menghapus semua komponen:

    kubectl delete -k ${INSTALL_DIR}/overlays/instances/$INSTANCE_NAME
    
  3. Langkah ini hanya diperlukan jika Anda tidak mengandalkan nama default untuk secret akun layanan kubernetes, secret akun layanan Google Cloud, dll. Jika Anda mengandalkan nama default, maka akan dihapus pada langkah berikutnya jika tidak, Anda harus menghapusnya secara manual menggunakan perintah berikut:

    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.appServiceAccountSecretName}')
    kubectl delete secret -n ${APIGEE_NAMESPACE} $(kubectl get ${APIGEE_COMPONENT} ${APIGEE_COMPONENT_NAME} -n ${APIGEE_NAMESPACE} -o=jsonpath='{.spec.components.*.podServiceAccountName}')
    
  4. Jika menggunakan OpenShift, Anda perlu menghapus scc (Security Context Constraints) yang dibuat selama penginstalan apigee hybrid.

    kubectl delete scc ${SECURITY_CONTEXT_CONSTRAINTS_NAME}
    
  5. Jalankan perintah di bawah untuk menghapus peran, rolebinding, CRD, deployment pengontrol, dll.

    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/ingress
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/rbac
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/webhooks
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/crds
    kubectl delete -k ${INSTALL_DIR}/overlays/initialization/certificates
    
  6. Jalankan perintah di bawah untuk menghapus namespace apigee

    kubectl delete -f ${INSTALL_DIR}/overlays/initialization/namespace.yaml
    

    Atau, gunakan perintah:

    kubectl delete $APIGEE_NAMESPACE
    

Penginstalan Multi-Instance

Penyiapan multi-instance mengacu pada penyiapan campuran yang dapat mencakup beberapa region atau dalam region yang sama juga. Apigee merekomendasikan pengorganisasian konfigurasi instance kedua dalam struktur direktori terpisah karena konfigurasi lingkungan (replikas,dll.) selalu berbeda di antara instance. Konfigurasi setiap instance dipisahkan dan diatur secara independen dalam struktur foldernya masing-masing.

Misalnya - Untuk penyiapan Active-Passive dalam skenario multi-region, Anda mungkin ingin mengonfigurasi region kedua dalam mode warm standby dengan konfigurasi ukuran dan ukuran yang berbeda.

Pada struktur folder di bawah ini, Anda dapat membuat salinan direktori instance1 bernama instance2 serta mengubah konfigurasi datastore dan ingress sesuai kebutuhan.

Struktur folder apigee-hybrid-setup untuk penyiapan multi-instance.]

.
├── bases
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-controller-deployment.yaml
│   │   │   └── kustomization.yaml
│   │   └── istiod
│   │       ├── apigee-ingressgateway-manager-deployment.yaml
│   │       └── kustomization.yaml
│   └── initialization
│       ├── certificates
│       │   ├── certificates-and-issuers.yaml
│       │   └── kustomization.yaml
│       ├── crds
│       │   ├── customresourcedefinition-apigeedatastores.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeedeployments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeenvironments.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeorganizations.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeredis.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeerouteconfigs.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeeroutes.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-apigeetelemetries.apigee.cloud.google.com.yaml
│       │   ├── customresourcedefinition-cassandradatareplications.apigee.cloud.google.com.yaml
│       │   └── kustomization.yaml
│       ├── ingress
│       │   ├── envoyfilter-1.11.yaml
│       │   └── kustomization.yaml
│       ├── openshift
│       │   ├── kustomization.yaml
│       │   └── scc.yaml
│       ├── rbac
│       │   ├── apigee-controller
│       │   │   ├── kustomization.yaml
│       │   │   └── rbac.yaml
│       │   └── apigee-embedded-ingress-controller
│       │       ├── cluster-role-bindings.yaml
│       │       ├── cluster-roles.yaml
│       │       ├── kustomization.yaml
│       │       └── service-account.yaml
│       └── webhooks
│           ├── kustomization.yaml
│           ├── mutatingwebhookconfiguration.yaml
│           └── validatingwebhookconfiguration.yaml
├── instances
│   └── instance1 (Add the 2nd instance under instances directory similar to instance1)
│       ├── datastore
│       │   ├── apigee-datastore.yaml
│       │   ├── components
│       │   │   ├── http-proxy
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── environments
│       │   ├── kustomization.yaml
│       │   └── test
│       │       ├── apigee-environment.yaml
│       │       ├── components
│       │       │   ├── http-proxy
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   ├── imagepullsecret
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   ├── nodeselector
│       │       │   │   ├── kustomization.yaml
│       │       │   │   └── patch.yaml
│       │       │   └── workload-identity
│       │       │       ├── apigee-workload-identities.yaml
│       │       │       ├── kustomization.yaml
│       │       │       └── patch.yaml
│       │       ├── kustomization.yaml
│       │       └── secrets.yaml
│       ├── kustomization.yaml
│       ├── organization
│       │   ├── apigee-organization.yaml
│       │   ├── components
│       │   │   ├── http-proxy
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── redis
│       │   ├── apigee-redis.yaml
│       │   ├── components
│       │   │   ├── imagepullsecret
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   ├── nodeselector
│       │   │   │   ├── kustomization.yaml
│       │   │   │   └── patch.yaml
│       │   │   └── workload-identity
│       │   │       ├── apigee-workload-identities.yaml
│       │   │       ├── kustomization.yaml
│       │   │       └── patch.yaml
│       │   ├── kustomization.yaml
│       │   └── secrets.yaml
│       ├── route-config
│       │   ├── kustomization.yaml
│       │   └── test-env-group
│       │       ├── apigee-route-config.yaml
│       │       ├── components
│       │       │   ├── http-and-non-sni-client
│       │       │   │   ├── apigee-route.yaml
│       │       │   │   └── kustomization.yaml
│       │       │   ├── http-client
│       │       │   │   ├── apigee-route.yaml
│       │       │   │   └── kustomization.yaml
│       │       │   └── non-sni-client
│       │       │       ├── apigee-route.yaml
│       │       │       └── kustomization.yaml
│       │       └── kustomization.yaml
│       └── telemetry
│           ├── apigee-telemetry.yaml
│           ├── components
│           │   ├── http-proxy
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── imagepullsecret
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── logger
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── metrics
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── nodeselector
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   ├── workload-identity-logger
│           │   │   ├── apigee-workload-identities.yaml
│           │   │   ├── kustomization.yaml
│           │   │   └── patch.yaml
│           │   └── workload-identity-metrics
│           │       ├── apigee-workload-identities.yaml
│           │       ├── kustomization.yaml
│           │       └── patch.yaml
│           └── kustomization.yaml
├── overlays
│   ├── controllers
│   │   ├── apigee-controller
│   │   │   ├── apigee-hybrid-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   ├── istiod
│   │   │   ├── apigee-ingressgateway-manager-deployment-patch.yaml
│   │   │   ├── apigee-istio-mesh-config.yaml
│   │   │   ├── components
│   │   │   │   ├── imagepullsecret
│   │   │   │   │   ├── kustomization.yaml
│   │   │   │   │   └── patch.yaml
│   │   │   │   └── nodeselector
│   │   │   │       ├── kustomization.yaml
│   │   │   │       └── patch.yaml
│   │   │   └── kustomization.yaml
│   │   └── kustomization.yaml
│   ├── initialization
│   │   ├── certificates
│   │   │   ├── apigee-ingressgateway-manager-certificate.yaml
│   │   │   └── kustomization.yaml
│   │   ├── crds
│   │   │   └── kustomization.yaml
│   │   ├── ingress
│   │   │   └── kustomization.yaml
│   │   ├── namespace.yaml
│   │   ├── openshift
│   │   │   ├── kustomization.yaml
│   │   │   └── scc.yaml
│   │   ├── rbac
│   │   │   ├── apigee-controller
│   │   │   │   └── kustomization.yaml
│   │   │   ├── apigee-embedded-ingress-controller
│   │   │   │   └── kustomization.yaml
│   │   │   └── kustomization.yaml
│   │   └── webhooks
│   │       ├── kustomization.yaml
│   │       ├── mutatingwebhookconfiguration.yaml
│   │       └── validatingwebhookconfiguration.yaml
│   └── instances
│       └── instance1
│           ├── datastore
│           │   ├── apigee-datastore.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── openshift-scc
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── scc.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── environments
│           │   ├── kustomization.yaml
│           │   └── test
│           │       ├── apigee-environment.yaml
│           │       ├── components
│           │       │   ├── http-proxy
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── imagepullsecret
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   ├── nodeselector
│           │       │   │   ├── kustomization.yaml
│           │       │   │   └── patch.yaml
│           │       │   └── workload-identity
│           │       │       ├── apigee-workload-identities.yaml
│           │       │       ├── kustomization.yaml
│           │       │       └── patch.yaml
│           │       ├── kustomization.yaml
│           │       └── secrets.yaml
│           ├── kustomization.yaml
│           ├── organization
│           │   ├── apigee-organization.yaml
│           │   ├── components
│           │   │   ├── http-proxy
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── redis
│           │   ├── apigee-redis.yaml
│           │   ├── components
│           │   │   ├── imagepullsecret
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   ├── nodeselector
│           │   │   │   ├── kustomization.yaml
│           │   │   │   └── patch.yaml
│           │   │   └── workload-identity
│           │   │       ├── apigee-workload-identities.yaml
│           │   │       ├── kustomization.yaml
│           │   │       └── patch.yaml
│           │   ├── kustomization.yaml
│           │   └── secrets.yaml
│           ├── route-config
│           │   ├── kustomization.yaml
│           │   └── test-envgroup
│           │       ├── apigee-route-config.yaml
│           │       ├── components
│           │       │   ├── http-and-non-sni-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   ├── http-client
│           │       │   │   ├── apigee-route.yaml
│           │       │   │   └── kustomization.yaml
│           │       │   └── non-sni-client
│           │       │       ├── apigee-route.yaml
│           │       │       └── kustomization.yaml
│           │       └── kustomization.yaml
│           └── telemetry
│               ├── apigee-telemetry.yaml
│               ├── components
│               │   ├── http-proxy
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── imagepullsecret
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── logger
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── metrics
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── nodeselector
│               │   │   ├── kustomization.yaml
│               │   │   └── patch.yaml
│               │   ├── openshift-scc
│               │   │   ├── kustomization.yaml
│               │   │   └── scc.yaml
│               │   ├── workload-identity-logger
│               │   │   ├── apigee-workload-identities.yaml
│               │   │   └── kustomization.yaml
│               │   └── workload-identity-metrics
│               │       ├── apigee-workload-identities.yaml
│               │       ├── kustomization.yaml
│               │       └── patch.yaml
│               └── kustomization.yaml
├── README.md
├── templates
│   ├── ingress-certificate.yaml
│   ├── ingress-cert-secret.yaml
│   └── service-account-key-secret.yaml
└── tools
    ├── apigee-hybrid-setup.sh
    ├── common.sh
    ├── create-service-account.sh
    └── dump_kubernetes.sh

Penyiapan Multi Instance di GKE

Prasyarat

Sebelum mengonfigurasi beberapa instance hybrid, Anda diharapkan telah menyelesaikan prasyarat berikut:

  • Menyiapkan cluster Kubernetes di beberapa region(sama atau berbeda) dengan blok CIDR yang berbeda
  • Menyiapkan komunikasi lintas region
  • Membuka port Cassandra 7000 dan 7001 antara cluster Kubernetes di semua region (7000 dapat digunakan sebagai opsi cadangan selama pemecahan masalah). Lihat juga Mengonfigurasi port.

Anda dapat menggunakan alat seperti ntpdate untuk memverifikasi bahwa waktu server sudah disinkronkan.


Mengonfigurasi host seed multi-region

  1. Buat salinan folder $INSTANCE_NAME dari instance Anda yang ada dan tambahkan ke dalam folder instance.
  2. Ubah nilai kolom namespace jika berbeda dengan namespace instance1.
  3. Ikuti langkah-langkah yang ditentukan dalam Menentukan sertifikat TLS masuk untuk mengubah konfigurasi masuk bagi instance lainnya.
  4. Lihat Mengelola gateway masuk Apigee guna mendapatkan informasi tentang cara mengonfigurasi ip load balancer untuk instance lainnya



  5. Setel konteks kubectl ke cluster asli sebelum mengambil nama seed

    kubectl config use-context original-cluster-name
    
  6. Jalankan perintah kubectl berikut guna mengidentifikasi alamat host seed untuk Cassandra di region saat ini.

    kubectl get pods -o wide -n apigee -l app=apigee-cassandra
    
  7. Setiap IP Pod yang ditampilkan dari perintah sebelumnya dapat dianggap sebagai host seed multi-region.

  8. Pada instance ke-2, konfigurasikan nilai multiRegionSeedHost di CR apigee datastore di bagian ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore/apigee-datastore.yaml

Menyiapkan instance baru

  1. Menetapkan konteks ke cluster yang ada

    kubectl config use-context existing-cluster-name
    
  2. Mengekspor rahasia apigee-ca ke file

    kubectl -n cert-manager get secret apigee-root-certificate -o yaml > apigee-root-certificate.yaml
    
  3. Tetapkan konteks ke nama cluster region baru:

    kubectl config use-context NEW_CLUSTER_NAME
    
  4. Impor rahasia ke cluster baru

    kubectl -n cert-manager apply -f apigee-root-certificate.yaml
    
  5. Instal hybrid di instance (region) baru dengan mengikuti langkah-langkah yang diuraikan dalam Membuat resource inisialisasi dan pengontrol.

  6. Siapkan Cassandra di semua pod di pusat data baru. Dapatkan apigeeorg dari cluster dengan perintah berikut:

    kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
    
  7. Buat file cassandra data replication custom resource (YAML). File dapat memiliki nama apa pun. Pada contoh berikut, file akan memiliki nama datareplication.yaml. File tersebut harus berisi hal berikut

    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: CassandraDataReplication
    metadata:
    name: REGION_EXPANSION
    namespace: NAMESPACE
    spec:
    organizationRef: APIGEEORG_VALUE
    force: false
    source:
      region: SOURCE_REGION
    

    Dengan keterangan:

    • Region_EXPANSION adalah nama yang Anda berikan untuk metadata ini. Anda bisa pilih nama seperti "cassandra-data-replication"
    • NAMESPACE adalah namespace yang sama dengan yang dipilih untuk instance ke-2. Nama ini biasanya adalah "apigee".
    • APIGEEORG_VALUE adalah output nilai dari perintah kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" di langkah sebelumnya.
    • SOURCE_Region adalah nilai nilai pusat data cassandra dari status nodetool dari cluster sumber.
  8. Terapkan CassandraDataReplication dengan perintah berikut:

    kubectl apply -f datareplication.yaml
    
  9. Verifikasi status build ulang menggunakan perintah berikut.



    kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
    

    Hasilnya akan terlihat seperti

    {
    "rebuildDetails": {
      "apigee-cassandra-default-0": {
        "state": "complete",
        "updated": 1623105760
      },
      "apigee-cassandra-default-1": {
        "state": "complete",
        "updated": 1623105765
      },
      "apigee-cassandra-default-2": {
        "state": "complete",
        "updated": 1623105770
      }
    },
    "state": "complete",
    "updated": 1623105770
    }
    
  10. Verifikasi proses build ulang dari log. Selain itu, verifikasi ukuran data menggunakan perintah status nodetool:

    kubectl logs apigee-cassandra-default-0 -f -n apigee
    

    Buka datastore/secrets.yaml untuk JMX_user dan JMX_password

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
  11. Hapus multiRegionSeedHost dari CR datastore apigee dan jalankan perintah di bawah untuk menerapkan perubahan

    kubectl apply k apply -k ${INSTALL_DIR}/overlays/instances/${INSTANCE_DIR}/datastore
    
  12. Memeriksa status cluster Cassandra

    Perintah berikut berguna untuk melihat apakah penyiapan cluster berhasil di dua pusat data. Perintah ini memeriksa status nodetool untuk dua region.

    kubectl exec apigee-cassandra-default-0 -n apigee  -- nodetool -u JMX_user -pw JMX_password status
    
    
    Datacenter: us-central1
    =======================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
    UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
    UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.0.4.33   78.69 KiB  256          100.0%               a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
    UN  10.0.0.21   78.68 KiB  256          100.0%               9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
    UN  10.0.1.26   15.46 KiB  256          100.0%               1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1
    

Pemecahan masalah

Panduan Dukungan, Diagnosis & Pemecahan Masalah

https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/troubleshooting-apigee-hybrid.

Pembersihan Manual setelah menggunakan forceDelete dalam penyiapan Hybrid Apigee multi-Region

  • Dalam contoh berikut, ada 2 region - us-east1 dan us-west1.
  • Di region us-west1, datastore apigee dihapus menggunakan paksa hapus.
  • Di wilayah us-east1, cassandra masih aktif dan berjalan.
  • Memastikan apigeeds dihapus menggunakan perintah

    kubectl get apigeeds -n apigee
    No resources found in apigee namespace.
    
  • Ubah konteks kubectl ke region lain tempat cluster cassandra masih aktif dan berjalan (di sini us-east1).

  • Memverifikasi datastore dalam status berjalan

    kubectl get apigeeds -n apigee
    NAME      STATE     AGE
    default      running    23h
    
  • Eksekusi ke salah satu pod cassandra di region bagian atas (di sini us-east1)

    kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash
    apigee@apigee-cassandra-default-0:~$
    
  • Periksa status nodetool, bagian bawah akan menampilkan semua node di region yang dihapus (di sini us-west1)

    apigee@apigee-cassandra-default-0:~$ nodetool -u ${APIGEE_JMX_USER} -pw ${APIGEE_JMX_PASSWORD} status
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load           Tokens   Owns    Host ID                                                           Rack
    UN  10.52.0.212   685.01 KiB  256          ?         e1aa61e3-4eae-4549-9b58-506d495d87ab   ra-1
    UN  10.52.0.72     606.75 KiB  256          ?         477dfc03-f93e-40ea-810a-d15769822ad5     ra-1
    UN  10.52.0.104   648.3 KiB    256          ?         a8854cff-c2e3-4f0c-a342-e692787efcab        ra-1
    Datacenter: us-west1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens   Owns     Host ID                                                           Rack
    DN  10.60.0.143   567.06 KiB    256          ?           355d6ace-ab77-42cb-8138-9993bfd62d0e    ra-1
    DN  10.60.0.40     535.99 KiB    256          ?           4ed2c903-ff56-40fa-a15e-80a3de3cb22d      ra-1
    DN  10.60.0.17     573.08 KiB    256          ?           f9a50d19-c04a-4d0d-a088-612384bed9f5     ra-1
    
  • Hapus semua node di region yang dihapus (di sini us-west1)

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 355d6ace-ab77-42cb-8138-9993bfd62d0e
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode 4ed2c903-ff56-40fa-a15e-80a3de3cb22d
    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD removenode f9a50d19-c04a-4d0d-a088-612384bed9f5
    
  • Pastikan tidak ada node dari wilayah yang dihapus (di sini us-west1) yang tersisa

    apigee@apigee-cassandra-default-0:~$ nodetool -u $APIGEE_JMX_USER -pw $APIGEE_JMX_PASSWORD status
    
    
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --     Address         Load             Tokens  Owns   Host ID                                                           Rack
    UN  10.52.0.212   699.71 KiB    256          ?        e1aa61e3-4eae-4549-9b58-506d495d87ab  ra-1
    UN  10.52.0.72     586.77 KiB    256          ?        477dfc03-f93e-40ea-810a-d15769822ad5    ra-1
    UN  10.52.0.104   623.6 KiB      256          ?        a8854cff-c2e3-4f0c-a342-e692787efcab       ra-1
    
  • Setelah selesai, hapus tugas penyiapan pengguna di region bagian atas (di sini us-east1). Tugas akan dibuat ulang secara otomatis dalam beberapa detik.

    kubectl get jobs -n apigee
    
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    0/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                          0/1            7s         7s
    
    
    kubectl delete job apigee-cassandra-user-setup--apigee--0d2504c
    
  • Tunggu tugas penyiapan pengguna selesai

    kubectl get jobs -n apigee
    
    ​​NAME                                                                                    COMPLETIONS   DURATION   AGE
    apigee-cassandra-schema-setup-apigee--0d2504c                    1/1           5m54s      5m54s
    apigee-cassandra-user-setup--apigee--0d2504c                      1/1           7m                7m
    
  • Pastikan keyspace tidak memiliki region yang dihapus.

  • Membuat pod proses debug cassandra.

    • Ikuti versi hybrid 1.5+, ikuti dokumentasi panduan pemecahan masalah cassandra (misalnya untuk hybrid 1.5 - link, hybrid 1.6 - link), lalu jalankan ke pod yang dibuat
  • Login ke cqlsh di pod proses debug menggunakan perintah

    apigee@cassandra-debug-client:~$ cqlsh apigee-cassandra-default-0.apigee-cassandra-default.apigee.svc.cluster.local -u ddl_user --ssl
    Password:
    
  • Pastikan region us-west1 dihapus dari semua keyspace

    ddl_user@cqlsh> SELECT * FROM system_schema.keyspaces;
    
    keyspace_name              | durable_writes | replication
    ---------------------------+----------------+-----------------------------------------------------------------------------------
    cache_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      rtc_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                    system_auth |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_schema |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
    quota_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kms_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
             system_distributed |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                         system |           True |                            {'class': 'org.apache.cassandra.locator.LocalStrategy'}
                         perses |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
      kvm_prince_hybrid_hybrid |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
                  system_traces |           True | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'us-east1': '3'}
    (11 rows)