Migrate to Containers CLI を使用して Linux VM を移行する

このクイックスタートでは、Compute Engine 仮想マシン(VM)インスタンスを作成し、Migrate to Containers CLI を使用して VM を Google Kubernetes Engine(GKE)に移行します。

始める前に

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する

  3. Compute Engine API を有効にします。

    Compute Engine API を有効にする

  4. GKE API を有効にします。

    GKE API を有効にする

移行元 VM として使用するウェブサーバーを含む Compute Engine VM を作成する

このセクションでは、移行完了後にテストに使用できる Hello World! ウェブページを提供する Compute Engine VM を作成する方法について説明します。

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」アイコン(Shell をアクティブにするボタン)をクリックします。

    Google Cloud コンソールに移動

  2. VM を作成します。

    gcloud compute instances create quickstart-source-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=10GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-source-vm
    

    VM の作成が完了するまで数分待ちます。

  3. 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
    
  4. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  5. VM quickstart-source-vm に接続するには、VM の行を探して [SSH] をクリックします。

    新しいタブで接続が確立されます。

  6. quickstart-source-vm コマンドタブで、apache2 パッケージをインストールします。

    sudo apt-get update && sudo apt-get install apache2 -y
    

    Apache をインストールすると、オペレーティング システムにより Apache サーバーが自動的に起動します。

  7. 同じタブで、Apache ウェブサーバーのデフォルトのウェブページを新しいページで上書きします。

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. [VM インスタンス] ページに戻り、quickstart-source-vm に表示されている外部 IP アドレスをコピーします。

  9. VM の IP アドレスをブラウザのアドレスバーに貼り付けます。http:// の接頭辞を付けます。

    Hello World!」ページが表示されます。

ローカルマシンとして使用する Compute Engine VM を作成する

このセクションでは、ローカルマシンとして使用できる Linux VM を作成します。この VM を使用して、移行元 VM の移行に必要な Migrate to Containers オペレーションを実行します。

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」アイコン(Shell をアクティブにするボタン)をクリックします。

    Google Cloud コンソールに移動

  2. VM を作成します。

    gcloud compute instances create quickstart-local-vm \
      --zone=us-central1-a --machine-type=e2-medium  \
      --subnet=default --scopes="cloud-platform" \
      --tags=http-server,https-server --image=ubuntu-2204-jammy-v20240208 \
      --image-project=ubuntu-os-cloud --boot-disk-size=50GB --boot-disk-type=pd-standard \
      --boot-disk-device-name=quickstart-local-vm
    

    VM の作成が完了するまで数分待ちます。

GKE クラスタを作成する

このセクションでは、Google Cloud に GKE クラスタを作成します。このクラスタには、このクイックスタートの後半でコンテナ化されたワークロードをデプロイします。

  • Cloud Shell で、新しい Kubernetes クラスタを作成します。

    gcloud container clusters create quickstart-cluster \
      --zone=us-central1-a --machine-type=e2-medium \
      --image-type=ubuntu_containerd --num-nodes=1 \
      --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

    クラスタの作成が完了するまで数分待ちます。

移行を実行するローカル VM を準備する

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. VM quickstart-local-vm に接続するには、VM の行を探して [SSH] をクリックします。

    新しいタブで接続が確立されます。

  3. quickstart-local-vm コマンドタブで、Google Cloud CLI をインストールします。

    # Import the Google Cloud public key.
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
    
    # Add the gcloud CLI distribution URI as a package source
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
    
    # Update and install gcloud
    sudo apt-get update && sudo apt-get install google-cloud-cli
    
    # Get started
    gcloud init
    

    gcloud CLI の設定を完了するには、quickstart-local-vm コマンドタブに表示される指示に従います。

    1. オペレーションを実行するアカウントを選択するには、「1」と入力します。
    2. VM を作成したプロジェクトを選択するには、「1」と入力します。
    3. デフォルトのリージョンとゾーンの構成をスキップするには、「n」と入力します。
  4. Docker をインストールし、root 以外のユーザーがコンテナを実行できるようにします。

    # Download the convenience script
    curl -fsSL https://get.docker.com -o install-docker.sh
    
    # Install Docker
    sudo sh install-docker.sh
    
    # Allow the non-root user to access Docker
    sudo usermod -aG docker $USER
    
    # Activate the group changes
    newgrp docker
    
  5. Skaffold をインストールします。

    curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \
    sudo install skaffold /usr/local/bin/
    
  6. Migrate to Containers CLI をダウンロードします。

    curl -O "https://m2c-cli-release.storage.googleapis.com/$(curl -s https://m2c-cli-release.storage.googleapis.com/latest)/linux/amd64/m2c"
    chmod +x ./m2c
    

移行元 VM を移行する

移行には通常、移行元 VM のファイル システムをコピーする、ファイル システムを分析して移行計画を作成する、移行アーティファクトを生成する、という 3 つのステップがあります。

以降のセクションでは、ローカル Linux VM を使用して移行元 VM を移行するために Migrate to Containers CLI を使用する方法について説明します。

移行元 VM のファイル システムをコピーする

移行元 VM ファイル システムをコピーするときに、Migrate to Containers CLI は、デフォルトのフィルタを使用して、コピーされたファイル システムのサイズを小さくします。ただし、Apache サーバーを起動できるようにするには、デフォルトのフィルタで削除される /var/log ディレクトリが必要です。

このセクションでは、デフォルトのフィルタを編集して、移行元 VM のファイル システムと一緒に /var/log/* をコピーする方法について説明します。

  1. quickstart-local-vm コマンドタブで、filters.txt というファイルにあるデフォルトの Migrate to Containers フィルタのリストを取得します。

    ./m2c copy default-filters > filters.txt
    
  2. デフォルトのフィルタを編集するには、次の操作を行います。

    1. テキスト エディタで filters.txt ファイルを開きます。

      vi filters.txt
      
    2. ファイルを変更するには、i キーを押します。

    3. 次のステートメントを削除します。

      - /var/log/*
      
    4. ファイルを保存してテキスト エディタを終了するには、Esc キーを押してから「:wq」と入力します。

  3. 移行元マシンのファイル システムをコピーします。

    ./m2c copy gcloud \
      --project PROJECT_ID --zone us-central1-a \
      --vm-name quickstart-source-vm --output quickstart-vm-filesystem \
      --filters filters.txt
    

    PROJECT_ID は、プロジェクトの ID に置き換えます。

    移行元マシンのファイル システムのコピーは、quickstart-vm-filesystem ディレクトリに作成されます。

移行計画を作成する

  • quickstart-local-vm コマンドタブで、移行計画を作成します。

    ./m2c analyze \
      --source quickstart-vm-filesystem --plugin linux-vm-container \
      --output analysis-output
    

    分析が完了すると、analysis-output という新しいディレクトリが作成され、そこに移行計画 config.yaml が保存されます。

移行アーティファクトを生成する

  • quickstart-local-vm コマンドタブで、移行アーティファクトを生成します。

    ./m2c generate --input analysis-output --output migration-artifacts
    

    生成された移行アーティファクトが migration-artifacts ディレクトリに追加されます。

移行したワークロードをデプロイする

このセクションでは、移行したワークロードをローカル VM quickstart-local-vm から Google Cloud で実行されている GKE クラスタにデプロイします。

  1. quickstart-local-vm コマンドタブで、gke-gcloud-auth-plugin プラグインをインストールします。

    sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
    
  2. kubectl をインストールします。

    sudo apt-get install kubectl
    
  3. クラスタ quickstart-cluster に接続します。

    gcloud container clusters get-credentials quickstart-cluster
      --zone us-central1-a --project PROJECT_ID
    
  4. migration-artifacts フォルダを開きます。

    cd migration-artifacts
    
  5. ワークロードをインターネットに公開するには、deployment_spec.yaml ファイルに新しい LoadBalancer サービスを追加します。deployment_spec.yaml ファイルを編集するには、次の操作を行います。

    1. テキスト エディタで deployment_spec.yaml ファイルを開きます。

      vi deployment_spec.yaml
      
    2. ファイルを変更するには、i キーを押します。

    3. linux-system という名前の Service オブジェクトを探します。次のように表示されます。

      ---
      apiVersion: v1
      kind: Service
      metadata:
      creationTimestamp: null
      labels:
         anthos-migrate.cloud.google.com/type: linux-container
         migrate-for-anthos-optimization: "true"
         migrate-for-anthos-version: m2c-cli-1.2.2
      name: linux-system
      spec:
      clusterIP: None
      selector:
         app: linux-system
      type: ClusterIP
      
      ---
      
    4. linux-system の直後に、hello-service という別の Service オブジェクトを追加します。

      ---
      apiVersion: v1
      kind: Service
      metadata:
      creationTimestamp: null
      labels:
         anthos-migrate.cloud.google.com/type: linux-container
         migrate-for-anthos-optimization: "true"
         migrate-for-anthos-version: m2c-cli-1.2.2
      name: linux-system
      spec:
      clusterIP: None
      selector:
         app: linux-system
      type: ClusterIP
      
      ---
      # Add the hello-service object
      apiVersion: v1
      kind: Service
      metadata:
      name: hello-service
      spec:
      selector:
         app: linux-system
      ports:
         - protocol: TCP
            port: 80
            targetPort: 80
      type: LoadBalancer
      
      ---
      
    5. ファイルを保存してテキスト エディタを終了するには、Esc キーを押してから「:wq」と入力します。

  6. 移行した VM をデプロイします。

    skaffold run -d eu.gcr.io/PROJECT_ID
    
  7. 移行後の VM の外部 IP アドレスを取得します。

    kubectl get service hello-service
    
  8. ウェブサーバーの準備が整うと、追加した hello-service の外部 IP アドレスが表示されます。

    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
    hello-service   LoadBalancer   10.23.241.124   EXTERNAL_IP   80:32611/TCP   5m4s
    
  9. 移行が成功したかどうかを確認するには、新しいブラウザタブを開き、外部 IP アドレスを使用してウェブページにアクセスします。

    http://EXTERNAL_IP
    

    HTTPS ではなく HTTP を使用してください。

  10. 画面に「Hello World!」というテキストが表示されたら VM の移行は成功しています。

    移行したワークロードにアクセスできない場合は、既知の問題のトラブルシューティングをご覧ください。

クリーンアップ

このページで使用したリソースに対して Google Cloud アカウントで課金されないようにするには、次の操作を行います。

GKE クラスタを削除する

  1. Google Cloud コンソールで、[GKE] ページに移動します。

    GKE に移動

  2. [quickstart-cluster] を選択して、[削除] をクリックします。
  3. 確認のメッセージが表示されたら、もう一度 [削除] をクリックします。

VM を削除する

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. quickstart-source-vm という名前をクリックします。
  3. インスタンスの詳細ページの上部にある [削除] をクリックします。
  4. quickstart-local-vm という名前をクリックします。
  5. インスタンスの詳細ページの上部にある [削除] をクリックします。

次のステップ