Linux カスタム マシン イメージ(レガシー)

この手順では、AWS、Azure、または vSphere でプランベースのクラスタ(レガシー)を作成するときに使用する Linux カスタム マシン イメージをビルドする方法について説明します。次のセクションに分かれています。Tanzu Kubernetes Grid のクラスタ タイプの詳細については、「Workload クラスタ タイプ」を参照してください。

  • Linux イメージの前提条件」には、カスタムの Linux イメージを正常にビルドして使用するために必要な情報が一覧表示されています。
  • Linux イメージのビルド」では、Kubernetes Image Builder と Docker を使用してイメージをカスタマイズおよびビルドする方法について説明します。
  • Linux イメージ用の TKr の作成」では、Linux イメージを Tanzu Kubernetes リリース (TKr) に変換する方法について説明します。このリリースでは、イメージを将来の Kubernetes バージョンのデフォルトにし、それを使用および管理するためのより多くのオプションを提供します。
  • 管理クラスタに Linux イメージを使用する」では、カスタム イメージをテンプレートとして使用する管理クラスタを展開する方法について説明します。
  • ワークロード クラスタに Linux イメージを使用する」では、カスタム イメージをテンプレートとして使用するワークロード クラスタを展開する方法について説明します。

Linux イメージの前提条件

Linux カスタム マシン イメージをビルドするには、以下が必要です。

  • ターゲット インフラストラクチャ、AWS、Azure、または vSphere 上のアカウント。
  • 以下がインストールされた macOS または Linux ワークステーション:
    • Docker デスクトップ
    • AWS の場合:aws コマンドライン インターフェイス (CLI)
    • Azure の場合:az CLI
    • vSphere の場合:RHEL 8 イメージをビルドするには、macOS ではなく Linux ワークステーションが必要です。

Linux イメージのビルド

  1. AWS および Azure で、インフラストラクチャ CLI にログインします。プロンプトが表示されたら、リージョンを認証して指定します。

    • AWS:aws configure を実行します。
    • Azure:az login を実行します。
  2. Azure で、構成 JSON ファイル azure-sig.json を作成し、Azure 固有の情報を入力します。このようなファイルの例は、こちらで確認できます。

  3. vSphere で、認証情報 JSON ファイルを作成し、その値を入力します。

    {
    "cluster": "",
    "convert_to_template": "false",
    "create_snapshot": "true",
    "datacenter": "",
    "datastore": "",
    "folder": "",
    "insecure_connection": "false",
    "linked_clone": "true",
    "network": "",
    "password": "",
    "resource_pool": "",
    "template": "",
    "username": "",
    "vcenter_server": ""
    }
    
  4. ビルド元の Image Builder 構成バージョンを決定します。

    • VMware {code} Sample ExchangeTKG Image Builder を検索し、使用可能なバージョンを一覧表示します。
    • 各 Image Builder のバージョンは、互換性のある Kubernetes および Tanzu Kubernetes Grid のバージョンに対応しています。たとえば、TKG-Image-Builder-for-Kubernetes-v1.24.10-on-TKG-v2.1.1-master.zip は、Tanzu Kubernetes Grid v2.1.1 の Kubernetes v1.24.10 イメージをビルドします。
    • Tanzu Kubernetes Grid を初めてインストールするときには管理クラスタを作成する必要があります。この場合、Tanzu Kubernetes Grid バージョンのデフォルトの Kubernetes バージョンを選択します。たとえば、Tanzu Kubernetes Grid v2.1.1 では、デフォルトの Kubernetes バージョンは v1.24.10 です。ワークロード クラスタの場合は、v1.24.10 に加えて、Kubernetes v1.23.16 または v1.22.17 イメージをビルドすることもできます。

    次の手順では、Tanzu Kubernetes Grid v2.1.1 の Kubernetes v1.24.10 イメージをビルドする方法について説明します。

  5. 構成コードの zip ファイルをダウンロードし、その内容を展開します。

  6. cdTKG-Image-Builder- ディレクトリに移動し、tkg.json ファイルが現在のディレクトリに配置されるようにします。

  7. ワークステーションが VMware イメージ レジストリ projects.registry.vmware.com にアクセスできることを確認します。

  8. projects.registry.vmware.com から目的のアーティファクト コンテナをダウンロードし、実行します。

    docker pull projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
    
    docker run -d -p 3000:3000 projects.registry.vmware.com/tkg/linux-resource-bundle:v1.24.10_vmware.1-tkg.2
    
  9. tkg.json を編集して <IP> および <PORT> を入力します。

    • IP は、Docker コンテナを実行しているマシンの IP アドレスに対応します。
    • PORT は、Docker ホストの未使用ポートをコンテナのポート 3000 に関連付けます(3001:3000 など)。コンテナは、ポート 3000 を介してアーティファクトを公開します。
  10. Photon-3 OVA をビルドする場合は、tkg.json"extra_rpms" を編集して、サポートされている追加のカスタム パッケージを反映します。

    "extra_rpms": "sysstat nfs-utils ethtool apparmor-parser"
    
  11. FIPS 対応イメージをビルドするには、tkg.json の次の行を削除します。

    "ansible_user_vars": "install_fips=no"
    
  12. インターネット制限:HTTP プロキシ サーバ経由でインターネットにアクセスする、インターネットが制限された環境のイメージをビルドするには、tkg.json ファイルに次の情報を追加します。

    {
      "http_proxy": "http://proxy.acme.com:80",
      "https_proxy": "http://proxy.acme.com:80",
      "no_proxy": "localhost, 127.0.0.1, acme.com, 10.0.0.0/8"
    }
    
  13. GPU 対応クラスタ:vSphere 向けに GPU 対応クラスタのイメージをビルドするには、customizations.json という名前のファイルを作成し、次の内容を追加します。

    {
    "vmx_version": "17"
    }
    
  14. customizations.json を前の手順で編集した tkg.json と同じディレクトリに保存します。

  15. 次のパラメータ文字列を収集して、次の手順でコマンドに接続します。これらの多くは、イメージのビルドに使用されるコンテナの /home/imagebuilder ディレクトリに、現在の作業ディレクトリをコピーする docker run -v パラメータを指定します。

    • AUTHENTICATION:ローカル CLI ディレクトリをコピーします。
      • AWS:~/.aws:/home/imagebuilder/.aws を使用します
      • Azure:~/.azure:/home/imagebuilder/.azure を使用します
      • vSphere:/PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json
    • SOURCES:リポジトリの tkg.json ファイルをコピーします。これにより、バージョン管理された OS、Kubernetes、コンテナ ネットワーク インターフェイス (CNI) のダウンロード ソースが一覧表示されます。イメージ:
      • /PATH/TO/tkg.json:/home/imagebuilder/tkg.json を使用します
    • ROLES:Image Builder で必要な Ansible ロールを含むリポジトリの tkg ディレクトリをコピーします。
      • /PATH/TO/tkg:/home/imagebuilder/tkg を使用します
      • カスタム Ansible ロールを追加するには、tkg.json ファイルを編集して、custom_role_names 設定をエスケープ引用符 (\") で再フォーマットし、複数のロールを持つリストにします。例:
        "custom_role_names": "\"/home/imagebuilder/tkg /home/imagebuilder/mycustomrole\"",
    • TESTS:イメージのターゲット インフラストラクチャ、OS、および Kubernetes バージョン用に設計された goss テスト ディレクトリをコピーします。
      • リポジトリの goss ディレクトリにあるファイルのファイル名を使用します(amazon-ubuntu-1.24.10+vmware.1-goss-spec.yaml など)。
    • CUSTOMIZATIONS:カスタマイズ ファイルを JSON 形式でコピーします。Image Builder ドキュメントの「カスタマイズ」を参照してください。変更を加える前に、ベスト プラクティスと推奨事項について VMware Customer Reliability Engineering (CRE) にお問い合わせください。
    • PACKER_VAR_FILES:Packer の変数を含む上記の JSON ファイルのスペース区切りリスト。
    • (Azure) AZURE-CREDSImage Builder ドキュメントに記載されている Azure 認証情報ファイルのパス。
    • COMMAND:カスタム イメージ OS に基づいて、次のいずれかのコマンドを使用します。vSphere および Azure イメージの場合、コマンドは build-node-ova- および build-azure-sig- で始まります。
      • build-ami-ubuntu-2004:Ubuntu v20.04
      • build-ami-ubuntu-1804:Ubuntu v18.04
      • build-ami-amazon-2:Amazon Linux 2
      • build-node-ova-vsphere-ubuntu-2004:GPU 対応クラスタ
  16. 上記の文字列を使用して、VMware レジストリ projects.registry.vmware.com からプルされた Docker コンテナで Image Builder を実行します。

    docker run -it --rm \
        -v AUTHENTICATION \
        -v SOURCES \
        -v ROLES \
        -v /PATH/TO/goss/TESTS.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json:/home/imagebuilder/CUSTOMIZATIONS.json \
        --env PACKER_VAR_FILES="tkg.json CUSTOMIZATIONS.json" \
        --env-file AZURE-CREDS \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
        COMMAND
    

    Azure 用のイメージをビルドしていない場合は、env-file を省略します。このコマンドは完了までに数分かかる場合があります。

    たとえば、AWS で実行する Ubuntu v20.04 と Kubernetes v1.24.10 を使用してカスタム イメージを作成するには、tkg.json を含むディレクトリから実行します。

    docker run -it --rm \
        -v ~/.aws:/home/imagebuilder/.aws \
        -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
        -v $(pwd)/tkg:/home/imagebuilder/tkg \
        -v $(pwd)/goss/amazon-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
        -v /PATH/TO/CUSTOMIZATIONS.json /home/imagebuilder/aws.json \
        --env PACKER_VAR_FILES="tkg.json aws.json" \
        --env IB_OVFTOOL=1 \
        projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
        build-ami-ubuntu-2004
    

    vSphere の 場合は、上記で作成したカスタム コンテナ イメージを使用する必要があります。また、後の手順でカスタム TKr で渡した文字列と一致するバージョン文字列を設定する必要があります。VMware によって公開された OVA には v1.24.10+vmware.1-tkg.1 のようなバージョン文字列が含まれますが、-tkg.1 を組織にとって意味のある文字列で置換することを推奨します。このバージョン文字列を設定するには、次のように metadata.json ファイルで定義します。

    {
      "VERSION": "v1.24.10+vmware.1-myorg.0"
    }
    

    OVA をビルドするときに、.ova ファイルはワークステーションのローカル ファイルシステムに保存されます。これらの OVA を保存するフォルダは、コンテナ内の /home/imagebuilder/output にマウントする必要があります。次に、コンテナ イメージを使用して OVA を作成します。

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
      build-node-ova-vsphere-ubuntu-2004
    

    GPU 対応クラスタの場合は、コマンドを実行して OVA を作成するときに、上記の手順で作成した customizations.json ファイルを含める必要があります。

    docker run -it --rm \
      -v /PATH/TO/CREDENTIALS.json:/home/imagebuilder/vsphere.json \
      -v $(pwd)/tkg.json:/home/imagebuilder/tkg.json \
      -v $(pwd)/tkg:/home/imagebuilder/tkg \
      -v $(pwd)/goss/vsphere-ubuntu-1.24.10+vmware.1-goss-spec.yaml:/home/imagebuilder/goss/goss.yaml \
      -v $(pwd)/metadata.json:/home/imagebuilder/metadata.json \
      -v $(pwd)/customizations.json:/home/imagebuilder/customizations.json \
      -v /PATH/TO/OVA/DIR:/home/imagebuilder/output \
      --env PACKER_VAR_FILES="tkg.json vsphere.json customizations.json" \
      --env OVF_CUSTOM_PROPERTIES=/home/imagebuilder/metadata.json \
      --env IB_OVFTOOL=1 \
      projects.registry.vmware.com/tkg/image-builder:v0.1.13_vmware.2 \
      build-node-ova-vsphere-ubuntu-2004
    

    RHEL:RHEL OVA をビルドするには、macOS ではなく Linux マシンを使用する必要があります。これは、macOS の Docker が --network host オプションをサポートしていないためです。
    また、上記の docker run コマンドに次のコマンドを追加して、Red Hat にライセンスされた OS を登録し、アップデートにサインアップする必要があります。

      -v $(pwd)/isos/rhel-8.4-x86_64-dvd.iso:/rhel-8.4-x86_64-dvd.iso \
      --network host \
      --env RHSM_USER=USER --env RHSM_PASS=PASS
    

    ここで、

    • RHSM_USERRHSM_PASS は、Red Hat Subscription Manager アカウントのユーザー名とパスワードです。
    • 上記の例の $(pwd)/isos/rhel-8.4-x86-64-dvd.iso にあるローカル RHEL ISO パスを追加ボリュームとしてマッピングします。

Linux イメージ用の TKr の作成

Linux イメージを将来の Kubernetes バージョンのデフォルトにするには、それに基づいて TKr を作成します。それ以外の場合は、「ワークロード クラスタに Linux イメージを使用する」に進みます。

次の図は、vSphere でカスタム Linux イメージの TKr を作成する方法の概要を示しています。

TKr の作成

TKr を作成するには:

  1. ~/.config/tanzu/tkg/bom/ ディレクトリから、カスタム イメージの Kubernetes バージョンに対応する TKr BoM を開きます。たとえば、Kubernetes v1.24.10 の場合は tkr-bom-v1.24.10+vmware.1-tkg.1.yaml のようなファイル名を使用します。

    ディレクトリに必要な TKr BoM ファイルがない場合は、「デフォルト以外の Kubernetes バージョンを使用してクラスタを展開する」の説明に従って、目的の Kubernetes バージョンのクラスタを展開して、このファイルを取り込むことができます。

    1. BoM ファイルで、インフラストラクチャのイメージ定義ブロックを見つけます。vSphere の場合は ova、AWS の場合は ami、Azure の場合は azure です。各イメージ定義ブロックには、osinfo.nameosinfo.version、および osinfo.arch が含まれます。

      • osinfo.name は OS 名です。たとえば、ubuntu などです。サポートされている OS のリストを表示するには、「ターゲットのオペレーティング システム」を参照してください。
      • osinfo.version は OS バージョンです。たとえば、20.04 などです。サポートされているバージョンのリストを表示するには、「ターゲットのオペレーティング システム」を参照してください。
      • osinfo.arch は OS アーキテクチャです。サポートされる値は amd64 です。
    2. 新しい OS イメージへの参照を追加するには、ターゲット インフラストラクチャに応じて、ovaami、または azure の下にイメージ定義ブロックを追加します。イメージ定義ブロックには、前述のように、osinfo.nameosinfo.version、および osinfo.arch が含まれている必要があります。さらに、イメージ定義ブロックを追加する場合は、次のようにします。

      • vSphere:

        • name: は、OS バージョンを含む OVA の一意の名前です(my-ova-ubuntu-2004 など)。
        • version: には、OVA を作成したときに metadata.json で割り当てられた一意の VERSION を使用します(v1.24.10+vmware.1-myorg.0 など)。

        version は、metadata.json 内の同じ VERSION と完全に一致する必要があります。

      • AWS:カスタム イメージを使用する予定のリージョンごとに、既存の id 値形式に従います。ただし、末尾には一意の 16 進数の文字列を使用します(ami-693a5e2348b25e428 など)。

      BoM ファイルでリージョンの下にイメージが定義されている場合は、カスタム イメージ定義ブロックがそのリージョンの最初にリストされている必要があります。各リージョン内で、クラスタの作成プロセスによって、リストされた最初の適切なイメージが選択されます。

    3. release.version 値で、サフィックスを追加してカスタム バージョンを設定します。プリフィックスを追加してバージョンをカスタマイズしないでください。たとえば、v1.24.10+vmware.1-tkg.1v1.24.10+vmware.1-tkg.1-mycustomtkr に変更します。

    4. 前の手順で release.version に指定したのと同じカスタム サフィックスを使用して BoM ファイルを保存します。

      ファイル名にプラス記号 (+) が含まれている場合は、+ を 3 つのダッシュ (---) に置き換えます。

      たとえば、BOM ファイルを tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml として保存します。

  2. ファイルのコンテンツをバイナリ文字列に base64 エンコードします。次に例を示します。

    cat tkr-bom-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml | base64 -w 0
    
  3. ConfigMap YAML ファイルを作成します。たとえば、configmap-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml という名前を付けて、次のような値を指定します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: CUSTOM-TKG-BOM
     labels:
       tanzuKubernetesRelease: CUSTOM-TKR
    binaryData:
     bomContent: "BOM-BINARY-CONTENT"
    

    ここで、

    • CUSTOM-TKG-BOMConfigMap の名前です。BOM ファイルで指定した TKr release.version 値を含め、+ 記号を 3 つのダッシュ (—) で置き換える必要があります。たとえば、v1.24.10---vmware.1-tkg.1-mycustomtkr を設定します。
    • CUSTOM-TKR は TKr の名前で、CUSTOM-TKG-BOM に指定した値と一致する必要があります。たとえば、v1.24.10---vmware.1-tkg.1-mycustomtkr などです。
    • BOM-BINARY-CONTENT は、前の手順で生成したカスタマイズされた BoM ファイルの base64 エンコードされたコンテンツです。

    例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: v1.24.10---vmware.1-tkg.1-mycustomtkr
     labels:
       tanzuKubernetesRelease: v1.24.10---vmware.1-tkg.1-mycustomtkr
    binaryData:
     bomContent: "YXBpVmVyc2lvbjogcnVuLnRhbnp1...."
    
  4. ConfigMap ファイルを保存し、kubectl コンテキストを TKr を追加する管理クラスタに設定し、次のようにファイルをクラスタに適用します。

    kubectl -n tkr-system apply -f configmap-v1.24.10---vmware.1-tkg.1-mycustomtkr.yaml
    

    TKr コントローラは、TanzuKubernetesRelease を作成して、新しい ConfigMap オブジェクトを調整します。デフォルトの調整時間は 600 秒です。この遅延を回避するには、TKr コントローラ ポッドを削除します。これにより、ポッドがすぐにリストアされ、調整されます。

    1. tkr-system 名前空間内のポッドを一覧表示します。

      kubectl get pod -n tkr-system
      
    2. TKr コントローラ ポッドの名前を取得します。たとえば、tkr-controller-manager-f7bbb4bd4-d5lfd のようになります。

    3. ポッドを削除します。

      kubectl delete pod -n tkr-system TKG-CONTROLLER
      

      ここで、TKG-CONTROLLER は TKr コントローラ ポッドの名前です。

  5. カスタム TKr が追加されたことを確認するには、tanzu kubernetes-release get または kubectl get tkr を実行するか、上記で設定した CUSTOM-TKR 値を出力で探します。

カスタム TKr が kubectl および tanzu CLI によって一覧表示されたら、それを使用して以下の説明に従って管理クラスタまたはワークロード クラスタを作成できます。

管理クラスタに Linux イメージを使用する

ノードの基本 OS としてカスタム イメージを使用する管理クラスタを作成するには、次の手順を実行します。

  1. クラウド プロバイダにイメージをアップロードします。

  2. インストーラ インターフェイスを実行するときに、「基本 OS イメージを選択する」の説明に従って、[OS イメージ (OS Image)] ペインでカスタム イメージを選択します。

詳細については、「基本 OS イメージの選択を生成する方法」を参照してください。

ワークロード クラスタに Linux イメージを使用する

Linux イメージからワークロード クラスタを作成する手順は、上記の「Linux イメージ用の TKr の作成」で TKr を作成したかどうかによって異なります。

  • TKr を作成した場合は、tanzu kubernetes-release get によってリストされた TKr 名を tanzu cluster create--tkr オプションに渡します。

  • TKr を作成しなかった場合は、次の手順を実行します。

    1. 構成ファイルとオブジェクト仕様」の手順に従って、管理クラスタ構成ファイルをコピーして新しい名前で保存します。

    2. 新しい構成ファイルで、以下を追加または変更します。

      VSPHERE_TEMPLATE: LINUX-IMAGE
      

      ここで、LINUX-IMAGE は、「Linux イメージのビルド」で作成した Linux イメージの名前です。

      CLUSTER_NAME とその設定が存在する場合は削除します。

    3. ワークロード クラスタの作成」の説明に従って、ワークロード クラスタを展開します。

check-circle-line exclamation-circle-line close-line
Scroll to top icon