バージョン 1.3.6 へのアップグレードの概要
以降のセクションで、Apigee ハイブリッドのアップグレード手順について説明します。
- 準備
- サービス アカウントを作成して更新する。
- 環境グループを計画する。
- オーバーライド ファイルをコピーして更新する。
- 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 1.16.x(Anthos アタッチ クラスタを使用) - ハイブリッド インストールで 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 回限りの手順です。- 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 を初期化します。