Alat migrasi ini membantu memigrasikan cluster hibrida berbasis apigeectl
ke cluster hibrida berbasis Helm.
Alat ini tidak melakukan penggantian
komponen cluster yang sebenarnya. Fungsi ini bersifat idempoten dan dapat dijalankan beberapa kali di cluster yang sama, menyiapkan subset komponen dan organisasi setiap kali dijalankan.
Anda dapat memigrasikan semua komponen apigee
sekaligus, dan operasi upgrade Helm dapat dilakukan berdasarkan komponen setelah alat dijalankan.
Lihat Menginstal dan mengelola Apigee hybrid 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.12 yang berfungsi. - Izin untuk mengubah metadata dan anotasi pada resource Kubernetes komponen campuran yang ingin Anda migrasikan.
Cakupan
Alat ini mendukung opsi berikut saat runtime:
-
Penyesuaian namespace untuk resource
apigee
. Namespace default:apigee
- Hanya migrasi komponen campuran yang dipilih. Default: semua komponen dimigrasikan
- Migrasi satu organisasi saja
- Hanya migrasi satu lingkungan
-
Hanya migrasi satu grup env (
apigee-virtualhost
) - Penyesuaian nama rilis Helm untuk organisasi, lingkungan, dan grup lingkungan.
Batasan
-
Alat ini tidak mendukung penyesuaian nama rilis Helm untuk komponen
campuran ini:
apigee-operator
,apigee-datastore
,apigee-redis
,apigee-telemetry
, danapigee-ingress-manager
. - Penyesuaian interaktif yang dilakukan pada nama rilis Helm untuk org, env, dan env-group tidak otomatis dipertahankan di antara operasi. Anda dapat mengedit file sementara dan menyediakannya sebagai opsi dalam operasi 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-organisasi dengan organisasi
org1
danorg2
, jika envprod
ada di kedua organisasi, dan hanya--env=prod
yang ditentukan, kedua env akan dimigrasikan. Jika hanya ingin memigrasikan satu env, Anda juga harus menentukan filter organisasi--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 dihasilkan
Setiap Diagram Helm yang di-deploy di cluster harus memiliki nama rilis, yang harus unik dalam namespace. Nama rilis Helm tidak memiliki konvensi penamaan atau batasan apa pun terkait nama diagram. Alat migrasi menghasilkan nama rilis Helm yang unik untuk setiap komponen.
Diagram | Cluster organisasi tunggal | Cluster multi-organisasi |
---|---|---|
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 |
Menyesuaikan nama rilis Helm
Alat migrasi memungkinkan penyesuaian nama rilis Helm secara interaktif. Jika Anda ingin menyesuaikan nama rilis Helm secara non-interaktif:
-
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
-
Pindahkan atau salin, lalu edit file ini. Anda dapat meneruskan file yang diedit ini dengan opsi
-f
saat 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 menjadicustom-org
, rilis env menjadicustom-env
, dan rilis envgroup menjadicustom-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 berjalan di dua namespace Kubernetes:
apigee-system
: Komponenapigee-operator
selalu berjalan di namespaceapigee-system
. Alat migrasi Helm akan mengupdate komponenapigee-operator
di namespaceapigee-system
, apa pun yang Anda tentukan dengan flag--apigee-namespace
.apigee
: Semua komponen campuran kecualiapigee-operator
berjalan di namespace ini.apigee
adalah nama default. Anda dapat menggunakan namespace kustom apa pun 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 atas
namespace: my_custom_namespace
ke file penggantian.
Petunjuk
- Download alat migrasi.
Linux
-
Simpan nomor versi terbaru dalam variabel menggunakan perintah berikut:
export VERSION=$(curl -s "https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/current-version.txt?ignoreCache=1")
-
Pastikan variabel diisi dengan nomor versi menggunakan perintah berikut. Jika
ingin menggunakan versi yang berbeda, Anda dapat menyimpannya dalam variabel lingkungan.
echo $VERSION
Contoh:
echo $VERSION
1.0.5 -
Download paket rilis untuk sistem operasi Anda menggunakan perintah berikut:
curl -LO https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/${VERSION}/apigee-helm-migration_linux_64.tar.gz
-
Ekstrak file yang dikompresi menggunakan perintah berikut:
tar -xzf apigee-helm-migration_linux_64.tar.gz
Mac OS
-
Simpan nomor versi terbaru dalam variabel menggunakan perintah berikut:
export VERSION=$(curl -s "https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/current-version.txt?ignoreCache=1")
-
Pastikan variabel diisi dengan nomor versi menggunakan perintah berikut. Jika
ingin menggunakan versi yang berbeda, Anda dapat menyimpannya dalam variabel lingkungan.
echo $VERSION
Contoh:
echo $VERSION
1.0.5 -
Download paket rilis untuk sistem operasi Anda menggunakan perintah berikut:
curl -LO https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/${VERSION}/apigee-helm-migration_mac_64.tar.gz
-
Ekstrak file yang dikompresi menggunakan perintah berikut:
tar -xzf apigee-helm-migration_mac_64.tar.gz
Windows
-
Simpan nomor versi terbaru dalam variabel menggunakan perintah berikut:
for /f "tokens=*" %a in ('curl -s https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/current-version.txt') do set VERSION=%a
-
Pastikan variabel diisi dengan nomor versi menggunakan perintah berikut. Jika
ingin menggunakan versi yang berbeda, Anda dapat menyimpannya dalam variabel lingkungan.
echo %VERSION%
Contoh:
echo %VERSION%
1.0.5 -
Download paket rilis untuk sistem operasi Anda menggunakan perintah berikut:
curl -LO https://storage.googleapis.com/apigee-release/hybrid/apigee-migration-tool/%VERSION%/apigee-helm-migration_windows_64.tar.gz
-
Ekstrak file yang dikompresi menggunakan perintah berikut:
tar xzvf apigee-helm-migration_windows_64.tar.gz
-
Simpan nomor versi terbaru dalam variabel menggunakan perintah berikut:
-
Jalankan alat migrasi. Jika opsi default dapat diterima, Anda
cukup menjalankan alat tanpa argumen apa pun, dan menyetujui perintah
jika nama rilis helm yang dihasilkan memuaskan. Beberapa contoh
skenario diberikan di bawah ini:
-
Untuk update multi-organisasi, sebaiknya jalankan
apigee-helm-migration
tanpa opsi untuk mengupgrade semua komponen organisasi dan lingkungan.Penginstalan sederhana, menggunakan
kubeconfig
default (~/.kube/config
), namespaceapigee
default, dan nama rilis Helm default.Perintah berikut seharusnya sudah cukup untuk sebagian besar, jika tidak semua, penginstalan. Operasi upgrade Helm dapat dilakukan berdasarkan 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
dandatastore
:./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 lain untuk namespaceapigee
../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!
Potensi error:
- Error mengurai file nama rilis: Periksa file nama rilis yang diteruskan.
-
Resource tidak ditemukan: Pastikan Apigee hybrid telah sepenuhnya
diinstal, dan Anda memiliki izin untuk mengakses
resource
apigee
.
-
Perubahan properti konfigurasi
Lakukan perubahan berikut di file penggantian Anda:
-
Apigee hybrid yang dikelola dengan Helm menggunakan properti
apigeeIngressGateway
untuk mengonfigurasi semua gateway ingress Apigee di cluster Anda. PropertiingressGateways
mengganti setelan diapigeeIngressGateway
untuk setiap gateway ingress yang diberi nama.Lihat
apigeeIngressGateway
- Buat stanza
apigeeIngressGateway
tambahan dalam file penggantian untuk propertiingressGateways
yang bersifat global untuk semua gateway masuk di cluster Anda. Contoh: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.17.8-asm.20-distroless"
-
Pastikan untuk menyertakan
ingressGateways.name
. Anda harus membuat instance gateway masuk. Contoh:
ingressGateways: - name: INGRESS_GATEWAY_NAME
- Buat stanza
- Properti untuk mengaktifkan Workload Identity telah berubah:
gcp.workloadIdentity.enabled
menggantikangcp.workloadIdentityEnabled
.- Jika 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 produk), 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 dalam rilis hibrida v1.12. Hingga masalah ini terpecahkan, 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 untuk solusinya:
- Pastikan
kubeconfig
saat ini mengarah ke cluster yang ingin Anda migrasikan. Anda dapat melakukan langkah-langkah ini dari direktori mana pun. - 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-system labels: app.kubernetes.io/managed-by: Helm
- 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
- 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 cronjob apigee-cassandra-backup --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee certificate apigee-cassandra-backup-tls --patch-file ./migration-datastore-patch.yaml --type merge
kubectl patch -n apigee secret apigee-cassandra-backup-svc-account --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee secret apigee-cassandra-backup-key-file --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee ServiceAccount apigee-cassandra-backup-sa --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee job apigee-cassandra-restore --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee certificate apigee-cassandra-restore-tls --patch-file ./migration-datastore-patch.yaml --type merge
kubectl patch -n apigee secret apigee-cassandra-restore-svc-account --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee secret apigee-cassandra-restore-key-file --patch-file ./migration-datastore-patch.yaml
kubectl patch -n apigee ServiceAccount apigee-cassandra-restore-sa --patch-file ./migration-datastore-patch.yaml
- 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