Atualizar o Apigee Hybrid para a versão 1.3.6

Se estiver a atualizar a partir da versão 1.0 ou 1.1 do Apigee hybrid, tem de atualizar primeiro para a versão 1.2 antes de atualizar para a versão 1.3.6. Consulte as instruções para atualizar o Apigee Hybrid para a versão 1.2.

Atualização para a versão 1.3.6: vista geral.

Os procedimentos para atualizar o Apigee hybrid estão organizados nas seguintes secções:

  1. Preparação
    1. Criar e atualizar contas de serviço.
    2. Planeie grupos de ambientes.
    3. Copie e atualize o ficheiro de substituições.
  2. Atualize o Istio e o cert-manager.
  3. Instale a versão 1.3 do tempo de execução híbrido.
  4. Limpar.

Pré-requisito

Preparação

  1. (Recomendado) Faça uma cópia de segurança do diretório $APIGEECTL_HOME/ da versão 1.2. Por exemplo:
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME
  2. (Recomendado) Faça uma cópia de segurança da base de dados Cassandra seguindo as instruções em Cópia de segurança e recuperação do Cassandra
  3. Atualize a sua plataforma Kubernetes da seguinte forma. Siga a documentação da sua plataforma se precisar de ajuda:
    Plataforma Atualize para a versão
    GKE 1.15.x
    Anthos 1,5
    AKS 1.16.x com clusters associados do Anthos
  4. Se não estiver a usar o Apigee Connect na sua instalação híbrida, ative o Apigee Connect.
    1. Verifique se a API Apigee Connect está ativada:
      gcloud services list | grep apigeeconnect
      
      apigeeconnect.googleapis.com         Apigee Connect API
    2. Se não estiver, ative a API:
      gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID

      Em que $PROJECT_ID é o ID do seu projeto do Google Cloud.

    3. Na linha de comandos, obtenha as suas gcloud credenciais de autenticação, como mostra o exemplo seguinte:

      TOKEN=$(gcloud auth print-access-token)

      Para verificar se o token foi preenchido, use echo, como mostra o exemplo seguinte:

      echo $TOKEN

      Esta ação deve apresentar o seu token como uma string codificada.

      Para mais informações, consulte a vista geral da ferramenta de linhas de comando gcloud.

    4. Verifique se o Apigee Connect está ativado para a sua organização:
      curl -H "Authorization: Bearer $TOKEN" \
        "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"

      Em que $ORG_NAME é o ID da sua organização.

      Se a saída contiver:

            "name" : "features.mart.connect.enabled",
            "value" : "true"

      O Apigee Connect está ativado.

    5. Se o Apigee Connect não estiver ativado, atribua a função Agente do Apigee Connect à conta de serviço MART:
      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \
        --role roles/apigeeconnect.Agent
    6. Ative o Apigee Connect com o seguinte comando:
      curl -H "Authorization: Bearer $TOKEN" -X PUT \
        -H "Content-Type: application/json" \
        -d '{
          "name" : "'"$ORG_NAME"'",
          "properties" : {
            "property" : [ {
              "name" : "features.hybrid.enabled",
              "value" : "true"
            }, {
              "name" : "features.mart.connect.enabled",
              "value" : "true"
            } ]
          }
        }' \
        "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"
      

      Se o resultado contiver as duas propriedades seguintes, o Apigee Connect foi ativado com êxito:

            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
      
  5. Crie a conta de serviço apigee-watcher. O Apigee Watcher é uma conta de serviço nova introduzida na v1.3. Monitoriza o sincronizador para alterações ao nível da organização e aplica essas alterações para configurar o acesso de entrada do Istio.

    A partir do diretório híbrido principal:

    ./tools/create-service-account apigee-watcher ./service-accounts
  6. Atribua a função de agente do Apigee Runtime à conta de serviço do observador:
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \
      --role roles/apigee.runtimeAgent

    Em que PROJECT_ID é o ID do seu projeto do Google Cloud. Se os endereços de email da sua conta de serviço forem diferentes deste padrão, substitua-os em conformidade.

    O resultado deve incluir uma lista de todas as contas de serviço e respetivas funções, incluindo:

      ...
    - members:
      - serviceAccount:apigee-watcher@hybrid13rc5.iam.gserviceaccount.com
      role: roles/apigee.runtimeAgent
      ...
  7. Planeie os seus grupos de ambientes para o encaminhamento. O Apigee hybrid 1.3 gere o encaminhamento do caminho base com grupos de ambientes em vez de routingRules. Se estiver a usar o routingRules na sua configuração híbrida, crie grupos de ambientes para replicar o seu encaminhamento.

    Tem de criar, pelo menos, um grupo de ambientes.

    Consulte o artigo Acerca dos grupos de ambientes.

  8. Atualize o ficheiro de substituições:
    1. Crie uma cópia do ficheiro de substituições.
    2. Atualize as secções gcp e k8sCluster.

      As seguintes propriedades de configuração foram substituídas na versão híbrida 1.3:

      • gcpRegion substituído por gcp:region
      • gcpProjectID substituído por gcp:projectID
      • gcpProjectIDRuntime substituído por gcp:gcpProjectIDRuntime
      • k8sClusterName substituído por k8s:clusterName
      • k8sClusterRegion substituído por k8s:clusterRegion

      Por exemplo, substitua a seguinte estrutura:

      gcpRegion: gcp region
      gcpProjectID: gcp project ID
      gcpProjectIDRuntime: gcp project ID
      
      k8sClusterName: name
      k8sClusterRegion: region

      com:

      gcp:
       projectID: gcp project ID
       region: gcp region
       gcpProjectIDRuntime: gcp project ID # optional. This is only required if you
                                             # want logger/metrics data to be sent in
                                             # different gcp project.
      
      k8sCluster:
       name: gcp project ID
       region: gcp region
      
    3. Se ainda não tiver um identificador de instância exclusivo no ficheiro de substituições, adicione um:
      # unique identifier for this installation. 63 chars length limit
      instanceID: ID

      Onde ID é um identificador exclusivo desta instalação híbrida, como "my-hybrid-131-installation" ou "acmecorp-hybrid-131".

    4. Adicione a conta de serviço do observador (apigee-watcher) ao ficheiro de substituições:
      # Note: the SA should have the "Apigee Runtime Agent" role
      watcher:
       serviceAccountPath: "service account file"
    5. Adicione a conta de serviço das métricas (apigee-metrics) ao ficheiro de substituições:
      metrics:
       serviceAccountPath: "service account file"
    6. Atualize a secção virtualhosts: para substituir routingRules pelo seu grupo de ambiente.
      1. -name: Substitua o nome pelo nome do seu grupo de ambientes. Pode ter várias entradas de nomes, uma para cada grupo de ambientes.
      2. hostAliases:[] Eliminar esta linha.
      3. Mantenha (ou adicione) as entradas sslCertPath: e sslKeyPath:.
      4. Elimine todas as entradas routingRules.

      Por exemplo:

      virtualhosts:
        - name: default
          hostAliases:
            - "*.acme.com"
          sslCertPath: ./certs/keystore.pem
          sslKeyPath: ./certs/keystore.key
          routingRules:
            - paths:
              - /foo
              - /bar
            - env: my-environment

      Passa a:

      virtualhosts:
        - name: example-env-group
          sslCertPath: ./certs/keystore.pem
          sslKeyPath: ./certs/keystore.key
    7. Atualize as linhas mart e connectAgent:.
      1. Em mart:, remova as entradas hostAlias:, sslCertPath: e sslKeyPath:.
      2. Adicione uma secção connectAgent:.
      3. Em connectAgent:, adicione uma entrada serviceAccountPath: e indique o caminho para o ficheiro da conta de serviço que tem a função de agente do Apigee Connect atribuída (normalmente, a conta de serviço MART).

      Por exemplo:

      mart:
        hostAlias: "mart.apigee-hybrid-docs.net"
        serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json
        sslCertPath: ./certs/fullchain.pem
        sslKeyPath: ./certs/privkey.key

      Passa a:

      mart:
        serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json
      
      connectAgent:
        serviceAccountPath: ./service-accounts/hybrid-project-apigee-mart.json

Atualize o Istio e o cert-manager

A versão 1.3 do Apigee hybrid requer o cert-manager v0.14.2 para gerir e validar certificados e a distribuição do Istio fornecida com a versão 1.5.7 (ou mais recente) do Anthos Service Mesh (ASM) para criar e gerir o gateway de entrada em tempo de execução.

Atualize o Istio 1.4.6 para o ASM 1.5.7 (ou mais recente)

  1. Para minimizar o tempo de inatividade, as implementações do Istio e os HPAs têm de ter, pelo menos, duas réplicas cada. Execute os seguintes comandos para determinar o número de réplicas:
    kubectl -n istio-system get deployments # list of deployments
    kubectl -n istio-system get hpa # list of hpa
  2. Edite cada implementação que tenha apenas uma réplica e aumente o valor de replicas: para 2 ou mais:
    kubectl -n istio-system edit deployment name

    Por exemplo:

    spec:
      progressDeadlineSeconds: 600
      replicas: 2
  3. Edite cada HPA que tenha apenas uma réplica e aumente o valor de minReplicas: para 2 ou mais:
    kubectl -n istio-system edit hpa name

    Por exemplo:

    spec:
      maxReplicas: 5
      minReplicas: 2
    
  4. Transfira e instale o ASM seguindo as instruções de instalação em Transferir e instalar o ASM.
  5. Após a instalação, execute o comando de versão para se certificar de que tem a versão 1.5.x instalada corretamente:
    ./bin/istioctl version
    
    client version: 1.5.8-asm.0
    apigee-mart-ingressgateway version:
    citadel version: 1.4.6
    galley version: 1.4.6
    ingressgateway version: 1.5.8-asm.0
    pilot version: 1.4.6
    policy version: 1.4.6
    sidecar-injector version: 1.4.6
    telemetry version: 1.4.6
    pilot version: 1.5.8-asm.0
    data plane version: 1.4.6 (1 proxies), 1.5.8-asm.0 (2 proxies)

Atualize o cert-manager

  1. Elimine a implementação atual do cert-manager:
    kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
  2. Valide a sua versão do Kubernetes:
    kubectl version
  3. Execute o seguinte comando para instalar o cert-manager a partir do Jetstack:
    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml 

Instale o tempo de execução híbrido

  1. Armazene o número da versão mais recente numa variável:
    export VERSION=$(curl -s \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1)
  2. Verifique se a variável foi preenchida com um número de versão. Se quiser usar uma versão diferente, pode guardá-la na variável de ambiente. Por exemplo:
    echo $VERSION
      1.3.6
  3. Transfira o pacote de lançamento para o seu sistema operativo:

    Mac 64 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_64.tar.gz

    Linux de 64 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_64.tar.gz

    Mac de 32 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_mac_32.tar.gz

    Linux de 32 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_32.tar.gz
  4. Mude o nome do diretório apigeectl/ atual para um nome de diretório de cópia de segurança. Por exemplo:
    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/ 
  5. Extraia o conteúdo do ficheiro gzip transferido para o diretório de base híbrido. Por exemplo:

    tar xvzf filename.tar.gz -C hybrid-base-directory
  6. cd para o diretório base.
  7. Por predefinição, o conteúdo do TAR é expandido para um diretório com a versão e a plataforma no respetivo nome. Por exemplo: ./apigeectl_1.0.0-f7b96a8_linux_64. Mude o nome desse diretório para apigeectl:

    mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl
  8. Elimine a tarefa apigee-resources-install de apigee-system:
    kubectl -n apigee-system delete job apigee-resources-install
  9. Elimine o CRD mais antigo:
    kubectl delete crd apigeetelemetries.apigee.cloud.google.com
  10. Atualize a secção cassandra: no ficheiro de substituições com uma propriedade externalSeedHost. Esta propriedade ajuda a garantir que a nova instalação da versão 1.3.6 híbrida usa o mesmo cluster do Kubernetes que a instalação da versão 1.2. Este é um passo único necessário apenas para a atualização da versão híbrida 1.2 para a versão 1.3.6 (ou mais recente).
    1. Encontre um dos endereços IP do Cassandra existente no mesmo cluster do Kubernetes onde está a atualizar a instalação da versão 1.2.0.
      kubectl -n namespace get pods -o wide

      Onde namespace é o seu espaço de nomes híbrido do Apigee.

      Tome nota do endereço IP de um nó do Cassandra. Por exemplo:

      kubectl -n apigee get pods -o wide
      NAME                  READY   STATUS    RESTARTS   AGE   IP          NODE
      apigee-cassandra-0    1/1     Running   0          33d   10.68.8.24   gke-example-cluster-rc5-apigee-data-c8bf1234-09kc
      apigee-cassandra-1    1/1     Running   0          16d   10.68.8.33   gke-example-cluster-rc5-apigee-data-c9221ee7-10kc
      apigee-cassandra-2    1/1     Running   0          23h   10.68.9.11   gke-example-cluster-rc5-apigee-data-d123e456-11kc
    2. Adicione o valor da propriedade externalSeedHost:
      cassandra:
       externalSeedHost: Cassandra_node_IP

      Onde Cassandra_node_IP é o IP do nó do Cassandra (10.68.8.24 no exemplo anterior).

  11. No diretório new apigeectl/, execute apigeectl init, apigeectl apply e apigeectl check-ready:
    1. Inicialize o híbrido 1.3.6:
      apigeectl init -f overrides_1.3.yaml

      Onde overrides_1.3.yaml é o seu ficheiro overrides.yaml editado.

    2. Na versão híbrida 1.3, a sintaxe da flag --dry-run depende da versão do kubectl que está a usar. Verifique a versão do kubectl:
      gcloud version
    3. Verifique se existem erros com um teste:

      kubectl versão 1.17 e mais antigas:

      apigeectl apply -f overrides_1.3.yaml --dry-run=true

      kubectl versão 1.18 e mais recentes:

      apigeectl apply -f overrides_1.3.yaml --dry-run=client
    4. Aplique as substituições. Selecione e siga as instruções para ambientes de produção ou ambientes de demonstração/experimentais, consoante a sua instalação.

      Produção

      Para ambientes de produção, deve atualizar cada componente híbrido individualmente e verificar o estado do componente atualizado antes de avançar para o componente seguinte.

      1. Aplique as substituições para atualizar o Cassandra:
        apigeectl apply -f overrides_1.3.yaml --datastore
      2. Conclusão da verificação:
        kubectl -n namespace get pods

        Onde namespace é o seu espaço de nomes híbrido do Apigee.

        Avance para o passo seguinte apenas quando os pods estiverem prontos.

      3. Aplique as substituições para atualizar os componentes de telemetria e verifique a conclusão:
        apigeectl apply -f overrides_1.3.yaml --telemetry
        kubectl -n namespace get pods
      4. Aplique as substituições para atualizar os componentes ao nível da organização (MART, Watcher e Apigee Connect) e verifique a conclusão:
        apigeectl apply -f overrides_1.3.yaml --org
        kubectl -n namespace get pods
      5. Aplique as substituições para atualizar os seus ambientes. Tem 2 opções:
        • Aplique as substituições a um ambiente de cada vez e verifique a conclusão. Repita este passo para cada ambiente:
          apigeectl apply -f overrides_1.3.yaml --env env_name
          kubectl -n namespace get pods

          Em que env_name é o nome do ambiente que está a atualizar.

        • Aplique as substituições a todos os ambientes de uma só vez e verifique a conclusão:
          apigeectl apply -f overrides_1.3.yaml --all-envs
          kubectl -n namespace get pods

      Demonstração/experimental

      Na maioria dos ambientes de demonstração ou experimentais, pode aplicar as substituições a todos os componentes de uma só vez. Se o seu ambiente de demonstração/experimental for grande e complexo ou imitar de perto um ambiente de produção, é recomendável usar as instruções para atualizar ambientes de produção

      1. apigeectl apply -f overrides_1.3.yaml
      2. Verifique o estado:
        apigeectl check-ready -f overrides_1.3.yaml

      Para mais instruções, consulte o artigo Configuração híbrida do GKE – Passo 5: instale o híbrido no GKE.

    5. Assim que tiver a configuração híbrida 1.3 a funcionar, verifique se todos os nós do Cassandra (antigos e novos) fazem parte do mesmo cluster do Cassandra. Execute o seguinte comando num dos nós do Cassandra:
      kubectl -n namespace get pods
      kubectl -n namespace exec old Cassandra pod -- nodetool status

      No exemplo de saída seguinte, 10.68.8.24 é da versão 1.2.0 e é o IP do nó que usou como externalSeedHost. 10.68.7.11 é da versão 1.3.6:

      Datacenter: dc-1
      ================
      Status=Up/Down
      |/ State=Normal/Leaving/Joining/Moving
      --  Address     Load        Tokens       Owns (effective)  Host ID                               Rack
      UN  10.68.8.24  379.41 KiB  256          50.8%             11bbd43b-af64-464b-a96d-0d6dd0521de1  ra-1
      UN  10.68.7.11  1.35 MiB    256          49.2%             0b4d9e08-f353-413a-b4a9-7d18a8d07e58  ra-1

      Se não estiverem no mesmo cluster, verifique o valor de externalSeedHost.

    6. Quando todos os pods estiverem em funcionamento, remova externalSeedHost do ficheiro de substituições e execute apigeectl apply novamente com a opção --datastore:
      apigeectl apply --datastore -f overrides_1.3.6.yaml

    Limpar

    Depois de verificar que todos os pods estão em funcionamento e em bom estado, e que os pontos finais do ASM são válidos para a nova instalação, pode limpar:

    • Recursos híbridos 1.2.
    • A instância mais antiga do Cassandra
    • Recursos do Istio 1.4.6.

    Elimine recursos do Hybrid 1.2.0

    1. Remova os detalhes de encaminhamento do anfitrião virtual 1.2.0:
      $APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml

      Onde $APIGEECTL_HOME-v1.2 é o diretório onde fez uma cópia de segurança do diretório da versão 1.2 de apigeectl.

    2. Se o ponto final continuar a funcionar como esperado e tiver validado que todos os componentes 1.3.0 estão a funcionar, execute o seguinte comando para eliminar os recursos híbridos 1.2.0:
      $APIGEECTL_HOME-v1.2/apigeectl delete -c "mart,connect-agent,synchronizer,runtime,udca,metrics,logger" \
        -f 1.2.0_overrides.yaml

    Desative a instância do Cassandra mais antiga

    1. cd para o diretório apigeectl recém-instalado.
    2. Execute o tools/cas_cleanup.shscript.

      Este script desativa o pod do Cassandra antigo do anel do Cassandra, elimina o STS antigo e elimina os PVCs.

      bash cas_cleanup.sh Apigee namespace

    Elimine recursos do Istio versão 1.4.6

    1. Execute o seguinte comando para eliminar os recursos do Istio v.1.4.6 mais recentes:
      kubectl delete all -n istio-system --selector \
        'app in (apigee-mart-istio-ingressgateway, galley, security, istio-nodeagent, istio-mixer, sidecarInjectorWebhook, istio-mixer)'
    2. Execute os seguintes comandos para eliminar tarefas mais antigas da instalação do Istio 1.4.6:
      kubectl -n istio-system delete job istio-init-crd-10-1.4.6
      kubectl -n istio-system delete job istio-init-crd-11-1.4.6
      kubectl -n istio-system delete job istio-init-crd-14-1.4.6

    Parabéns! Atualizou com êxito para a versão 1.3.6 do Apigee Hybrid.