デプロイする Linux クラスタを準備する
このページでは、デプロイするターゲット クラスタの準備方法について説明します。
始める前に
このドキュメントは、すでに移行を完了し、生成されたアーティファクトがあることを前提としています。
ターゲット クラスタに Docker レジストリへの読み取りアクセス権が付与されていることを確認する
移行処理の中で、Migrate to Containers は移行された VM を表す Docker イメージを Docker レジストリにアップロードします。こうした Docker イメージは、移行する VM のファイルとディレクトリを表します。
Docker レジストリには、次のものを使用できます。
基本認証をサポートする任意の Docker レジストリ
詳細については、データ リポジトリの定義をご覧ください。
移行に使用していない Google Cloud プロジェクトにワークロードをデプロイする
多くの場合、環境には複数の Google Cloud プロジェクトがあります。1 つの Google Cloud プロジェクトで移行を実行した後、移行したワークロードを別のプロジェクトのクラスタにデプロイする場合は、権限が正しく構成されていることを確認する必要があります。
たとえば、プロジェクト A で移行を行います。この場合、移行したワークロードはプロジェクト A の Container Registry バケットにコピーされます。例:
gcr.io/project-a/image_name:image_tag
次に、プロジェクト B のクラスタにワークロードをデプロイします。プロジェクト B のクラスタにはプロジェクト A にイメージを pull する権限がないため、権限を正しく構成しないと、ワークロード Pod の実行に失敗します。次の形式のメッセージを含むイベントが Pod に表示されます。
Failed to pull image "gcr.io/project-a/image_name:image_tag... pull access denied... repository does not exist or may acquire 'docker login'...
Compute Engine API が有効になっているプロジェクトには、Compute Engine のデフォルトのサービス アカウントが作成されます。このアカウントには次のメールアドレスが設定されます。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
ここで、PROJECT_NUMBER はプロジェクト B のプロジェクト番号です。
この問題を回避するには、プロジェクト B の Compute Engine のデフォルト サービス アカウントに Container Registry バケットへのアクセスに必要な権限を設定します。たとえば、次の gcloud storage
コマンドを使用してアクセスを有効にします。
gcloud storage buckets add-iam-policy-binding gs://artifacts.project-a.appspot.com --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
ターゲット クラスタへのデプロイで Container Registry を Docker レジストリとして使用する
ターゲット クラスタが Container Registry にアクセスできるようにするには、Container Registry へのアクセスに必要な認証情報を含む Kubernetes Secret を作成します。
Container Registry と Cloud Storage にアクセスするためのサービス アカウントを作成するで説明されているように、移行をデプロイするためのサービス アカウントを作成します。
このプロセスでは、
m4a-install.json
という名前の JSON キーファイルをダウンロードする必要があります。Container Registry にアクセスするために必要な認証情報を含む Kubernetes Secret を作成します。
kubectl create secret docker-registry gcr-json-key \ --docker-server=gcr.io --docker-username=_json_key --docker-password="$(cat ~/m4a-install.json.json)" \ --docker-email=account@project.iam.gserviceaccount.com
ここで
docker-registry
には、Kubernetes Secret の名前(この例では gcr-json-key)を指定します。docker-server=gcr.io
には、サーバーとして Container Registry を指定します。docker-username=_json_key
は、ユーザー名が JSON キーファイルに含まれていることを指定します。docker-password
は、JSON キーファイルからパスワードを使用する場合に指定します。docker-email
には、サービス アカウントのメールアドレスを指定します。
次のいずれかの方法で、Kubernetes Secret を設定します。
デフォルトの
imagePullSecrets
値を次のように変更します。kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'
deployment_spec.yaml
ファイルを編集して、spec.template.spec
定義にimagePullSecrets
値を追加します。WebSphere traditional を使用する場合、Deployment YAML ファイルはターゲットに応じてtwas_deployment_spec.yaml
、liberty_deployment_spec.yaml
、またはopenliberty_deployment_spec.yaml
という名前になります。spec: containers: - image: gcr.io/PROJECT_ID/mycontainer-instance:v1.0.0 name: mycontainer-instance ... volumes: - hostPath: path: /sys/fs/cgroup type: Directory name: cgroups imagePullSecrets: - name: gcr-json-key
PROJECT_ID は、実際のプロジェクト ID に置き換えます。
secrets.yaml
が存在する場合、ワークロード シークレットをデプロイします。Liberty を使用して、Tomcat ベースのワークロードと WebSphere traditional ベースのワークロード用に Secrets ファイルが作成されます。Liberty ファイルの名前はliberty-secrets.yaml
です。kubectl apply -f secrets.yaml
Docker レジストリを使用してターゲット クラスタに基本認証でデプロイする
Docker レジストリを使用して移行イメージを保存する場合は、レジストリでユーザー名とパスワードを使用した基本認証がサポートされている必要があります。Docker レジストリへの読み取り専用接続を構成する方法は多数あるため、クラスタ プラットフォームと Docker レジストリに適した方法を使用する必要があります。
次のステップ
- Linux ベースのワークロードをビルドしてデプロイする方法を学習する。
- Windows ベース ワークロードの移行アーティファクトをカスタマイズする方法を学習する。
- Windows ベースのワークロードをビルドしてデプロイする方法を学習する。
- Linux システム コンテナをデプロイするために生成されたファイルの確認方法を学習する。