Memigrasikan Apigee Hybrid ke Helm dari apigeectl

Alat migrasi ini membantu memigrasikan cluster hybrid berbasis apigeectl ke cluster hybrid berbasis Helm. Alat ini tidak melakukan penggantian komponen cluster yang sebenarnya. Operasi ini bersifat idempoten dan dapat dijalankan berkali-kali di cluster yang sama, dengan menyiapkan subset komponen dan organisasi setiap kali.

Anda dapat memigrasikan semua komponen apigee sekaligus, dan operasi upgrade Helm dapat dilakukan berdasarkan per komponen setelah alat dijalankan.

Lihat Menginstal dan mengelola hybrid Apigee dengan diagram Helm untuk mengetahui informasi tentang cara mengelola cluster hybrid yang telah Anda migrasikan ke pengelolaan Helm dengan alat ini.

Prasyarat

  • Helm versi v3.14.2+.
  • File kubeconfig yang berfungsi dan mengarah ke cluster dengan penginstalan Apigee Hybrid 1.15 yang berfungsi.
  • Izin untuk mengubah metadata dan anotasi pada resource Kubernetes komponen hybrid yang ingin Anda migrasikan.

Cakupan

Alat ini mendukung opsi berikut saat runtime:

  • Penyesuaian namespace untuk resource apigee. Namespace default: apigee
  • Migrasi hanya komponen hybrid yang dipilih. Default: semua komponen dimigrasikan
  • Migrasi hanya satu organisasi
  • Migrasi hanya satu lingkungan
  • Migrasi hanya satu grup lingkungan (apigee-virtualhost)
  • Penyesuaian nama rilis Helm untuk organisasi, lingkungan, dan grup lingkungan.

Batasan

  • Alat ini tidak mendukung penyesuaian nama rilis Helm untuk komponen hybrid berikut: apigee-operator, apigee-datastore, apigee-redis, apigee-telemetry, dan apigee-ingress-manager.
  • Penyesuaian interaktif yang dilakukan pada nama rilis Helm untuk organisasi, lingkungan, dan grup lingkungan tidak otomatis dipertahankan di antara eksekusi. Anda dapat mengedit file sementara dan menyediakannya sebagai opsi dalam proses berikutnya.
  • Pemfilteran env dan env-group hanya dilakukan berdasarkan nama. Dalam beberapa kasus, hal ini dapat menyebabkan beberapa env dan grup env dimigrasikan di cluster multi-org.

    Misalnya, pada cluster multi-org dengan org org1 dan org2, jika env prod ada di kedua org, dan hanya --env=prod yang ditentukan, kedua env akan dimigrasikan. Jika hanya ingin memigrasikan satu lingkungan, Anda juga harus menentukan filter org. --org=org1 atau --org=org2.

Penggunaan

Sintaks

apigee-helm-migration [--apigee-namespace=] [--components=] [--dry-run] [--env=org1] [--env-group=org2] [--org=baz] [--kubeconfig=] [-y] [-v] [-f /path/to/releaseNames.yaml]

Nama rilis Helm yang dibuat

Setiap Helm Chart yang di-deploy pada cluster harus memiliki nama rilis, yang harus unik dalam namespace. Nama rilis Helm tidak memiliki konvensi penamaan atau batasan apa pun yang terkait dengan nama diagram. Alat migrasi menghasilkan nama rilis Helm yang unik untuk setiap komponen.

Diagram Cluster organisasi tunggal Cluster multi-org
apigee-operator operator operator
apigee-datastore datastore datastore
apigee-telemetry telemetry telemetry
apigee-redis redis redis
apigee-ingress-manager ingress-manager ingress-manager
apigee-org ORG_NAME ORG_NAME
apigee-env ENV_NAME[-env[-n]](1) ORG_NAME-ENV_NAME[-env[-n]](1)
apigee-virtualhost (envgroup) VH_NAME[-env-group[-n]](1) ORG_NAME-VH_NAME[-env-group[-n]](1)

(1) Nama diberi akhiran -env atau -env-group jika nama yang dihasilkan bertentangan dengan nama yang dihasilkan lainnya. Nama tersebut diberi akhiran -1 atau -2 … jika masih bertentangan.

Menyesuaikan nama rilis Helm

Alat migrasi memungkinkan penyesuaian interaktif nama rilis Helm. Jika Anda ingin menyesuaikan nama rilis Helm secara non-interaktif:

  1. Jalankan alat ini sekali dan keluar pada perintah pertama untuk membuat file sementara yang berisi nama rilis yang dibuat secara otomatis. Anda akan melihat baris seperti:
    INFO: 21:32:56 using temp file for release names:  /tmp/apigee-helm-migration-1229129207-releaseNames
  2. Pindahkan atau salin, lalu edit file ini. Anda dapat meneruskan file yang telah diedit ini dengan opsi -f saat Anda menjalankan alat migrasi. Nama rilis yang dibuat secara otomatis terlihat seperti:

    orgs:
      example-apigee-org:
        helmReleaseName: example-apigee-org
        envs:
          prod:
            helmReleaseName: prod
        envGroups:
          prod-envgroup:
            helmReleaseName: prod-envgroup

    Untuk menyesuaikan nama rilis Helm untuk org, env, atau envgroup, edit kolom helmReleaseName objek tersebut. Misalnya, untuk mengganti nama rilis org menjadi custom-org, rilis env menjadi custom-env, dan rilis envgroup menjadi custom-group, file yang dihasilkan akan terlihat seperti:

    orgs:
      example-apigee-org:
        helmReleaseName: custom-org
        envs:
          prod:
            helmReleaseName: custom-env
        envGroups:
          prod-envgroup:
            helmReleaseName: custom-group

Menggunakan namespace kustom

Apigee hybrid v1.13 dan yang lebih baru berjalan dalam satu namespace Kubernetes. Semua komponen hybrid berjalan di namespace ini. apigee adalah nama default. Anda dapat menggunakan namespace kustom untuk komponen ini.

Jika menggunakan namespace kustom, Anda harus menentukannya dengan flag --apigee-namespace my_custom_namespace saat menjalankan alat migrasi Helm.

Anda juga harus menambahkan properti level teratas namespace: my_custom_namespace ke file penggantian.

Petunjuk

  1. Temukan alat migrasi.

    Alat migrasi dipaketkan dengan apigeectl di /tools/migration/.

  2. Ekstrak file yang dikompresi menggunakan salah satu perintah berikut:

    • Mac:
      tar -xzf apigee-helm-migration_1.0.2_mac_64.tar.gz
    • Linux:
      tar -xzf apigee-helm-migration_1.0.2_linux_64.tar.gz
    • Windows:
      tar -xzf apigee-helm-migration_1.0.2_windows_64.zip
  3. Jalankan alat migrasi. Jika opsi default dapat diterima, cukup jalankan alat tanpa argumen apa pun, dan setujui perintah jika nama rilis helm yang dihasilkan memuaskan. Beberapa contoh skenario diberikan di bawah ini:
    • Penginstalan sederhana, menggunakan kubeconfig (~/.kube/config) default, namespace apigee default, dan nama rilis Helm default.

      Perintah berikut sudah cukup untuk sebagian besar, jika tidak semua, penginstalan. Operasi upgrade Helm dapat dilakukan berdasarkan per komponen setelah alat dijalankan.

      ./apigee-helm-migration
      
    • Memigrasikan semua komponen menggunakan namespace kustom:
      ./apigee-helm-migration --apigee-namespace my_custom_namespace
      
    • Memigrasikan hanya komponen operator dan datastore:

      ./apigee-helm-migration --components operator,datastore
      
        INFO: 00:22:48 using kubeconfig file  /usr/local/google/home/example/.kube/config
        INFO: 00:22:48 namespace for apigee resources:
        INFO: 00:22:48 	 apigee
        INFO: 00:22:48 processing all organizations in cluster
        INFO: 00:22:48 Components to migrate:
        INFO: 00:22:48 	 operator,datastore
        INFO: 00:22:48 dry-run:
        INFO: 00:22:48 	 false
        Continue with patching apigee resources for Helm migration? [y/n]: y
        INFO: 00:22:52 Processing component:  operator
        INFO: 00:22:54 Processing component:  datastore
        INFO: 00:22:55 Migration successful!
    • Menunjuk ke file kubeconfig tertentu dan menentukan nama yang berbeda untuk namespace apigee.

      ./apigee-helm-migration --kubeconfig /abs/path/to/kubeconf --namespace org1_namespace
      
    • Memigrasikan semua komponen, tetapi hanya satu organisasi:

      ./apigee-helm-migration --org=some-test-org
      

    Berikut adalah contoh output dari migrasi yang berhasil:

    INFO: 21:32:55 using kubeconfig file  /usr/local/google/home/example/.kube/config
    INFO: 21:32:55 namespace for apigee resources:
    INFO: 21:32:55 	 apigee
    INFO: 21:32:55 processing all organizations in cluster
    INFO: 21:32:55 processing all components
    INFO: 21:32:55 dry-run:
    INFO: 21:32:55 	 false
    INFO: 21:32:55 cluster Apigee information:
    INFO: 21:32:55 Apigee Organizations found:
    INFO: 21:32:56 	 example-hybrid-dev
    INFO: 21:32:56 Apigee Environments found (org: env):
    INFO: 21:32:56 	 example-hybrid-dev : prod
    INFO: 21:32:56 Apigee EnvGroups(apigeerouteconfigs) found (org: envGroup):
    INFO: 21:32:56 	 example-hybrid-dev : prod-envgroup
    INFO: 21:32:56 using temp file for release names:  /tmp/apigee-helm-migration-1229129207-releaseNames
    INFO: 21:32:56 Helm release names for Apigee orgs/envs/envgroups:
    orgs:
    example-hybrid-dev:
    helmReleaseName: example-hybrid-dev
    envs:
      prod:
        helmReleaseName: prod
    envGroups:
      prod-envgroup:
        helmReleaseName: prod-envgroup
    Make changes to the release names for Apigee orgs/env/envgroups? [y/n]: n
    Continue with patching apigee resources for Helm migration? [y/n]: y
    INFO: 21:32:59 Processing component:  operator
    INFO: 21:33:01 Processing component:  datastore
    INFO: 21:33:01 Processing component:  redis
    INFO: 21:33:02 Processing component:  ingress-manager
    INFO: 21:33:02 Processing component:  telemetry
    INFO: 21:33:03 Processing component:  orgs
    INFO: 21:33:05 Processing component:  envs
    INFO: 21:33:06 Processing component:  env-groups
    INFO: 21:33:07 Migration successful!

    Kemungkinan error:

    • Error saat mem-parsing file nama rilis: Periksa file nama rilis yang diteruskan.
    • Resource tidak ditemukan: Pastikan Apigee Hybrid telah diinstal sepenuhnya, dan Anda memiliki izin untuk mengakses resource apigee.

Perubahan properti konfigurasi

Lakukan perubahan berikut pada file penggantian Anda:

  • Apigee hybrid yang dikelola dengan Helm menggunakan properti apigeeIngressGateway untuk mengonfigurasi semua gateway ingress Apigee di cluster Anda. Properti ingressGateways menggantikan setelan di apigeeIngressGateway untuk gateway ingress bernama tertentu.

    Lihat apigeeIngressGateway

    • Ubah semua properti ingressGateways yang bersifat global untuk semua gateway ingress di cluster Anda menjadi properti apigeeIngressGateway. File penggantian Anda harus berisi setidaknya:
      apigeeIngressGateway:
        image:
          url: "PATH_TO_REPOSITORY/apigee-asm-ingress"
          tag: "TAG"
      

      Contoh:

      apigeeIngressGateway:
        image:
          url: "gcr.io/apigee-release/hybrid/apigee-asm-ingress"
          tag: "1.15.1"
      
    • Pastikan untuk menyertakan ingressGateways.name. Diperlukan untuk membuat instance gateway masuk Anda. Contoh:
    • ingressGateways:
        name: INGRESS_GATEWAY_NAME
      
  • Properti untuk mengaktifkan Workload Identity telah berubah:
    • gcp.workloadIdentity.enabled menggantikan gcp.workloadIdentityEnabled.
    • Jika Anda menggunakan satu akun layanan untuk semua komponen, Anda dapat menentukannya dengan: gcp.workloadIdentity.gsa. Contoh:
      gcp:
        workloadIdentity:
          enabled: true
          gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
      
    • Jika Anda menggunakan akun layanan terpisah untuk setiap komponen (standar untuk sebagian besar penginstalan prod), tentukan akun layanan dengan properti gsa komponen. Contoh:
      logger:
        gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
      

    Lihat: gcp.workloadIdentity.enabled, gcp.federatedWorkloadIdentity.enabled, Mengaktifkan Workload Identity di GKE atau Mengaktifkan Workload Identity Federation di AKS dan EKS.

Pemecahan masalah

Ada masalah umum pada alat migrasi Helm di rilis hybrid v1.12. Hingga masalah diselesaikan, pencadangan dan pemulihan Cassandra memerlukan langkah tambahan.

Anda dapat mengikuti langkah-langkah berikut:

  • Sebelum atau setelah menjalankan alat migrasi
  • Sebelum menginstal diagram Helm

Untuk menginstal patch bagi solusi sementara:

  1. Pastikan kubeconfig Anda saat ini mengarah ke cluster yang ingin Anda migrasikan. Anda dapat melakukan langkah-langkah ini dari direktori mana pun.
  2. Buat file bernama migration-operator-patch.yaml dengan konten berikut:
    # migration-operator-patch.yaml
    metadata:
      annotations:
        meta.helm.sh/release-name: operator
        meta.helm.sh/release-namespace: APIGEE_NAMESPACE
      labels:
        app.kubernetes.io/managed-by: Helm
  3. Buat file bernama migration-datastore-patch.yaml dengan konten berikut:
    # migration-datastore-patch.yaml
    metadata:
      annotations:
        meta.helm.sh/release-name: datastore
        meta.helm.sh/release-namespace: apigee
      labels:
        app.kubernetes.io/managed-by: Helm
  4. Jalankan perintah kubectl berikut:
    kubectl patch clusterrole apigee-cassandra-backup --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrole apigee-cassandra-restore --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrolebinding apigee-cassandra-backup --patch-file ./migration-operator-patch.yaml
    kubectl patch clusterrolebinding apigee-cassandra-restore --patch-file ./migration-operator-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE cronjob apigee-cassandra-backup --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-backup-tls --patch-file ./migration-datastore-patch.yaml --type merge
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-svc-account --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-backup-key-file --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-backup-sa --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE job apigee-cassandra-restore --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE certificate apigee-cassandra-restore-tls --patch-file ./migration-datastore-patch.yaml --type merge
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-svc-account --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE secret apigee-cassandra-restore-key-file --patch-file ./migration-datastore-patch.yaml
    kubectl patch -n APIGEE_NAMESPACE ServiceAccount apigee-cassandra-restore-sa --patch-file ./migration-datastore-patch.yaml
  5. Bersihkan file patch menggunakan perintah berikut:
    rm migration-operator-patch.yaml
    rm migration-datastore-patch.yaml

Langkah berikutnya

Lanjutkan penginstalan diagram Helm Apigee Hybrid dengan petunjuk di Menginstal dan mengelola Apigee Hybrid dengan diagram Helm.

Output -help

./apigee-helm-migration --help
Usage of ./apigee-helm-migration:
  -apigee-namespace string
      namespace used for apigee resources (default "apigee")
  -components string
      CSV of components to migrate. If empty then all components are migrated. Valid values are: operator,datastore,redis,ingress-manager,telemetry,orgs,envs,env-groups
  -dry-run
      perform a dry-run
  -env string
      restrict migration to a singular supplied env. If empty then all envs detected in the cluster are migrated
  -env-group string
      restrict migration to a singular supplied envGroup. If empty then all envGroups detected in the cluster are migrated
  -kubeconfig string
      (optional) absolute path to the kubeconfig file (default "/usr/local/google/home/example/.kube/config")
  -org string
      restrict migration to a singular supplied org. If empty then all orgs detected in the cluster are migrated
  -v	Increased logging verbosity
  -y	don't prompt for confirmation or for configuration of Helm releases