OpenStack環境におけるAnsible Deployerインサービスソフトウェアアップグレード手順を使用したContrail Networkingのアップグレード
この手順を使用する場合
Openstack オーケストレーションを使用するほとんどの環境では、ネットワークの中断を最小限に抑えながら Contrail Networking をアップグレードするには、ゼロインパクト アップグレード(ZIU)の手順を使用することをお勧めします。
ZIU アップグレードを実行するには、「 Ansible Deployer を使用してゼロ インパクト Contrail Networking アップグレードを実行する方法」の指示に従います。Red Hat Openstack 13 または 16.1 を実行している場合は、 Red Hat Openstack 13 を使用した環境でのゼロインパクト アップグレード プロセスを使用した Contrail Networking の更新または Red Hat Openstack 16.1 を 使用した環境でのゼロインパクト アップグレード プロセスを使用した Contrail Networking の更新を参照してください。
本書の手順では、Openstack オーケストレーションを使用する環境で Ansible deployer を使用して、ネットワークの中断を最小限に抑えながら Contrail Networking をアップグレードする方法も示します。
このドキュメントの手順は、Contrail Networking をリリース 3.2 以降からリリース 5.0 以降にアップグレードするために検証されています。このアップグレード用の Contrail リリースは、リリース 3.2 以降の Contrail Networking リリース(すべての Contrail Networking 4、5、19、20、21 リリースを含む)に設定できます。このアップグレードのターゲット リリースは、リリース 5.0 以降のすべての Contrail Networking リリース(すべての Contrail Networking 5、19、20、21 リリースを含む)です。
Contrail Networking リリースの開始 |
ターゲットがアップグレードされた Contrail Networking リリース |
---|---|
リリース 3.2 以降 すべてのリリース 4 すべてのリリース 5 すべてのリリース 19 すべてのリリース 20 すべてのリリース 21 |
すべてのリリース 5 すべてのリリース 19 すべてのリリース 20 すべてのリリース 21 |
Contrail インサービス ソフトウェア アップグレード(ISSU)の概要
インストールされているバージョンが Contrail リリース 3.2 以上の場合、稼働中ソフトウェア アップグレード(ISSU)を実行して、Ansible deployer を使用してこのアップグレードを実行できます。ISSU を実行する際には、Contrail コントローラー クラスターが並列セットアップで並行してアップグレードされ、コンピューティング ノードが所定の場所にアップグレードされます。
アップグレード プロセスを進める前に、現在のシステムのスナップショットを取得することをお勧めします。
Contrail Ansible deployer を使用して ISSU を実行する手順は、以前の ISSU アップグレード手順と同様です。
この Contrail ansible deployer ISSU プロシージャには、OpenStack をアップグレードするための手順は含まれていません。OpenStack バージョンのアップグレードが必要な場合は、該当する OpenStack の手順を使用して実行する必要があります。
要約すると、ISSU プロセスは、次の部分から順番に構成されています。
新しいクラスタを展開します。
新しいクラスタと古いクラスタを同期します。
コンピューティング ノードをアップグレードします。
同期を確定し、アップグレードを完了します。
前提 条件
Contrail ansible deployer ISSU プロシージャを使用するには、以下の前提条件が必要です。
以前のバージョンの Contrail がインストールされており、リリース 3.2 より前のバージョン。
OpenStack コントローラとコンピューティング ノード、Contrail ノードがあります。
OpenStack は、パッケージからインストールされている必要があります。
Contrail と OpenStack は異なるノードにインストールする必要があります。
Ubuntu 14.04 を持つコンピューティング ノードのアップグレードはサポートされていません。コンピューティング ノードは、まず Ubuntu 16.04 にアップグレードする必要があります。
Ansible Deployer ISSU プロシージャ用の Contrail システムの準備
要約すると、これらは Contrail ansible deployer ISSU プロシージャのシステム準備フェーズの一般的な手順です。
Contrail ansible deployer を使用して Contrail の新しいバージョンを導入しますが、必ず以下の Contrail コントローラ サービスのみを含める必要があります。
設定
コントロール
アナリティクス
データベース
rmq、kafka、zookeeperなどの追加のサポートサービス。(vrouter サービスは、後で古いコンピューティング ノードに導入されます)。
メモ:セットアップのための重要な認証情報を提供する必要があります。
導入が完了したら、Contrail Web インターフェイスにログインして動作することを確認できます。
ansible deployer を使用して新しいコントローラを導入するための詳細な手順は次のとおりです。
新しいコントローラを導入するには、ジュニパーネットワークスのプロビジョニング ホストに contrail-ansible-deployer-tgzrelease-tag をダウンロードします。
この例に示すように、新しいコントローラー ファイル config/instances.yaml は、変数の代わりに実際の値を使用して、次のように表示されます。
provider_config: bms: domainsuffix: local ssh_user: user ssh_pwd: password instances: server1: ip: controller 1 ip provider: bms roles: analytics: null analytics_database: null config: null config_database: null control: null webui: null contrail_configuration: CONTROLLER_NODES: controller ip-s from api/mgmt network CONTROL_NODES: controller ip-s from ctrl/data network AUTH_MODE: keystone KEYSTONE_AUTH_ADMIN_TENANT: old controller's admin's tenant KEYSTONE_AUTH_ADMIN_USER: old controller's admin's user name KEYSTONE_AUTH_ADMIN_PASSWORD: password for admin user KEYSTONE_AUTH_HOST: keystone host/ip of old controller KEYSTONE_AUTH_URL_VERSION: "/v3" KEYSTONE_AUTH_USER_DOMAIN_NAME: user's domain in case of keystone v3 KEYSTONE_AUTH_PROJECT_DOMAIN_NAME: project's domain in case of keystone v3 RABBITMQ_NODE_PORT: 5673 IPFABRIC_SERVICE_HOST: metadata service host/ip of old controller AAA_MODE: cloud-admin METADATA_PROXY_SECRET: secret phrase that is used in old controller kolla_config: kolla_globals: kolla_internal_vip_address: keystone host/ip of old controller kolla_external_vip_address: keystone host/ip of old controller
最後に、ansibleプレイブックを実行して新しいコントローラを導入します。
ansible-playbook -v -e orchestrator=none -i inventory/ playbooks/configure_instances.yml ansible-playbook -v -e orchestrator=openstack -i inventory/ playbooks/install_contrail.yml
これらのコマンドが正常に完了すると、新しいコントローラは稼働している必要があります。
制御ノードのプロビジョニングと同期手順の実行
要約すると、これらは Contrail ansible deployer ISSU プロシージャのノード プロビジョニングと同期フェーズの一般的な手順です。
古いクラスタ内の新しい制御ノードと、新しいクラスタ内の古い制御ノードをプロビジョニングします。
すべてのノードで、新しいクラスター内の以下のコンテナを停止します。
contrail-device-manager
Contrailスキーマトランスフォーマー
contrail-svcmonitor
新しいクラスターでのコンピューティングのプロビジョニングを防止するために、新しいコントローラーを保守モードに切り替えます。
ISSU の構成ファイルを準備します。
ISSU パッケージから事前同期スクリプトを実行します。
ISSU パッケージから実行同期スクリプトをバックグラウンド モードで実行します。
制御ノードのプロビジョニングと同期の実行の詳細な手順は次のとおりです。
新しいクラスタ内の古い制御ノードをペアにします。任意の config-api コンテナから実行することをお勧めします。
config_api_image=`docker ps | awk '/config-api/{print $1}' | head`
指示された実際の値を置き換え、古い制御ノードごとに以下のコマンドを実行します。
docker exec -it $config_api-image /bin/bash -c "LOG_LEVEL=SYS_NOTICE source /common.sh ; python /opt/contrail/utils/provision_control.py --host_name hostname of old control node --host_ip IP of old control node --api_server_ip $(hostname -i) --api_server_port 8082 --oper add --router_asn 64512 --ibgp_auto_mesh \$AUTH_PARAMS"
古いクラスタ内の新しい制御ノードを同様のコマンドと組み合わせて(特定の構文は古いクラスタの導入方法によって異なります)、指示された実際の値を置き換えます。
python /opt/contrail/utils/provision_control.py --host_name new controller hostname --host_ip new controller IP --api_server_ip old api-server IP/VIP --api_server_port 8082 --oper add --admin_user admin --admin_password password --admin_tenant_name admin --router_asn 64512 --ibgp_auto_mesh
すべてのコントローラ ノードの新しいクラスタで、contrail-device-manager、contrail-schema-transformer、contrail-svcmonitor のすべてのコンテナを停止します。
docker stop config_devicemgr_1 docker stop config_schema_1 docker stop config_svcmonitor_1
次のステップは、新しいコントローラから実行する必要があります。次に、ISSU 用に準備された構成が実行されます。(現時点では手動での準備しかできません。
さまざまな導入では、古い cassandra はポート 9160 または 9161 を使用できます。古いサービスの設定詳細は、古いコントローラノードのファイル /etc/contrail-contrail-api.confで学習できます。
設定は次のように表示され、ローカルに保存できます。
[DEFAULTS] # details about oldrabbit old_rabbit_user = contrail old_rabbit_password = ab86245f4f3640a29b700def9e194f72 old_rabbit_q_name = vnc-config.issu-queue old_rabbit_vhost = contrail old_rabbit_port = 5672 old_rabbit_address_list = ip-addresses # details about new rabbit # new_rabbit_user = rabbitmq # new_rabbit_password = password # new_rabbit_ha_mode = new_rabbit_q_name = vnc-config.issu-queue new_rabbit_vhost = / new_rabbit_port = 5673 new_rabbit_address_list = ip-addresses # details about other old/new services old_cassandra_user = controller old_cassandra_password = 04dc0540b796492fad6f7cbdcfb18762 old_cassandra_address_list = ip-address:9161 old_zookeeper_address_list = ip-address:2181 new_cassandra_address_list = ip-address:9161 ip-address:9161 ip-address:9161 new_zookeeper_address_list = ip-address:2181 # details about new controller nodes new_api_info = {"ip-address": [("root"), ("password")], "ip-address": [("root"), ("password")], "ip-address": [("root"), ("password")]}
config-apiイメージIDを検出します。
image_id=`docker images | awk '/config-api/{print $3}' | head -1`
事前同期を実行します。
docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh $image_id -c "/usr/bin/contrail-issu-pre-sync -c /etc/contrail/contrail-issu.conf"
同期実行を実行します。
docker run --rm --detach -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-run-sync -c /etc/contrail/contrail-issu.conf"
実行同期プロセスのログを確認します。そのためには、run-syncコンテナを開きます。
docker exec -it issu-run-sync /bin/bash cat /var/log/contrail/issu_contrail_run_sync.log
すべてのコンピューティング ノードがアップグレードされた後、同期実行プロセスを停止および削除します。
docker rm -f issu-run-sync
コンピューティング ノードの新しいクラスターへの移行
要約すると、これらは Contrail ansible deployer ISSU プロシージャのノード転送フェーズの一般的な手順です。
新しいクラスターに転送するコンピューティング ノードを選択します。
すべてのワークロードをノードから他のコンピューティング ノードに移動します。必要に応じてワークロードを終了することもできます。
Contrail リリース 3.x では、以下のように Contrail をノードから削除します。
vrouter-agent サービスを停止します。
インターフェイスを
vhost0
削除します。物理インターフェイスをダウンに切り替えてから、アップします。
カーネルから vrouter.ko モジュールを削除します。
Contrail リリース 4.x 以降では、以下のように Contrail をノードから削除します。
エージェントコンテナを停止します。
物理インターフェイスを復元します。
必要なノードをインスタンスに追加 します。yml のロール
vrouter
とopenstack_legacy_compute
を使用します。Contrail ansible deployerを実行して、新しいvrouterを導入し、古いコンピューティングサービスを設定します。
すべての新しいコンピューティング ノードには、以下が含まれます。
新しい Contrail クラスタを指すコレクター設定
新しい Contrail クラスタを指す制御/DNS ノード
vnc_api_libの config-api 設定 は 、新しい Contrail クラスタを指し示しています。
(オプション)転送されたノードでテスト ワークロードを実行し、新しい vrouter-agent が正しく動作することを確認します。
必要に応じて、コンピューティング ノードをロールバックするには、次の手順に従います。
コンピューティング ノードからワークロードを移動します。
新しい Contrail コンテナを停止します。
ネットワーク設定が正常に元に戻ったことを確認します。
そのバージョンの導入方法を使用して、以前のバージョンの Contrail を導入します。
コンピューティング ノードを新しいクラスタに転送する手順は、次のとおりです。
選択したコンピューティング ノードからワークロードを移動した後、以前のバージョンの Contrail-agent を削除する必要があります。例えば、ホストに直接インストールされたUbuntu 16.04とvrouter-agentの場合、以前のcontrail-agentを削除する手順は次のようになります。
# stop services systemctl stop contrail-vrouter-nodemgr systemctl stop contrail-vrouter-agent # remove packages apt-get purge -y contrail* # restore original interfaces definition cd /etc/network/interfaces.d/ cp 50-cloud-init.cfg.save 50-cloud-init.cfg rm vrouter.cfg # restart networking systemctl restart networking.service # remove old kernel module rmmod vrouter # maybe you need to restore default route ip route add 0.0.0.0/0 via 10.0.10.1 dev ens3
新しいインスタンスは、vrouter と openstack_compute_legacy の 2 つのロールで instances.yaml に追加する必要があります。コンピューティング ノードの再プロビジョニングを回避するには、メンテナンス モードを に設定します
TRUE
。例えば:instances: server10: ip: compute 10 ip provider: bms roles: vrouter: MAINTENANCE_MODE: TRUE VROUTER_ENCRYPTION: FALSE openstack_compute_legacy: null
Ansibleプレイブックを実行します。
ansible-playbook -v -e orchestrator=none -e config_file=/root/contrail-ansible-deployer/instances.yaml playbooks/configure_instances.yml ansible-playbook -v -e orchestrator=openstack -e config_file=/root/contrail-ansible-deployer/instances.yaml playbooks/install_contrail.yml
コンピューティング ノードの Contrail ステータスは次のように表示されます。
vrouter kernel module is PRESENT == Contrail vrouter == nodemgr: active agent: initializing (No Configuration for self)
アップグレード完了後、すべての新しいコントローラ ノードで contrail-control を再起動します。
docker restart control_control_1
新しいコンピューティング ノード上で実行
contrail-status
し、状態を確認します。すべてのコンポーネントは今すぐアクティブにする必要があります。新しいコンピューティング ノードで AZ/集計を作成して新しいインスタンスのステータスを確認し、一部のテスト ワークロードを実行して正しく動作するようにすることもできます。
Contrail Ansible Deployer ISSU プロセスの最終決定
Contrail ansible deployer ISSU を次のように完成させます。
issu-run-sync コンテナを停止します。
docker rm -f issu-run-sync
同期後コマンドを実行します。
docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-post-sync -c /etc/contrail/contrail-issu.conf" docker run --rm -it --network host -v $(pwd)/contrail-issu.conf:/etc/contrail/contrail-issu.conf --entrypoint /bin/bash -v /root/.ssh:/root/.ssh --name issu-run-sync $image_id -c "/usr/bin/contrail-issu-zk-sync -c /etc/contrail/contrail-issu.conf"
すべての新しいコントローラー ノードで次のコマンドを実行します。
docker-compose -f /etc/contrail/config/docker-compose.yaml restart api docker-compose -f /etc/contrail/config/docker-compose.yaml up -d
コンテナを再起動します。
docker-compose -f /etc/contrail/config/docker-compose.yaml restart API docker-compose -f /etc/contrail/config/docker-compose.yaml up -d
メンテナンスモードを解除し、以前に停止したすべてのコンテナを起動します。これを行うには、instances.yaml のエントリ
MAINTENANCE_MODE
を FALSE に設定し、展開ノードから次のコマンドを実行します。ansible-playbook -v -e orchestrator=openstack -i inventory/ playbooks/install_contrail.yml
古い Contrail コントローラをクリーンアップして削除します。config-apiコンテナからという provision-issu.py スクリプトを config issu.confとともに使用します。認証情報変数と API サーバー IP を、指示に応じて適切な値に置き換えます。
[DEFAULTS] db_host_info={"ip-address": "node-ip-address", "ip-address": "node-ip-address", "ip-address": "node-ip-address"} config_host_info={"ip-address": "node-ip-address", "ip-address": "node-ip-address", "ip-address": "node-ip-address"} analytics_host_info={"ip-address": "node-ip-address", "ip-address": "node-ip-address", "ip-address": "node-ip-address"} control_host_info={"ip-address": "node-ip-address", "ip-address": "node-ip-address", "ip-address": "node-ip-address"} admin_password = <admin password> admin_tenant_name = <admin tenant> admin_user = <admin username> api_server_ip= <any IP of new config-api controller> api_server_port=8082
任意のコントローラー ノードから次のコマンドを実行します。
メモ:すべての *host_info パラメーターには、新しいホストのリストを含める必要があります。
docker cp issu.conf config_api_1:issu.conf docker exec -it config_api_1 python /opt/contrail/utils/provision_issu.py -c issu.conf
他のサービスが存在しない場合、サーバーをクリーンアップできます。
neutron-api のすべての設定を編集して、パラメータ
api_server_ip
が新しい config-api IP アドレスのリストを指し向ける必要があります。 ContrailPlugin.ini (またはこのパラメーターが含まれているその他のファイル)を検索し、IP アドレスを新しい config-api IP アドレスのリストに変更します。熱構成には同じ変更が必要です。パラメータ
[clients_contrail]/api_server
を見つけて、新しい config-api IP アドレスのリストをポイントするように変更します。