バージョン 1.3.6 へのアップグレードの概要
以降のセクションでは、Apigee Hybrid のアップグレード手順を次の順番で説明します。
- 準備
- サービス アカウントを作成して更新する。
- 環境グループを計画する。
- オーバーライド ファイルをコピーして更新する。
- Istio と cert-manager をアップグレードする。
- ハイブリッド ランタイム バージョン 1.3 をインストールする。
- クリーンアップする。
前提条件
- Apigee ハイブリッド バージョン 1.2。以前のバージョンから更新する場合は、Apigee ハイブリッド バージョン 1.2 へのアップグレードをご覧ください。
準備
- (推奨)バージョン 1.2 の
$APIGEECTL_HOME/
ディレクトリのバックアップを作成します。次に例を示します。tar -czvf $APIGEECTL_HOME/../apigeectl-v1.2-backup.tar.gz $APIGEECTL_HOME
- (推奨)Cassandra のバックアップと復元の手順に従って Cassandra データベースをバックアップします。
- Kubernetes プラットフォームをアップグレードする方法は次のとおりです。ヘルプが必要な場合は、プラットフォームのドキュメントをご覧ください。
プラットフォーム アップグレード後のバージョン GKE 1.15.x Anthos 1.5 AKS Anthos アタッチ クラスタを使用する 1.16.x - ハイブリッド インストールで Apigee Connect を使用していない場合は、Apigee Connect を有効にします。
- Apigee Connect API が有効になっていることを確認します。
gcloud services list | grep apigeeconnect apigeeconnect.googleapis.com Apigee Connect API
- 有効になっていない場合は、この API を有効にします。
gcloud services enable apigeeconnect.googleapis.com --project $PROJECT_ID
ここで、$PROJECT_ID は Google Cloud プロジェクト ID です。
-
次の例のように、コマンドラインで
gcloud
認証情報を取得します。TOKEN=$(gcloud auth print-access-token)
トークンにデータが入力されていることを確認するには、次の例のように
echo
を使用します。echo $TOKEN
エンコードされた文字列としてトークンが表示されるはずです。
詳細については、gcloud コマンドライン ツールの概要をご覧ください。
- 組織で 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 が有効になっています。
- 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
- 次のコマンドで 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" }
- Apigee Connect API が有効になっていることを確認します。
apigee-watcher
サービス アカウントを作成します。Apigee Watcher は、v1.3 で導入された新しいサービス アカウントです。Synchronizer は組織レベルの変更を考慮して、それらの変更を適用して Istio Ingress を構成します。メインのハイブリッド ディレクトリから:
./tools/create-service-account apigee-watcher ./service-accounts
- 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 ...
- 環境グループのルーティングを計画します。Apigee ハイブリッド 1.3 では、
routingRules
ではなく、環境グループでベースパス ルーティングを管理します。ハイブリッド構成でroutingRules
を使用している場合は、ルーティングを複製するように環境を設計します。環境グループを 1 つ以上作成する必要があります。
環境グループについてをご覧ください。
- オーバーライド ファイルを更新します。
- オーバーライド ファイルのコピーを作成します。
- gcp と k8sCluster スタンザを更新します。
ハイブリッド バージョン 1.3 では、次の構成プロパティが置き換えられました。
gcpRegion
がgcp:region
に代わりました。gcpProjectID
がgcp:projectID
に代わりました。gcpProjectIDRuntime
がgcp:gcpProjectIDRuntime
に代わりました。k8sClusterName
がk8s:clusterName
に代わりました。k8sClusterRegion
がk8s: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
- オーバーライド ファイルに一意のインスタンス ID がない場合は、追加します。
# unique identifier for this installation. 63 chars length limit instanceID: ID
ID は、このハイブリッド インストールの一意の識別子です(「
my-hybrid-131-installation
」や「acmecorp-hybrid-131
」など)。 - オーバーライド ファイルに Watcher(
apigee-watcher
)サービス アカウントを追加します。# Note: the SA should have the "Apigee Runtime Agent" role watcher: serviceAccountPath: "service account file"
- オーバーライド ファイルに Metrics(
apigee-metrics
)サービス アカウントを追加します。metrics: serviceAccountPath: "service account file"
virtualhosts:
スタンザを更新して、routingRules
を実際の環境グループに置き換えます。-name:
名前を実際の環境グループの名前に置き換えます。環境グループごとに 1 つずつ複数の名前エントリを作成できます。hostAliases:[]
この行を削除します。sslCertPath:
エントリとsslKeyPath:
エントリを保持または追加します。- すべての
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
mart
スタンザとconnectAgent:
スタンザを更新します。mart:
で、hostAlias:
、sslCertPath:
、sslKeyPath:
のエントリを削除します。connectAgent:
スタンザを追加します。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 以降にアップグレードする
- ダウンタイムを最小限に抑えるために、Istio のデプロイと HPA に 2 つ以上のレプリカが必要です。次のコマンドを実行して、レプリカの数を確認します。
kubectl -n istio-system get deployments # list of deployments
kubectl -n istio-system get hpa # list of hpa
- レプリカが 1 つしかないデプロイを編集し、
replicas:
を2
以上に変更します。kubectl -n istio-system edit deployment name
次に例を示します。
spec: progressDeadlineSeconds: 600 replicas: 2
- レプリカが 1 つしかない HPA を編集し、
minReplicas:
を2
以上に変更します。kubectl -n istio-system edit hpa name
次に例を示します。
spec: maxReplicas: 5 minReplicas: 2
- ASM をダウンロードしてインストールするの手順に従って、ASM をダウンロードしてインストールします。
- インストールが完了したら、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 をアップグレードする
- 現在の cert-manager のデプロイを削除します。
kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
- Kubernetes のバージョンを確認します。
kubectl version
- 次のコマンドを実行して、Jetstack から cert-manager をインストールします。
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.2/cert-manager.yaml
ハイブリッド ランタイムをインストールする
- 最新のバージョン番号を変数に保存します。
export VERSION=$(curl -s \ https://storage.googleapis.com/apigee-public/apigee-hybrid-setup/current-version.txt?ignoreCache=1)
- 変数にバージョン番号が挿入されていることを確認します。別のバージョンを使用する場合は、そのバージョンを環境変数に保存します。次に例を示します。
echo $VERSION 1.3.6
ご使用のオペレーティング システムに対応したリリース パッケージをダウンロードします。
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
- 現在の
apigeectl/
ディレクトリをバックアップ ディレクトリ名に変更します。次に例を示します。mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/
-
ダウンロードした gzip ファイルの内容をハイブリッドのベース ディレクトリに展開します。次に例を示します。
tar xvzf filename.tar.gz -C hybrid-base-directory
cd
でベース ディレクトリに移動します。-
デフォルトでは、tar の内容が展開されるディレクトリの名前には、バージョンとプラットフォームが含まれています。例:
./apigeectl_1.0.0-f7b96a8_linux_64
。このディレクトリの名前をapigeectl
に変更します。mv apigeectl_1.0.0-f7b96a8_linux_64 apigeectl
apigee-system
からapigee-resources-install
ジョブを削除します。kubectl -n apigee-system delete job apigee-resources-install
- 古い CRD を削除します。
kubectl delete crd apigeetelemetries.apigee.cloud.google.com
externalSeedHost
プロパティを使用して、オーバーライド ファイルのcassandra:
スタンザを更新します。このプロパティにより、新しいハイブリッド バージョン 1.3.6 のインストールで、バージョン 1.2 のインストールと同じ Kubernetes クラスタが使用されるようになります。これは、ハイブリッド バージョン 1.2 からバージョン 1.3.6(または 1.3.6 以降)にアップグレードする場合にのみ必要になる 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
externalSeedHost
プロパティの値を追加します。cassandra: externalSeedHost: Cassandra_node_IP
ここで、Cassandra_node_IP は Cassandra ノードの IP です(上記の例では
10.68.8.24
)。
- 1.2.0 のインストールをアップグレードするのと同じ Kubernetes クラスタで、既存の Cassandra の IP アドレスを探します。
- 新しい
apigeectl/
ディレクトリで、apigeectl init
、apigeectl apply
、apigeectl check-ready
を実行します。- ハイブリッド 1.3.6 を初期化します。
apigeectl init -f overrides_1.3.yaml
ここで、overrides_1.3.yaml は編集した overrides.yaml ファイルです。
- ハイブリッド バージョン 1.3 では、
--dry-run
フラグの構文は、実行しているkubectl
のバージョンによって異なります。kubectl
のバージョンを確認します。gcloud version
- ドライランでエラーを確認します。
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
- オーバーライドを適用します。インストールの環境に応じて、本番環境またはデモ / 試験運用版環境の手順を選択して実行します。
本番
本番環境では各ハイブリッド コンポーネントを個別にアップグレードし、次のコンポーネントに進む前に、アップグレードされたコンポーネントのステータスを確認します。
- オーバーライドを適用して Cassandra をアップグレードします。
apigeectl apply -f overrides_1.3.yaml --datastore
- 完了を確認します。
kubectl -n namespace get pods
ここで、namespace は Apigee ハイブリッドの名前空間です。
Pod の準備ができた場合にのみ、次の手順に進みます。
- オーバーライドを適用してテレメトリー コンポーネントをアップグレードし、完了を確認します。
apigeectl apply -f overrides_1.3.yaml --telemetry
kubectl -n namespace get pods
- オーバーライドを適用して、組織レベルのコンポーネント(MART、Watcher、Apigee Connect)をアップグレードし、完了を確認します。
apigeectl apply -f overrides_1.3.yaml --org
kubectl -n namespace get pods
- オーバーライドを適用して環境をアップグレードします。これには、次の 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
- ステータスを確認します。
apigeectl check-ready -f overrides_1.3.yaml
詳細については、GKE ハイブリッドの設定 - ステップ 5: GKE にハイブリッドをインストールするをご覧ください。
- オーバーライドを適用して Cassandra をアップグレードします。
- ハイブリッド 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
の値を確認してください。 - すべての 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.2.0 仮想ホストのルーティングの詳細を削除します。
$APIGEECTL_HOME-v1.2/apigeectl delete -s virtualhost -f 1.2.0_overrides.yaml
ここで、$APIGEECTL_HOME-v1.2 は
apigeectl
バージョン 1.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 インスタンスを無効にする
- 新しくインストールされた
apigeectl
ディレクトリにcd
を実行します。 tools/cas_cleanup.sh
スクリプトを実行します。このスクリプトは、Cassandra リングから古い Cassandra Pod を無効にして、古い STS を削除し、PVC を削除します。
bash cas_cleanup.sh Apigee namespace
Istio バージョン 1.4.6 リソースを削除する
- 最新の 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)'
- 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 に正常にアップグレードされました。
- ハイブリッド 1.3.6 を初期化します。