GSP682
概要
仮想マシン(VM)インスタンスは、VMWare vSphere などのプロダクトによって管理されるオンプレミス システム、AWS や Azure などのパブリック クラウドで利用できるほかに、Google Cloud Compute Engine インスタンスとしても利用できます。
Anthos はオープンソースのアプリケーション プラットフォームで、Anthos を使うと、ハイブリッド クラウドやマルチクラウドの環境で既存のアプリケーションをモダナイズしたり、新しい VM を構築してどこでも安全に実行したりすることができます。Anthos は、Google が主導して開発したオープンソース テクノロジーである Kubernetes、Istio、Knative などを基盤として構築されており、オンプレミス環境とクラウド環境の整合性を維持するうえで役立ちます。
ワークロードをコンテナにアップグレードすると、VM に対する OS レベルのメンテナンスやセキュリティ パッチの適用が不要になり、大規模なポリシーとセキュリティの更新が自動化されます。Cloud コンソールの 1 つのインターフェースでオンプレミスとクラウドの両方の環境をモニタリングできます。
Migrate to Containers を使用すると、ほぼリアルタイムで、既存の VM を Kubernetes でホストされる Pod として利用可能にすることができます。このとき、Kubernetes クラスタでのアプリケーションの実行に関連するすべての値が保持されます。
このラボでは、シンプルな Compute Engine 仮想マシン(VM)を作成し、Migrate to Containers を使用して Cloud 内の GKE 処理クラスタに移行します。
この手順は、migctl
ツールまたは Cloud コンソールを使用して実行できます。migctl
は、Google Cloud 上で Migrate to Containers の移行環境を設定、管理するためのコマンドライン ツールです。migctl
は Cloud Shell で利用できます。
Migrate to Containers を使用すると、他の方法よりも迅速にコンテナ化を実現できます。
目標
次のタスクの実行方法について学びます。
- ウェブサーバーをホストする Compute Engine インスタンスを作成する。
- 移行した Compute Engine インスタンスをホストする GKE クラスタを作成する。
- Migrate to Containers を使用して Compute Engine インスタンスを移行する。
- GKE 上のウェブサーバーをテストする。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = <project_ID>
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注: Google Cloud における gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
- プロジェクト ID 用の環境変数を設定します。
export PROJECT_ID=$DEVSHELL_PROJECT_ID
タスク 1. ソースの Compute Engine を作成する
- 次のコマンドを実行して、移行対象 VM のソースとなる Compute Engine インスタンスを作成、構成します。
gcloud compute instances create source-vm --zone={{{project_0.startup_script.lab_zone | zone}}} --machine-type=e2-standard-2 --subnet=default --scopes="cloud-platform" --tags=http-server,https-server --image=ubuntu-minimal-1604-xenial-v20210119a --image-project=ubuntu-os-cloud --boot-disk-size=10GB --boot-disk-type=pd-standard --boot-disk-device-name=source-vm \
--metadata startup-script={{{project_0.startup_script.metadata_script|METADATA_SCRIPT}}}
起動スクリプトを使って Apache ウェブサーバーをインストールし、簡単なウェブページを作成しました。
出力例:
Created [https://www.googleapis.com/compute/beta/projects/qwiklabs-gcp-02-ace18e67a4ba/zones/{{{project_0.startup_script.lab_zone | zone}}}/instances/source-vm].
NAME: source-vm
ZONE: {{{project_0.startup_script.lab_zone | zone}}}
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.70.249.10
STATUS: RUNNING
- HTTP を許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
出力例:
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-04-1126b7a391de/global/firewalls/default-allow-http].
Creating firewall...done.
NAME: default-allow-http
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ソースの Compute Engine を作成する
-
Cloud コンソールで、[Compute Engine] > [VM インスタンス] に移動し、作成したインスタンスの行を見つけ、外部 IP アドレスをコピーします。
-
インスタンスの IP アドレスをブラウザのアドレスバーに貼り付けます。その際、先頭に http://
を追加します。
これで「Hello World」ページが表示されます。
VM を移行するには、まず VM の実行を停止します。
- Cloud コンソールで [Compute Engine] > [VM インスタンス] に移動し、
source-vm
の左側にあるチェックボックスをオンにして、上部の [停止] ボタンをクリックします。
注: [停止] ボタンが表示されない場合は、[その他の操作](縦に 3 つの点)ボタンを選択し、プルダウンから [停止] を選択します。
- ポップアップ ウィンドウで [停止] をクリックして、シャットダウンを確定します。VM をシャットダウンしている間に、次のセクションに進みます。
注: VM は移行する際に停止する必要があります。VM は、UI または migctl migration create
コマンドを使用して以下のように移行を行った後で再開できます。
タスク 2. 処理クラスタを作成する
次の手順で、処理クラスタとして使用する GKE クラスタを Google Cloud 内に作成します。これが Migrate to Containers をインストールし、移行を実行する場所になります。
- Cloud Shell で次のコマンドを使用して、処理センターとして使用する新しい Kubernetes クラスタを作成します。
gcloud container clusters create migration-processing --project=$PROJECT_ID --zone={{{project_0.startup_script.lab_zone | zone}}} --machine-type e2-standard-4 --image-type ubuntu_containerd --num-nodes 3 --enable-stackdriver-kubernetes --subnetwork "projects/$PROJECT_ID/regions/{{{project_0.startup_script.lab_region | region}}}/subnetworks/default"
注: ここでは、VM の作成時に指定したゾーンと同じゾーンを指定してください。
出力例:
Creating cluster migration-processing in {{{project_0.startup_script.lab_zone | zone}}} ...done.
Created [https://container.googleapis.com/v1/projects/qwiklabs-gcp-04-1126b7a391de/zones/{{{project_0.startup_script.lab_zone | zone}}}/clusters/migration-processing].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/{{{project_0.startup_script.lab_zone | zone}}}/migration-processing?project=qwiklabs-gcp-04-1126b7a391de
kubeconfig entry generated for migration-processing.
NAME: migration-processing
LOCATION: {{{project_0.startup_script.lab_zone | zone}}}
MASTER_VERSION: 1.20.10-gke.301
MASTER_IP: 35.202.0.171
MACHINE_TYPE: e2-standard-4
NODE_VERSION: 1.20.10-gke.301
NUM_NODES: 3
STATUS: RUNNING
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
処理クラスタを作成する
タスク 3. Migrate to Containers をインストールする
Migrate to Containers が Container Registry と Cloud Storage にアクセスできるようにするには、storage.admin
ロールを持つサービス アカウントを作成する必要があります。
- Cloud Shell で、
m4a-install
サービス アカウントを作成します。
gcloud iam service-accounts create m4a-install \
--project=$PROJECT_ID
- サービス アカウントに
storage.admin
ロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:m4a-install@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.admin"
- サービス アカウント用のキーファイルをダウンロードします。
gcloud iam service-accounts keys create m4a-install.json \
--iam-account=m4a-install@$PROJECT_ID.iam.gserviceaccount.com \
--project=$PROJECT_ID
- クラスタに接続します。
gcloud container clusters get-credentials migration-processing --zone {{{project_0.startup_script.lab_zone | zone}}}
- Migrate to Containers に含まれる
migctl
コマンドライン ツールを使用して、処理クラスタ上で Migrate to Containers コンポーネントを設定します。
migctl setup install --json-key=m4a-install.json --gcp-project $PROJECT_ID --gcp-region {{{project_0.startup_script.lab_region | region}}}
- Migrate to Containers のインストールを検証します。
migctl doctor
コマンドを使用して、正常にデプロイされていることを確認します。
migctl doctor
コマンドが以下の成功結果を返すまでに 1 分以上かかることがあります。
出力例:
[✓] Deployment
[✓] Docker registry
[✓] Artifacts repo
[x] Source Status
注: 以下の最初の移行ソースを定義するまで、ソース ステータスは [x] と表示されます。
- 正常にデプロイされたことを示す内容が表示されるまで、コマンドを再実行します。
タスク 4. VM を移行する
移行の詳細情報を含む移行計画を作成し、それを使用して VM を移行します。
Compute Engine を移行のソースとして使用するには、まず compute.viewer
と compute.storageAdmin
のロールを持つサービス アカウントを作成する必要があります。
- Cloud Shell で、
m4a-ce-src
サービス アカウントを作成します。
gcloud iam service-accounts create m4a-ce-src \
--project=$PROJECT_ID
- サービス アカウントに
compute.viewer
ロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:m4a-ce-src@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.viewer"
- サービス アカウントに
compute.storageAdmin
ロールを付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:m4a-ce-src@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/compute.storageAdmin"
- サービス アカウント用のキーファイルをダウンロードします。
gcloud iam service-accounts keys create m4a-ce-src.json \
--iam-account=m4a-ce-src@$PROJECT_ID.iam.gserviceaccount.com \
--project=$PROJECT_ID
- 移行のソースを作成します。
migctl source create ce source-vm --project $PROJECT_ID --json-key=m4a-ce-src.json
m4a-ce-src.json
は、上記で作成したサービス アカウントを指定しています。
移行を作成する
VM の移行を開始するには、移行を作成します。これにより、移行計画オブジェクトが作成されます。
移行オブジェクトは、移行処理を実行する際と、migctl ツールまたは Cloud コンソールで移行のアクティビティとステータスをモニタリングする際に使用する中心的なオブジェクトです。移行オブジェクトは Kubernetes カスタム リソース定義(CRD)として実装されます。
次に、migctl
ツールを実行して移行を作成します。
- 移行対象を定義する移行計画を作成します。
migctl migration create my-migration --source source-vm --vm-id source-vm --type linux-system-container
出力例:
Migration my-migration was created. Run `migctl migration status my-migration` to see its status.
- 次のコマンドを実行して、ステータスを確認します。
migctl migration status my-migration
移行のステータスが Completed と表示されたら、次のステップに進むことができます。
NAME CURRENT-OPERATION PROGRESS STEP STATUS AGE
my-migration GenerateMigrationPlan [3/3] Discovery Completed 1m30s
移行計画を確認する
- このラボでは、デフォルトの移行計画を使用します。ここでは確認用に移行計画をダウンロードします。
migctl migration get my-migration
- 任意のテキスト エディタまたは Cloud Shell コードエディタで
my-migration.yaml
ファイルを開き、確認します。
変更が必要な場合は、migctl migration update my-migration
コマンドで新しい計画をアップロードします。
タスク 5. 移行計画を使用して VM を移行する
- 次のコマンドを実行すると VM が移行され、ワークロードのデプロイに使用できるアーティファクトが生成されます。
migctl migration generate-artifacts my-migration
注: Error: Migration plan generation is not completed のような出力が表示される場合は、出力例のような内容が表示されるまでコマンドを再実行します。
出力例:
Generate Artifacts task started for Migration my-migration. Run `migctl migration status my-migration` to see its status.
- 移行が開始されたら、次のコマンドを実行してステータスを確認します。
migctl migration status my-migration
移行には数分かかることがあります。
- ステータスが Completed と表示されるまでコマンドを再実行します。
NAME CURRENT-OPERATION PROGRESS STEP STATUS AGE
my-migration GenerateArtifacts [3/3] GenerateDeploymentFiles Completed 7m35s
- 次のように
-v
フラグを追加すると、詳細な情報を確認できます。
migctl migration status my-migration -v
タスク 6. 移行されたワークロードをデプロイする
次の手順では、移行時に生成されたデプロイのアーティファクトを取得し、それを使用して、移行されたワークロードをクラスタにデプロイします。最後に、移行したアプリから「Hello World!」のウェブページにアクセスできることを確認します。
- 移行が完了したら、生成された YAML アーティファクトを取得します。
migctl migration get-artifacts my-migration
このコマンドは、移行中に生成されたファイルをダウンロードします。
-
deployment_spec.yaml -- ワークロードを構成する YAML ファイル。
-
Dockerfile -- 移行された VM のイメージのビルドに使用される Dockerfile。
-
migration.yaml -- 移行計画のコピー。
-
blocklist.yaml - 移行計画の設定に基づいて無効にするコンテナ サービスのリスト。
-
Cloud Shell エディタが開いていない場合は、[エディタを開く] ボタンをクリックします。
-
deployment_spec.yaml ファイルを開き、source-vm
という名前の Service
オブジェクトを見つけます。
-
以下のような Service
の定義の下に、HTTP でウェブサーバーにアクセスできるようにポート 80 を公開する別の Service
を最後に追加します。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: source-vm
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
ファイルは以下のようになります。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: source-vm
spec:
clusterIP: None
selector:
app: source-vm
type: ClusterIP
status:
loadBalancer: {}
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: source-vm
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
-
ファイルを保存します。
-
deployment_spec.yaml
を適用してワークロードをデプロイします。
kubectl apply -f deployment_spec.yaml
出力例:
deployment.apps/source-vm created
service/source-vm created
service/my-service created
デプロイが完了するまでに数分かかることがあります。
- 外部 IP アドレスを確認します。
kubectl get service
出力例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-service LoadBalancer 10.23.253.140 35.184.157.83 80:31060/TCP 11m
kubernetes ClusterIP 10.23.240.1 443/TCP 31m
my-service LoadBalancer 10.23.244.80 104.197.196.94 80:31026/TCP 2m3s
source-vm ClusterIP None 11m
ウェブサーバーの準備ができると、追加した my-service
の外部 IP アドレスが表示されます。
タスク 7. 移行をテストする
- ブラウザを開いて
my-service
の外部 IP アドレスのウェブページにアクセスし、移行をテストします(HTTPS ではなく HTTP を使用してください)。
例:
http://<my-service-external-IP>
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
移行により my-service が作成されたことを確認する
お疲れさまでした
Migrate to Containers を使用して、Compute Engine インスタンスを Kubernetes Pod に移行しました。この手法は、VMware vSphere、AWS、Azure などの他の VM ソースにも使用できます。
クエストを完了する
このセルフペース ラボは「VM Migration」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能な全クエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のラボを受講する
次のステップと詳細情報
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボのプラットフォームから、アカウントと使用したリソースが削除されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
マニュアルの最終更新日: 2022 年 11 月 18 日
ラボの最終テスト日: 2022 年 6 月 6 日
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。