移行後のイメージの更新

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

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

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

生成されたコンテナ アーティファクトは、次の図に示すように、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 GKE Enterprise image includes entrypoint
ENTRYPOINT [ "/.v2k.go" ]

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

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 to Containers 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 to Containers レイヤのバージョンの更新

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

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

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

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

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

次のステップ