Apigee ハイブリッドのバージョン 1.3.6 へのアップグレード

バージョン 1.3.6 へのアップグレードの概要

以降のセクションで、Apigee ハイブリッドのアップグレード手順について説明します。

  1. 準備
    1. サービス アカウントを作成して更新する。
    2. 環境グループを計画する。
    3. オーバーライド ファイルをコピーして更新する。
  2. Istio と cert-manager をアップグレードする。
  3. ハイブリッド ランタイム バージョン 1.3 をインストールする。
  4. クリーンアップする。

前提条件

準備

  1. (推奨)バージョン 1.2 の $APIGEECTL_HOME/ ディレクトリのバックアップ コピーを作成します。次に例を示します。
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME
  2. (推奨)Cassandra のバックアップと復元の手順に従って Cassandra データベースをバックアップします。
  3. Kubernetes プラットフォームをアップグレードする方法は次のとおりです。ヘルプが必要な場合は、プラットフォームのドキュメントをご覧ください。
    プラットフォーム アップグレード後のバージョン
    GKE 1.15.x
    Anthos 1.5
    AKS 1.16.x(Anthos アタッチ クラスタを使用)
  4. ハイブリッド インストールで Apigee Connect を使用していない場合は、Apigee Connect を有効にします。
    1. Apigee Connect API が有効になっていることを確認します。
      gcloud services list | grep apigeeconnect
      
      apigeeconnect.googleapis.com         Apigee Connect API
    2. 有効になっていない場合は、この API を有効にします。
      gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID

      ここで、$PROJECT_ID は Google Cloud プロジェクト ID です。

    3. 次の例のように、コマンドラインで gcloud 認証情報を取得します。

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

      トークンにデータが入力されていることを確認するには、次の例のように echo を使用します。

      echo $TOKEN

      エンコードされた文字列としてトークンが表示されるはずです。

      詳細については、gcloud コマンドライン ツールの概要をご覧ください。

    4. 組織で Apigee Connect が有効になっていることを確認します。
      curl -H "Authorization: Bearer $TOKEN" \
        "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"

      ここで、$ORG_NAME は組織の ID です。

      出力を確認します。

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

      Apigee Connect が有効になっています。

    5. Apigee Connect が有効になっていない場合は、Apigee Connect エージェントのロールを MART サービス アカウントに割り当てます。
      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \
        --role roles/apigeeconnect.Agent
    6. 次のコマンドで Apigee Connect を有効にします。
      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"
      

      出力に次の 2 つのプロパティが含まれていれば、Apigee Connect は有効になっています。

            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
      
  5. apigee-watcher サービス アカウントを作成します。Apigee Watcher は、v1.3 で導入された新しいサービス アカウントです。組織レベルの変更がないか Synchronizer を監視し、変更を適用して Istio Ingress を構成します。

    メインのハイブリッド ディレクトリから作成します。

    ./tools/create-service-account apigee-watcher ./service-accounts
  6. Apigee ランタイム エージェントのロールを Watcher サービス アカウントに割り当てます。
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \
      --role roles/apigee.runtimeAgent

    ここで、PROJECT_ID は Google Cloud プロジェクト ID です。サービス アカウントのメールアドレスがこのパターンと異なる場合は、適宜置き換えます。

    出力には、次のようにすべてのサービス アカウントとそれらのロールのリストが含まれます。

      ...
    - members:
      - serviceAccount:apigee-watcher@hybrid13rc5.iam.gserviceaccount.com
      role: roles/apigee.runtimeAgent
      ...
  7. 環境グループのルーティングを計画します。Apigee ハイブリッド 1.3 では、routingRules ではなく、環境グループでベースパス ルーティングを管理します。ハイブリッド構成で routingRules を使用している場合は、ルーティングを複製するように環境を設計します。

    環境グループを 1 つ以上作成する必要があります。

    環境グループについてをご覧ください。

  8. オーバーライド ファイルを更新します。
    1. オーバーライド ファイルのコピーを作成します。
    2. gcpk8sCluster スタンザを更新します。

      ハイブリッド バージョン 1.3 では、次の構成プロパティが置き換えられました。

      • gcpRegiongcp:region に代わりました。
      • gcpProjectIDgcp:projectID に代わりました。
      • gcpProjectIDRuntimegcp:gcpProjectIDRuntime に代わりました。
      • k8sClusterNamek8s:clusterName に代わりました。
      • k8sClusterRegionk8s:clusterRegion に代わりました。

      たとえば、次の構造で

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

      次のように置き換えます。

      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. オーバーライド ファイルに一意のインスタンス ID がない場合は、追加します。
      # unique identifier for this installation. 63 chars length limit
      instanceID: ID

      ID は、このハイブリッド インストールの一意の識別子です(「my-hybrid-131-installation」や「acmecorp-hybrid-131」など)。

    4. オーバーライド ファイルに Watcher(apigee-watcher)サービス アカウントを追加します。
      # Note: the SA should have the "Apigee Runtime Agent" role
      watcher:
       serviceAccountPath: "service account file"
    5. オーバーライド ファイルに Metrics(apigee-metrics)サービス アカウントを追加します。
      metrics:
       serviceAccountPath: "service account file"
    6. virtualhosts: スタンザを更新して、routingRules を実際の環境グループに置き換えます。
      1. -name: 名前を実際の環境グループの名前に置き換えます。環境グループごとに 1 つずつ複数の名前エントリを作成できます。
      2. hostAliases:[] この行を削除します。
      3. sslCertPath: エントリと sslKeyPath: エントリを保持または追加します。
      4. すべての routingRules エントリを削除します。

      次に例を示します。

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

      展開後:

      virtualhosts:
        - name: example-env-group
          sslCertPath: ./certs/keystore.pem
          sslKeyPath: ./certs/keystore.key
    7. mart スタンザと connectAgent: スタンザを更新します。
      1. mart: で、hostAlias:sslCertPath:sslKeyPath: のエントリを削除します。
      2. connectAgent: スタンザを追加します。
      3. connectAgent: の下に serviceAccountPath: エントリを追加し、Apigee Connect エージェントのロールが割り当てられているサービス アカウント(通常は MART サービス アカウント)のパスを指定します。

      次に例を示します。

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

      以下のようになります。

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

Istio と cert-manager をアップグレードする

Apigee ハイブリッド バージョン 1.3 では、証明書と Anthos Service Mesh(ASM)バージョン 1.5.7 以降で提供される Istio ディストリビューションの管理と検証を行い、ランタイム Ingress ゲートウェイの作成と管理を行うために、cert-manager v0.14.2 が必要です。

Istio 1.4.6 を ASM 1.5.7 以降にアップグレードする

  1. ダウンタイムを最小限に抑えるために、Istio のデプロイと HPA に 2 つ以上のレプリカが必要です。次のコマンドを実行して、レプリカの数を確認します。
    kubectl -n istio-system get deployments # list of deployments
    kubectl -n istio-system get hpa # list of hpa
  2. レプリカが 1 つしかないデプロイを編集し、replicas:2 以上に変更します。
    kubectl -n istio-system edit deployment name

    次に例を示します。

    spec:
      progressDeadlineSeconds: 600
      replicas: 2
  3. レプリカが 1 つしかない HPA を編集し、minReplicas:2 以上に変更します。
    kubectl -n istio-system edit hpa name

    次に例を示します。

    spec:
      maxReplicas: 5
      minReplicas: 2
    
  4. ASM をダウンロードしてインストールするの手順に沿って、ASM をダウンロードしてインストールします。
  5. インストールが完了したら、version コマンドを実行して、1.5.x が正しくインストールされていることを確認します。
    ./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)

cert-manager をアップグレードする

  1. 現在の cert-manager のデプロイを削除します。
    kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
  2. Kubernetes のバージョンを確認します。
    kubectl version
  3. 次のコマンドを実行して、Jetstack から cert-manager をインストールします。
    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml 

ハイブリッド ランタイムをインストールする

  1. 最新のバージョン番号を変数に格納します。
    export VERSION=$(curl -s \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1)
  2. 変数にバージョン番号が挿入されていることを確認します。別のバージョンを使用する場合は、そのバージョンを環境変数に保存します。次に例を示します。
    echo $VERSION
      1.3.6
  3. ご使用のオペレーティング システムに対応したリリース パッケージをダウンロードします。

    Mac 64 ビット:

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

    Linux 64 ビット:

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

    Mac 32 ビット:

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

    Linux 32 ビット:

    curl -LO \
        https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/$VERSION/apigeectl_linux_32.tar.gz
  4. 現在の apigeectl/ ディレクトリをバックアップ ディレクトリ名に変更します。次に例を示します。
    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/ 
  5. ダウンロードした gzip ファイルの内容をハイブリッドのベース ディレクトリに展開します。次に例を示します。

    tar xvzf filename.tar.gz -C hybrid-base-directory
  6. cd でベース ディレクトリに移動します。
  7. デフォルトでは、tar の内容が展開されるディレクトリの名前には、バージョンとプラットフォームが含まれています。たとえば、./apigeectl_1.0.0-f7b96a8_linux_64 のようになります。このディレクトリの名前を apigeectl に変更します。

    mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl
  8. apigee-system から apigee-resources-install ジョブを削除します。
    kubectl -n apigee-system delete job apigee-resources-install
  9. 古い CRD を削除します。
    kubectl delete crd apigeetelemetries.apigee.cloud.google.com
  10. externalSeedHost プロパティを使用して、オーバーライド ファイルの cassandra: スタンザを更新します。このプロパティにより、新しいハイブリッド バージョン 1.3.6 のインストールでバージョン 1.2 のインストールと同じ Kubernetes クラスタが使用されるようになります。これは、ハイブリッド バージョン 1.2 からバージョン 1.3.6 以降にアップグレードする場合にのみ必要になる 1 回限りの手順です。
    1. 1.2.0 のインストールをアップグレードするのと同じ Kubernetes クラスタで、既存の Cassandra の IP アドレスを探します。
      kubectl -n namespace get pods -o wide

      ここで、namespace は Apigee ハイブリッドの名前空間です。

      Cassandra ノードの IP アドレスをメモしておきます。次に例を示します。

      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. externalSeedHost プロパティの値を追加します。
      cassandra:
       externalSeedHost: Cassandra_node_IP

      ここで、Cassandra_node_IP は Cassandra ノードの IP です(前述の例では 10.68.8.24)。

  11. 新しい apigeectl/ ディレクトリで、apigeectl initapigeectl applyapigeectl check-ready を実行します。
    1. ハイブリッド 1.3.6 を初期化します。
      apigeectl init -f overrides_1.3.yaml

      ここで、overrides_1.3.yaml は編集した overrides.yaml ファイルです。

    2. ハイブリッド バージョン 1.3 では、--dry-run フラグの構文は、実行している kubectl のバージョンによって異なります。kubectl のバージョンを確認します。
      gcloud version
    3. ドライランでエラーを確認します。

      kubectl バージョン 1.17 以前:

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

      kubectl バージョン 1.18 以降:

      apigeectl apply -f overrides_1.3.yaml --dry-run=client
    4. オーバーライドを適用します。インストール先の環境に応じて、本番環境またはデモ / 試験運用環境の手順を選択して行います。

      本番環境

      本番環境では、ハイブリッド コンポーネントを個別にアップグレードし、アップグレードされたコンポーネントのステータスを確認してから次のコンポーネントに進んでください。

      1. オーバーライドを適用して Cassandra をアップグレードします。
        apigeectl apply -f overrides_1.3.yaml --datastore
      2. 完了を確認します。
        kubectl -n namespace get pods

        ここで、namespace は Apigee ハイブリッドの名前空間です。

        Pod の準備ができた場合にのみ、次の手順に進みます。

      3. オーバーライドを適用してテレメトリー コンポーネントをアップグレードし、完了を確認します。
        apigeectl apply -f overrides_1.3.yaml --telemetry
        kubectl -n namespace get pods
      4. オーバーライドを適用して、組織レベルのコンポーネント(MART、Watcher、Apigee Connect)をアップグレードし、完了を確認します。
        apigeectl apply -f overrides_1.3.yaml --org
        kubectl -n namespace get pods
      5. オーバーライドを適用して環境をアップグレードします。次の 2 つの選択肢があります。
        • 一度に 1 つの環境にオーバーライドを適用して、完了を確認します。環境ごとにこの手順を繰り返します。
          apigeectl apply -f overrides_1.3.yaml --env env_name
          kubectl -n namespace get pods

          ここで、env_name はアップグレードする環境の名前です。

        • すべての環境にオーバーライドを一度に適用して、完了を確認します。
          apigeectl apply -f overrides_1.3.yaml --all-envs
          kubectl -n namespace get pods

      デモ / 試験運用

      ほとんどのデモまたは試験運用環境では、すべてのコンポーネントにオーバーライドを一度に適用できます。デモ / 試験運用環境が大規模で複雑な場合や本番環境に酷似している場合は、本番環境のアップグレード手順を使用します。

      1. apigeectl apply -f overrides_1.3.yaml
      2. ステータスを確認します。
        apigeectl check-ready -f overrides_1.3.yaml

      詳細については、GKE ハイブリッドの設定 - ステップ 5: GKE にハイブリッドをインストールするをご覧ください。

    5. ハイブリッド 1.3 を設定して実行したら、すべての Cassandra ノード(古いノードと新しいノード)が同じ Cassandra クラスタに含まれていることを確認します。いずれかの Cassandra ノードで次のコマンドを実行します。
      kubectl -n namespace get pods
      kubectl -n namespace exec old Cassandra pod -- nodetool status

      次の出力例では、10.68.8.24 はバージョン 1.2.0 からの出力で、externalSeedHost として使用されたノード IP です。10.68.7.11 はバージョン 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

      これらが同じクラスタ内にない場合は、externalSeedHost の値を確認してください。

    6. すべての Pod が稼働状態になったら、オーバーライド ファイルから externalSeedHost を削除し、--datastore オプションを指定して apigeectl apply を再度実行します。
      apigeectl apply --datastore -f overrides_1.3.6.yaml

    クリーンアップ

    すべての Pod が正常に稼働していて、ASM エンドポイントが新しいインストールに対して有効であることを確認したら、クリーンアップできます。

    • ハイブリッド 1.2 のリソース。
    • 古い Cassandra インスタンス。
    • Istio 1.4.6 のリソース。

    ハイブリッド 1.2.0 リソースを削除する

    1. 1.2.0 仮想ホストのルーティングの詳細を削除します。
      $APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml

      ここで、$APIGEECTL_HOME-v1.2apigeectl バージョン 1.2 ディレクトリをバックアップしたディレクトリです。

    2. エンドポイントが期待どおりに動作しており、すべての 1.3.0 コンポーネントが動作していることを確認したら、次のコマンドを実行してハイブリッド 1.2.0 リソースを削除します。
      $APIGEECTL_HOME-v1.2/apigeectl delete -c "mart,connect-agent,synchronizer,runtime,udca,metrics,logger" \
        -f 1.2.0_overrides.yaml

    古い Cassandra インスタンスを無効にする

    1. 新しくインストールされた apigeectl ディレクトリに cd を実行します。
    2. tools/cas_cleanup.sh スクリプトを実行します。

      このスクリプトは、Cassandra リングから古い Cassandra Pod を無効にして、古い STS を削除し、PVC を削除します。

      bash cas_cleanup.sh Apigee namespace

    Istio バージョン 1.4.6 リソースを削除する

    1. 最新の Istio v.1.4.6 リソースを削除するには、次のコマンドを実行します。
      kubectl delete all -n istio-system --selector \
        'app in (apigee-mart-istio-ingressgateway, galley, security, istio-nodeagent, istio-mixer, sidecarInjectorWebhook, istio-mixer)'
    2. 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

    これで完了です。Apigee ハイブリッド バージョン 1.3.6 に正常にアップグレードされました。