カスタム・イメージを使用したワーカー・ノードでのUbuntuの実行

Ubuntu Linuxディストリビューションを実行するワーカー・ノードを、カスタム・イメージおよびcloud-initスクリプトを使用してKubernetes Engine (OKE)で作成されたクラスタに含める方法を確認します。

Ubuntuは、GPU集中型およびAI/MLワークロードの実行に一般的に使用される一般的なオープンソースのLinuxディストリビューションです。Kubernetes Engine (OKE)でクラスタを作成する場合、カスタム・イメージおよびcloud-initスクリプトを使用して、次のタイプのワーカー・ノードを作成し、Ubuntuを実行できます:

  • 管理対象ノード
  • 自己管理ノード

カスタム・イメージおよびcloud-initスクリプトを使用してUbuntuを実行する仮想ノードは作成できないことに注意してください。

Ubuntuを実行するワーカー・ノードを作成するプロセスの概要は次のとおりです。

可用性と互換性

この表は、Oracleがノード・パッケージを提供するUbuntuリリースと、各ノード・パッケージが互換性のあるKubernetesバージョンを示しています。Oracleが提供するノード・パッケージは、x86アーキテクチャとARMアーキテクチャの両方で動作するように設計されています。

Ubuntuリリース Kubernetes 1.27で使用するパッケージ Kubernetes 1.28で使用するパッケージ Kubernetes 1.29で使用するパッケージ
ジャミー(Ubuntu 22.04) oci-oke-node-all-1.27.10 oci-oke-node-all-1.28.10 oci-oke-node-all-1.29.1
Noble (Ubuntu 24.04) oci-oke-node-all-1.27.10 oci-oke-node-all-1.28.10 oci-oke-node-all-1.29.1

ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいて、カスタム・イメージを作成します

このステップでは、コンピュート・サービスを使用して、Kubernetesクラスタのワーカー・ノードで必要なUbuntuリリースをすでに実行しているコンピュート・インスタンスからカスタム・イメージを作成します。

イメージは変更しない場合でも、カスタム・イメージとして作成します。

  1. ワーカー・ノード上でどのUbuntuリリースおよびどのKubernetesバージョンが必要かを決定します。

    Oracleは様々なUbuntuリリース用のノード・パッケージを提供し、各ノード・パッケージは特定のKubernetesバージョンと互換性があります。詳細は、可用性および互換性を参照してください。

  2. 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスを特定します。

    これは、カスタム・イメージのベースとして使用するコンピュート・インスタンスです。

    適切なコンピュート・インスタンスがまだ存在しない場合は、コンピュート・サービス・ドキュメントのインスタンスの作成の手順に従って、適切なコンピュート・インスタンスを今すぐ作成します。

  3. コンピュート・サービス・ドキュメントのカスタム・イメージの管理の手順に従って、必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成します。
  4. 作成したカスタム・イメージのOCIDをノートにとります。

ステップ2: Ubuntuノード・パッケージのダウンロード元のURLの構成

このステップでは、Oracleが提供するUbuntuノード・パッケージをダウンロードするURLを構成します。

ダウンロードURLは、ワーカー・ノードに必要なUbuntuリリースおよびKubernetesバージョンによって異なります。ダウンロードURLには、オブジェクト・ストレージの場所、および特定のUbuntuリリースとKubernetesバージョンの詳細が含まれます。

KubernetesドキュメントのKubernetesバージョン・スキュー・サポート・ポリシーで説明されているように、コントロール・プレーン・ノードおよびワーカー・ノード(自己管理ノードを含む)で実行されているKubernetesのバージョンは、互換性がある必要があることに注意してください。互換性のあるKubernetesバージョンを含むノード・パッケージのダウンロードURLを構築するのはユーザーの責任です。Kubernetes Engineは、指定したノード・パッケージのKubernetesバージョンが、クラスタのコントロール・プレーン・ノードで実行されているKubernetesバージョンと互換性があるかどうかをチェックしません。

次のようにダウンロードURLを作成します。

  1. 任意のテキスト・エディタで新規テキスト・ファイルをオープンします。
  2. 次のようにダウンロードURLを作成します。
    https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/<ubuntu-release>/<kubernetes-version> stable main

    ここでは:

    • <ubuntu-release>は、ワーカー・ノードで実行するUbuntuのリリースに従って、次のいずれかです。

      • ubuntu-jammy (Ubuntu 22.04)
      • ubuntu-noble (Ubuntu 24.04)
    • <kubernetes-version>は、ワーカー・ノードで実行するKubernetesのバージョンに従って、次のいずれかです:
      • kubernetes-1.27
      • kubernetes-1.28
      • kubernetes-1.29

    たとえば、ワーカー・ノードでUbuntu 22.04およびKubernetesバージョン1.29を実行する場合は、適切なノード・パッケージの次のダウンロードURLを構成します:

    https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-noble/kubernetes-1.29 stable main
  3. (オプション)次のステップでダウンロードURLが必要なため、テキスト・ファイルを便利な場所に保存します。

ステップ3: Ubuntuノード・パッケージをインストールし、ワーカー・ノードをブートストラップするcloud-initスクリプトを作成します。

このステップでは、cloud-initスクリプトを作成して、Oracleが提供するUbuntuノード・パッケージをダウンロードしてインストールし、ワーカー・ノードをブートストラップします。

Ubuntuを管理対象ノードで実行するか、自己管理ノードで実行するかによって、cloud-initスクリプトに追加するロジックが異なることに注意してください。

管理対象ノードのcloud-initスクリプトの作成

管理対象ノードでUbuntuを実行するcloud-initスクリプトを作成するには:

  1. cloud-initでサポートされているファイル・タイプ(.yamlなど)を使用して新しいcloud-initスクリプト・ファイルを最初から作成し、次のロジックをスクリプト・ファイルに追加します。
    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] <download-url>}
    packages:                                                       
     - <oci-package-name>
    runcmd:
     - oke bootstrap

    ここでは:

    • <download-url>は、前のステップで作成したUbuntuノード・パッケージをダウンロードするURLです(ステップ2: Ubuntuノード・パッケージをダウンロードするURLの構成を参照)。たとえば、https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable mainです。
    • <oci-package-name>は、管理対象ノードで実行するKubernetesのバージョンに従って、次のいずれかです:
      • oci-oke-node-all-1.27.10
      • oci-oke-node-all-1.28.10
      • oci-oke-node-all-1.29.1

      Kubernetesマイナー・バージョンは、ダウンロードURLの構築時に指定したKubernetesマイナー・バージョンと一致する必要があります(ステップ2: Ubuntuノード・パッケージのダウンロード元のURLの構成を参照)。

    たとえば、管理対象ノードでUbuntu 22.04 (jammy)およびKubernetesバージョン1.29.1を実行する場合は、次のロジックをスクリプト・ファイルに追加します:

    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main}
    packages:                                                       
     - oci-oke-node-all-1.29.1
    runcmd:
     - oke bootstrap
  2. cloud-initスクリプト・ファイルを保存します。

自己管理ノードのcloud-initスクリプトの作成

自己管理ノードでUbuntuを実行するcloud-initスクリプトを作成するには:

  1. 自己管理ノード用のCloud-initスクリプトの作成の手順に従って、コンソールまたはCLIを使用して、自己管理ノードを追加する拡張クラスタのKubernetes APIプライベート・エンドポイントを取得します。
  2. 自己管理ノード用のCloud-initスクリプトの作成の手順に従って、コンソールまたはCLIを使用して、クラスタのkubeconfigファイルからクラスタのbase64エンコードCA証明書を取得します。
  3. cloud-initでサポートされているファイル・タイプ(.yamlなど)を使用して新しいcloud-initスクリプト・ファイルを最初から作成し、次のロジックをスクリプト・ファイルに追加します。
    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] <download-url>}
    packages:
     - <oci-package-name>
    write_files:
    - path: /etc/oke/oke-apiserver
     permissions: '0644'
     content: <cluster-endpoint>
    - encoding: b64
     path: /etc/kubernetes/ca.crt
     permissions: '0644'
     content: <base64-encoded-certificate>
    runcmd:
      - oke bootstrap --ca <base64-encoded-certificate> --apiserver-host <cluster-endpoint>

    ここでは:

    • <download-url>は、前のステップで作成したUbuntuノード・パッケージをダウンロードするURLです(ステップ2: Ubuntuノード・パッケージをダウンロードするURLの構成を参照)。たとえば、https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable mainです。
    • <oci-package-name>は、自己管理ノードで実行するKubernetesのバージョンに従って、次のいずれかです:

      • oci-oke-node-all-1.27.10
      • oci-oke-node-all-1.28.10
      • oci-oke-node-all-1.29.1

      Kubernetesマイナー・バージョンは、ダウンロードURLの構築時に指定したKubernetesマイナー・バージョンと一致する必要があります(ステップ2: Ubuntuノード・パッケージのダウンロード元のURLの構成を参照)。

    • <cluster-endpoint>は、以前に取得したクラスタのKubernetes APIエンドポイントのIPアドレスです。
    • <base64-encoded-certificate>は、以前に取得したクラスタのbase64でエンコードされたCA証明書です(文字LS0tから開始)。

    たとえば、Ubuntu 22.04 (Jammy)およびKubernetesバージョン1.29.1を自己管理ノードで実行する場合は、次のロジックをスクリプト・ファイルに追加します。

    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main}
    packages:
     - oci-oke-node-all-1.29.1
    write_files:
    - path: /etc/oke/oke-apiserver
     permissions: '0644'
     content: 10.114.0.5
    - encoding: b64
     path: /etc/kubernetes/ca.crt
     permissions: '0644'
     content: LS0tLS1...LS0tCg==
    runcmd:
      - oke bootstrap --ca LS0tLS1...LS0tCg== --apiserver-host 10.114.0.5
  4. cloud-initスクリプト・ファイルを保存します。

ステップ4: Ubuntuを実行しているワーカー・ノードをクラスタに追加します

このステップでは、前に作成したcloud-initスクリプトを使用して、Ubuntuを実行しているワーカー・ノードをKubernetesクラスタに追加します。

Ubuntuを管理対象ノードで実行するか、自己管理ノードで実行するかによって、従うべき指示が異なります。管理対象ノードの場合は、管理対象ノード・プールを定義します。自己管理ノードの場合、コンピュート・インスタンスをワーカー・ノードとして追加します。

CLIを使用して、カスタム・イメージに基づいて管理対象ノードを作成する必要があります。

Ubuntuワーカー・ノードを管理対象ノードとして追加しています

既存のクラスタでUbuntuを実行している管理対象ノードを追加するには

  1. コマンド・プロンプトを開き、oci ce node-pool createを使用して新しいノード・プールを作成します。
  2. コマンドに必要な必須パラメータ:
    1. --node-image-idパラメータを含めて、ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成するで作成したカスタム・イメージのOCIDを指定します。
    2. --node-metadataパラメータを含めて、ステップ3: Ubuntuノード・パッケージをインストールしてワーカー・ノードをブートストラップするcloud-initスクリプトを作成するで、管理対象ノード用に作成したcloud-initスクリプトを環境に適した形式で指定します。
      • Linux: --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64 -w 0)'"}'
      • Mac: --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64- b 0)'"}'
      ここでは:
      • <cloud-init-file>は、作成したcloud-initファイルの名前です。
      • base64は、ファイルがbase64エンコードされることを指定します

    たとえば、Macワークステーションで次のコマンドを入力できます。

    oci ce node-pool create \
    --cluster-id ocid1.cluster.oc1.iad.aaaa______m4w \
    --name my-ubuntu-nodepool \
    --node-image-id ocid1.image.oc1.iad.aaaa______zpq \
    --compartment-id ocid1.tenancy.oc1..aaa______q4a \
    --kubernetes-version v1.29.1 \
    --node-shape VM.Standard2.1 \
    --placement-configs "[{\"availabilityDomain\":\"PKGK:US-ASHBURN-AD-1\", \"subnetId\":\"ocid1.subnet.oc1.iad.aaaa______kfa\"}]" \
    --size 3 \
    --region us-ashburn-1 \
    --node-metadata '{"user_data": "'$(cat my-mgd-ubuntu-cloud-init.yaml | base64 -b 0)'"}'

    Kubernetesのバージョンは、cloud-initスクリプトで指定したKubernetesのバージョンと一致する必要があります(ステップ3: Ubuntuノード・パッケージをインストールしてワーカー・ノードをブートストラップするためのcloud-initスクリプトの作成を参照)。

    --kubernetes-versionパラメータを使用して指定するKubernetesバージョンは、cloud-initスクリプトで指定したKubernetesバージョンに対応している必要があります(ステップ3: Ubuntuノード・パッケージをインストールしてワーカー・ノードをブートストラップするためのcloud-initスクリプトの作成を参照)。

Ubuntuワーカー・ノードを自己管理ノードとして追加しています

自己管理ノードを作成する前に、次のことを確認します。

  • 自己管理ノードを追加するクラスタは、自己管理ノード用に適切に構成されます。Cluster Requirementsを参照してください。
  • 自己管理ノードをホストするコンピュート・インスタンスが、Kubernetes Engineで作成された拡張クラスタに参加できるようにするための動的グループおよびIAMポリシーがすでに存在します。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。

コンソールの使用

  1. 自己管理ノードをホストする新しいコンピュート・インスタンスを作成します:
    1. ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
    2. 新しいコンピュート・インスタンスを作成するには、コンピュート・サービスのドキュメントの手順に従います。新しいコンピュート・インスタンスが拡張クラスタに参加できるようにするには、適切なポリシーが存在する必要があります。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。
    3. イメージとシェイプ」セクションで、「イメージの変更」をクリックします。
    4. 「マイ・イメージ」をクリックし、「イメージOCID」オプションを選択して、ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成するで作成したカスタム・イメージのOCIDを入力します。
    5. 「拡張オプションの表示」をクリックし、「管理」タブで「cloud-initスクリプトの貼付け」オプションを選択します。
    6. ステップ3: cloud-initスクリプトを作成してUbuntuノード・パッケージをインストールし、ワーカー・ノードをブートストラップするで、自己管理ノード用に作成したcloud-initスクリプトをコピーして、Cloud-initスクリプト・フィールドに貼り付けます。
    7. 「作成」をクリックして、自己管理ノードをホストするコンピュート・インスタンスを作成します。

    コンピュート・インスタンスが作成されると、cloud-initスクリプトで指定したKubernetes APIエンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。

  2. (オプション)自己管理ノードの作成の手順に従って、自己管理ノードがKubernetesクラスタに追加され、ラベルがノードに追加され、想定どおりに設定されていることを確認します。

CLIの使用

  1. コマンド・プロンプトを開き、oci Compute instance launchコマンドおよび必要なパラメータを入力して自己管理ノードを作成します。
  2. コマンドに必要な必須パラメータ:
    1. --image-idパラメータを含めて、ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成するで作成したカスタム・イメージのOCIDを指定します。
    2. --user-data-fileパラメータを含めて、ステップ3: Ubuntuノード・パッケージをインストールしてワーカー・ノードをブートストラップするためのcloud-initスクリプトの作成で自己管理ノード用に作成したcloud-initスクリプトを指定します。

    たとえば、次のコマンドを入力できます。

    oci compute instance launch \
    --availability-domain zkJl:PHX-AD-1 \
    --compartment-id ocid1.compartment.oc1..aaaaaaa______neoq \
    --shape VM.Standard2.2 \
    --subnet-id ocid1.subnet.oc1.phx.aaaaaaa______hzia \
    --user-data-file my-selfmgd-ubuntu-cloud-init.yaml \
    --image-id ocid1.image.oc1.phx.aaaaaaa______slcr

    コンピュート・インスタンスが作成されると、cloud-initスクリプトで指定したKubernetes APIエンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。