Esegui la migrazione di Apigee hybrid a Helm da apigeectl

Questo strumento di migrazione ti aiuta a eseguire la migrazione di un cluster ibrido basato su apigeectl-based a un cluster ibrido basato su Helm. Questo strumento non esegue la sostituzione effettiva di alcun componente del cluster. È idempotente e può essere eseguito più volte sullo stesso cluster, preparando ogni volta un sottoinsieme di componenti e organizzazioni.

Puoi eseguire la migrazione di tutti i componenti apigee contemporaneamente e le operazioni di upgrade di Helm possono essere eseguite per ogni componente dopo l'esecuzione dello strumento.

Per informazioni sulla gestione dei cluster ibridi di cui hai eseguito la migrazione alla gestione di Helm con questo strumento, consulta Installare e gestire Apigee hybrid con i grafici Helm.

Prerequisiti

  • Versione Helm v3.14.2 o successive.
  • Un file kubeconfig funzionante che rimanda a un cluster con un'installazione di Apigee hybrid 1.16 funzionante.
  • Autorizzazioni per modificare i metadati e le annotazioni sulle risorse Kubernetes dei componenti ibridi di cui vuoi eseguire la migrazione.

Ambito

Questo strumento supporta le seguenti opzioni in fase di runtime:

  • Personalizzazione dello spazio dei nomi per le risorse apigee. Spazio dei nomi predefinito: spazio dei nomi: apigee
  • Migrazione solo dei componenti ibridi selezionati. Impostazione predefinita: viene eseguita la migrazione di tutti i componenti
  • Migrazione di una singola organizzazione
  • Migrazione di un singolo ambiente
  • Migrazione di un singolo gruppo di ambienti (apigee-virtualhost)
  • Personalizzazione dei nomi delle release di Helm per organizzazioni, ambienti e gruppi di ambienti.

Limitazioni

  • Questo strumento non supporta la personalizzazione dei nomi delle release di Helm per i seguenti componenti ibridi: componenti: apigee-operator, apigee-datastore, apigee-redis, apigee-telemetry, e apigee-ingress-manager.
  • Le personalizzazioni interattive apportate ai nomi delle release di Helm per organizzazioni, ambienti, e gruppi di ambienti non vengono mantenute automaticamente tra le esecuzioni. Puoi modificare il file temporaneo e fornirlo come opzione nelle esecuzioni successive.
  • Il filtro di ambienti e gruppi di ambienti viene eseguito solo per nome. In alcuni casi, ciò potrebbe comportare la migrazione di più ambienti e gruppi di ambienti nei cluster multi-organizzazione.

    Ad esempio, in un cluster multi-organizzazione con le organizzazioni org1 e org2, se l'ambiente prod è presente in entrambe le organizzazioni e viene specificato solo --env=prod, verrà eseguita la migrazione di entrambi gli ambienti. Se vuoi eseguire la migrazione di un solo ambiente, devi specificare anche specificare un filtro dell'organizzazione --org=org1 o --org=org2.

Utilizzo

Sintassi

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

Nomi delle release di Helm generati

Ogni grafico Helm di cui viene eseguito il deployment su un cluster deve avere un nome di release, che deve essere univoco all'interno di uno spazio dei nomi. I nomi delle release di Helm non hanno alcuna convenzione o restrizione di denominazione relative al nome del grafico. Lo strumento di migrazione genera nomi di release di Helm univoci per ogni componente.

Grafico Cluster a singola organizzazione Cluster multi-organizzazione
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) I nomi hanno il suffisso -env o -env-group se il nome generato è in conflitto con un altro nome generato. Se sono ancora in conflitto, viene aggiunto il suffisso -1 o -2 ….

Personalizzare i nomi delle release di Helm

Lo strumento di migrazione consente la personalizzazione interattiva dei nomi delle release di Helm. Se vuoi personalizzare i nomi delle release di Helm in modo non interattivo:

  1. Esegui lo strumento una volta ed esci al primo prompt per creare un file temporaneo contenente i nomi delle release generati automaticamente. Dovresti vedere una riga simile alla seguente:
    INFO: 21:32:56 using temp file for release names:  /tmp/apigee-helm-migration-1229129207-releaseNames
  2. Sposta o copia e poi modifica questo file. Puoi passare questo file modificato con l'opzione -f quando esegui lo strumento di migrazione. I nomi delle release generati automaticamente sono simili a:

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

    Per personalizzare i nomi delle release di Helm per un'organizzazione, un ambiente o un gruppo di ambienti, modifica il helmReleaseName campo dell'oggetto. Ad esempio, per rinominare la release dell'organizzazione in custom-org, la release dell'ambiente in custom-env e la release del gruppo di ambienti in custom-group, il file risultante sarà simile al seguente:

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

Utilizzare spazi dei nomi personalizzati

Apigee hybrid v1.13 e versioni successive vengono eseguite in un singolo spazio dei nomi Kubernetes. Tutti i componenti ibridi vengono eseguiti in questo spazio dei nomi. apigee è il nome predefinito. Puoi utilizzare qualsiasi spazio dei nomi personalizzato per questi componenti.

Se utilizzi uno spazio dei nomi personalizzato, devi specificarlo con il flag --apigee-namespace my_custom_namespace quando esegui lo strumento di migrazione di Helm.

Devi anche aggiungere la proprietà di primo livello namespace: my_custom_namespace al file di override.

Directions

  1. Individua lo strumento di migrazione.

    Lo strumento di migrazione è incluso in apigeectl in /tools/migration/.

  2. Estrai i file compressi utilizzando uno dei seguenti comandi:

    • 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. Esegui lo strumento di migrazione. Se le opzioni predefinite sono accettabili, è sufficiente eseguire lo strumento senza argomenti e approvare il prompt if the generated helm release names are satisfactory. Di seguito sono riportati alcuni scenari di esempio:
    • Un'installazione semplice, che utilizza il file kubeconfig (~/.kube/config), lo spazio dei nomi apigee predefinito e i nomi delle release di Helm predefiniti.

      Il seguente comando dovrebbe essere sufficiente per la maggior parte, se non tutte, le installazioni. Le operazioni di upgrade di Helm possono essere eseguite per ogni componente dopo l'esecuzione dello strumento.

      ./apigee-helm-migration
      
    • Eseguire la migrazione di tutti i componenti utilizzando uno spazio dei nomi personalizzato:
      ./apigee-helm-migration --apigee-namespace my_custom_namespace
      
    • Eseguire la migrazione solo dei componenti operator e 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!
    • Puntare a un file kubeconfig specifico e specificare un nome diverso per lo spazio dei nomi apigee.

      ./apigee-helm-migration --kubeconfig /abs/path/to/kubeconf --namespace org1_namespace
      
    • Eseguire la migrazione di tutti i componenti, ma solo di una singola organizzazione:

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

    Di seguito è riportato un esempio di output di una migrazione riuscita:

    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!

    Potenziali errori:

    • Error parsing release names file: controlla il file dei nomi delle release passato.
    • Resources not found: verifica che Apigee hybrid sia completamente installato e di disporre delle autorizzazioni per accedere alle apigee risorse.

Modifiche alle proprietà di configurazione

Apporta le seguenti modifiche ai file di override:

  • Apigee hybrid gestito con Helm utilizza le proprietà apigeeIngressGateway per configurare tutti i gateway in entrata Apigee nel cluster. Le proprietà ingressGateways sostituiscono le impostazioni in apigeeIngressGateway per il singolo gateway in entrata denominato.

    Consulta apigeeIngressGateway

    • Modifica tutte le proprietà ingressGateways globali per tutti i gateway in entrata nel cluster in proprietà apigeeIngressGateway. Il file di override deve contenere almeno:
      apigeeIngressGateway:
        image:
          url: "PATH_TO_REPOSITORY/apigee-asm-ingress"
          tag: "TAG"
      

      Ad esempio:

      apigeeIngressGateway:
        image:
          url: "gcr.io/apigee-release/hybrid/apigee-asm-ingress"
          tag: "1.16.9"
      
    • Assicurati di includere ingressGateways.name. È necessario per creare un'istanza del gateway in entrata. Ad esempio:
    • ingressGateways:
        name: INGRESS_GATEWAY_NAME
      
  • Le proprietà per abilitare Workload Identity sono cambiate:
    • gcp.workloadIdentity.enabled sostituisce gcp.workloadIdentityEnabled.
    • Se utilizzi un singolo account di servizio per tutti i componenti, puoi specificarlo con: gcp.workloadIdentity.gsa. Ad esempio:
      gcp:
        workloadIdentity:
          enabled: true
          gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
      
    • Se utilizzi un account di servizio separato per ogni componente (lo standard per la maggior parte delle installazioni di produzione ), specifica l'account di servizio con la proprietà gsa del componente. Ad esempio:
      logger:
        gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
      

    Consulta: gcp.workloadIdentity.enabled, gcp.federatedWorkloadIdentity.enabled, Abilitare Workload Identity su GKE o Abilitare la federazione delle identità per i workload su AKS ed EKS.

Risoluzione dei problemi

Esiste un problema noto con lo strumento di migrazione di Helm nella release ibrida v1.12. Finché il problema non viene risolto, il backup e il ripristino di Cassandra richiedono passaggi aggiuntivi.

Puoi procedere nel seguente modo:

  • Prima o dopo l'esecuzione dello strumento di migrazione
  • Prima di installare i grafici Helm

Per installare la patch per la soluzione alternativa:

  1. Assicurati che il file kubeconfig attuale rimandi al cluster di cui vuoi eseguire la migrazione. Puoi eseguire questi passaggi da qualsiasi directory.
  2. Crea un file denominato migration-operator-patch.yaml con i seguenti contenuti:
    # 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. Crea un file denominato migration-datastore-patch.yaml con i seguenti contenuti:
    # 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. Esegui i seguenti comandi kubectl:
    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. Pulisci i file della patch utilizzando i seguenti comandi:
    rm migration-operator-patch.yaml
    rm migration-datastore-patch.yaml

Passaggio successivo

Continua l'installazione dei grafici Helm di Apigee hybrid seguendo le istruzioni riportate in Installare e gestire Apigee hybrid con i grafici Helm.

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