移行後のイメージの更新

migctl migration generate-artifacts コマンドで作成したコンテナのアーティファクトは、移行したワークロードをターゲット クラスタにデプロイするためだけのものではありません。アプリケーションやユーザモードの OS ソフトウェアの更新、セキュリティ パッチの適用、埋め込み構成の編集、ファイルの追加や置き換え、Migrate for Anthos and GKE ランタイム ソフトウェアの更新など、「2 日目」のメンテナンス オペレーションにも使用できます。

生成されたイメージ Dockerfile を確認する

このようなメンテナンス オペレーションでは、生成された Dockerfile とキャプチャされたシステム イメージレイヤが使用されます。Migrate for Anthos and GKE ランタイム レイヤと組み合わせることで、これらのファイルを実行可能なコンテナ イメージに組み込むことができます。

生成されたコンテナ アーティファクトは、次の図に示すように、CI / CD パイプラインのビルドフェーズ統合を考慮して作成されています。

CI / CD パイプラインを示す図。

Dockerfile はマルチステージ ビルドとして構成されているため、イメージの拡張を抑えながらメンテナンスや操作が容易に行えます。

生成された Dockerfile のサンプルは次のとおりです。

# Please refer to the documentation:
# https://cloud.google.com/migrate/anthos/docs/dockerfile-reference

FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.6.0 as migrate-for-anthos-runtime

# Image containing data captured from the source VM
FROM gcr.io/myproject/myworkload-non-runnable-base:v1.0.0 as source-content

# If you want to update parts of the image, add your commands here.
# For example:
# RUN apt-get update
# RUN apt-get install -y \
#               package1=version \
#               package2=version \
#               package3=version
# RUN yum update
# RUN wget http://github.com

COPY --from=migrate-for-anthos-runtime / /

# Migrate for Anthos image includes entrypoint
ENTRYPOINT [ "/.v2k.go" ]

2 番目の FROM ディレクティブは、移行された VM からキャプチャされたシステム イメージレイヤを参照します。このレイヤは単独では実行できないため、Migrate for Anthos and GKE ランタイム レイヤと組み合わせて、実行可能なイメージをビルドする必要があります。

Cloud Build を使用したコンテナ イメージのビルドの詳細については、コンテナ イメージのビルドをご覧ください。

移行済みワークロード コンポーネント レイヤの更新

移行したワークロード イメージ レイヤを更新、変更したい場合は、2 番目の FROM ディレクティブの後に適用してください。

次の例では、Cloud Build と gcloud CLI を使用して、SUSE Enterprise Linux(SLES)VM から移行されたコンテナ イメージを更新します。また、次の例では、SLES ディストリビューションの openssh パッケージの更新も行います。

更新された Dockerfile:

# Image containing data captured from the source VM
FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.6.0 as migrate-for-anthos-runtime

# Image containing data captured from the source VM
FROM gcr.io/myproject/myworkload-non-runnable-base:v1.0.0 as source-content

# If you want to update parts of the image, add your commands here.
# For example:
# RUN apt-get update
# RUN apt-get install -y \
#               package1=version \
#               package2=version \
#               package3=version
# RUN yum update
# RUN wget http://github.com

RUN zypper ref -s && zypper -n in openssh
COPY --from=migrate-for-anthos-runtime / /

# Migrate for Anthos and GKE image includes entrypoint
ENTRYPOINT [ "/.v2k.go" ]

更新されたイメージのビルド:

  1. 生成された Dockerfile を Cloud Storage バケットから Cloud Shell 環境のローカル ディレクトリにダウンロードします。
  2. 上記の例のように、Dockerfile を編集してハイライト表示された RUN ディレクティブを追加します。
  3. 更新されたイメージをビルドし、更新されたバージョンタグで Container Registry に push して、ビルドが完了するのに十分な時間を確保します。次の例では、イメージは現在のディレクトリにあります。

    gcloud builds submit --timeout 4h --tag gcr.io/myproject/mySUSEworkload:v1.0.1 .
    
  4. 新しくビルドされたイメージを使用して、デプロイ済みアプリケーションをローリング アップグレードするなど、既存のデプロイメントを更新できます。

    kubectl set image deployment/myWorkload my-app=gcr.io/myproject/mySUSEworkload:v1.0.1 --record
    

Migrate for Anthos and GKE レイヤのバージョンの更新

Migrate for Anthos and GKE ソフトウェアの新しいバージョンがリリースされると、デプロイ済みのワークロード イメージでそのソフトウェアのバージョンを更新できます。更新には、新しい機能、追加機能、バグ修正などがあります。

Migrate for Anthos and GKE ソフトウェア レイヤを更新するには、Dockerfile を編集して、適用したい更新バージョンにバージョンタグを変更します。

先ほどの例を使用して、FROM ディレクティブを以下のように編集することで、v1.6.0 から仮のバージョン v1.11.0 に更新できます。

FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.11.0 as migrate-for-anthos-runtime

Dockerfile を更新した後、新しいワークロード コンテナ イメージのバージョンをビルドし、既存のデプロイメントに適用して更新します。