第4章 オーバークラウドの OpenStack Platform バージョン 15 から 16.1 へのアップグレード

オーバークラウドをアップグレードするには、オーバークラウドプランを更新し、アップグレードに向けてノードの準備を行い、環境に適用されるすべてのコンテナーイメージ設定の準備を行い、ノードをアップグレードする必要があります。

重要

BZ#1872404 が解決されるまで、コンポーザブルロールに基づくノードについては、先ず Database ロールを更新してから、ControllerMessagingComputeCeph、およびその他のロールを更新する必要があります。

前提条件

  • アンダークラウドノードを OpenStack Platform バージョン 15 から 16.1 にアップグレードしている。

オーバークラウドをアップグレードするには、以下のタスクを実施します。

4.1. HA サービスのローリングアップグレードに向けたコンテナーイメージの準備

HA サービスが使用するコンテナーイメージの namespacename_prefix、または name_suffix が変更された場合、Pacemaker は自動的にコントロールプレーンでこのサービスのインスタンスをすべて再起動し、新たに設定されたコンテナーイメージ名でコンテナーを再作成します。

Red Hat OpenStack 15 と 16.1 では異なる name_prefix の値が使用されるので、クラスターの最初のノードが更新された後、残りのノードはローカルに存在するはずの新しいコンテナーイメージを使用して起動します。

HA コンテナーイメージ名のローリング更新を行うことができるように、Red Hat OpenStack 16.1 では ClusterCommonTag heat パラメーターが実装され、固定の name_prefix (cluster.common.tag) および固定の name_suffix (pcmklatest) が設定された中間イメージ名を使用するように HA サービスが設定されます。director がノードに新しいコンテナーイメージをプルするたびに、中間イメージタグが新たにプルしたイメージをポイントするようにタグが更新されます。

OpenStack 16.1 の中間コンテナーイメージ命名スキームに移行するには、コントローラーノード上にある各 HA コンテナーイメージ用に初期コンテナータグを手動で作成する必要があります。新しい cluster.common.tag/rhosp16-openstack-* コンテナータグは、元の registry/rhosp15-openstack-*:pcmklatest タグによって参照される同じコンテナーイメージ ID を指します。

手順

  1. アンダークラウドに stack ユーザーとしてログインします。
  2. stackrc ファイルを取得します。

    $ source ~/stackrc
  3. オーバークラウドの静的なインベントリーファイルを作成します。

    $ tripleo-ansible-inventory --static-yaml-inventory ~/inventory.yaml
  4. 既存のイメージを新しい名前にタグ付けするスクリプトを作成します。

    cat > pcmkr_common_tag.sh <<'EOF'
    #!/bin/sh
    # Due to a change in internal CI repo, we need to adjust
    # the HA relate containers before running the update.
    # See bz#1846042/PIDONE
    OLD_PREFIX=${1:-"openstack-"}
    NEW_PREFIX=${2:-"openstack-"}
    TRANSFORM=s%${OLD_PREFIX}%${NEW_PREFIX}%p
    
    # Get all images used by HA containers (disregards images with cluster common tag in their name)
    IMAGES=$(sudo podman images | awk '$1 !~ /cluster.common.tag/ && $2 ~ /pcmklatest/ {print $1}')
    
    if [ -n "$IMAGES" ]; then
        echo "Creating cluster common tags and linking them to current HA images"
    fi
    
    # i: 192.168.24.1:8787/rhosp15-rhel8/openstack-mariadb
    # image: openstack-mariadb
    # transformed: openstack-mariadb
    # full_i: 192.168.24.1:8787/rhosp15-rhel8/openstack-mariadb:pcmklatest
    # full_icommon: cluster.common.tag/openstack-mariadb:pcmklatest
    for i in $IMAGES; do
        image=$(echo "$i" | sed 's%.*/%%')
        transformed=$(echo $image | sed -n $TRANSFORM)
        full_i=$i:pcmklatest
        full_icommon=cluster.common.tag/${transformed}:pcmklatest
        # echo $i - $TRANSFORM "=>" $image - $transformed
    
        # original image points to a image hash, create a new tag
        # with cluster.common.tag and make it point to the same image hash
        echo $full_i "-->" $full_icommon
        sudo podman tag $full_i $full_icommon
    done
    EOF
  5. スクリプトを実行して既存のイメージを新しい名前にタグ付けします。

    $ ansible -i inventory.yaml 'overcloud' -m script -a './pcmkr_common_tag.sh'