カスタム・イメージを使用したワーカー・ノードでのUbuntuの実行
Ubuntu Linuxディストリビューションを実行するワーカー・ノードを、カスタム・イメージおよびcloud-initスクリプトを使用してKubernetes Engine (OKE)で作成されたクラスタに含める方法を確認します。
Ubuntuは、GPU集中型およびAI/MLワークロードの実行に一般的に使用される一般的なオープンソースのLinuxディストリビューションです。Kubernetes Engine (OKE)でクラスタを作成する場合、カスタム・イメージおよびcloud-initスクリプトを使用して、次のタイプのワーカー・ノードを作成し、Ubuntuを実行できます:
- 管理対象ノード
- 自己管理ノード
カスタム・イメージおよびcloud-initスクリプトを使用してUbuntuを実行する仮想ノードは作成できないことに注意してください。
Ubuntuを実行するワーカー・ノードを作成するプロセスの概要は次のとおりです。
- ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成します。Oracleは様々なUbuntuリリース用のノード・パッケージを提供し、各ノード・パッケージは特定のKubernetesバージョンと互換性があります。詳細は、可用性および互換性を参照してください。
- ステップ2: Ubuntuノード・パッケージのダウンロード元のURLを作成します。Oracleによって提供されるUbuntuノード・パッケージのダウンロード元のURLは、ワーカー・ノードで実行するUbuntuリリースとKubernetesバージョンの両方によって異なります。サポートされているUbuntuリリースとKubernetesバージョンの組合せごとに異なるダウンロードURLがあります。
- ステップ3: Ubuntuノード・パッケージをインストールし、ワーカー・ノードをブートストラップするcloud-initスクリプトを作成します。作成するcloud-initスクリプトは、Ubuntuを実行するワーカー・ノードが管理対象ノードであるか、自己管理ノードであるかによって異なります。
- ステップ4: Ubuntuを実行しているワーカー・ノードをクラスタに追加します。Ubuntuノードをクラスタに追加する方法は、ノードを管理対象ノードとして追加するか、自己管理ノードとして追加するかによって異なります。管理対象ノードの場合は、管理対象ノード・プールを定義します。自己管理ノードの場合、コンピュート・インスタンスをワーカー・ノードとして追加します。
可用性と互換性
この表は、Oracleがノード・パッケージを提供するUbuntuリリースと、各ノード・パッケージが互換性のあるKubernetesバージョンを示しています。Oracleが提供するノード・パッケージは、x86アーキテクチャとARMアーキテクチャの両方で動作するように設計されています。
| Ubuntuリリース | Kubernetes 1.27で使用するパッケージ | Kubernetes 1.28で使用するパッケージ | Kubernetes 1.29で使用するパッケージ | Kubernetes 1.30で使用するパッケージ | Kubernetes 1.31で使用するパッケージ | Kubernetes 1.32で使用するパッケージ | Kubernetes 1.33で使用するパッケージ | Kubernetes 1.34で使用するパッケージ |
|---|---|---|---|---|---|---|---|---|
| Jammy (Ubuntu 22.04) | oci-oke-node-all-1.27.10 |
oci-oke-node-all-1.28.10 |
oci-oke-node-all-1.29.1 |
oci-oke-node-all-1.30.10 |
oci-oke-node-all-1.31.10 |
oci-oke-node-all-1.32.1 |
oci-oke-node-all-1.33.1 |
oci-oke-node-all-1.34.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 |
oci-oke-node-all-1.30.10 |
oci-oke-node-all-1.31.10 |
oci-oke-node-all-1.32.1 |
oci-oke-node-all-1.33.1 |
oci-oke-node-all-1.34.1 |
ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいて、カスタム・イメージを作成します
このステップでは、コンピュート・サービスを使用して、Kubernetesクラスタのワーカー・ノードで必要なUbuntuリリースをすでに実行しているコンピュート・インスタンスからカスタム・イメージを作成します。
イメージは変更しない場合でも、カスタム・イメージとして作成します。
- ワーカー・ノード上でどのUbuntuリリースおよびどのKubernetesバージョンが必要かを決定します。
Oracleは様々なUbuntuリリース用のノード・パッケージを提供し、各ノード・パッケージは特定のKubernetesバージョンと互換性があります。詳細は、可用性および互換性を参照してください。
-
必要なUbuntuリリースを実行している既存のコンピュート・インスタンスを特定します。
これは、カスタム・イメージのベースとして使用するコンピュート・インスタンスです。
適切なコンピュート・インスタンスがまだ存在しない場合は、コンピュート・サービス・ドキュメントのインスタンスの作成の手順に従って、適切なコンピュート・インスタンスを今すぐ作成します。
- コンピュート・サービス・ドキュメントのカスタム・イメージの管理の手順に従って、必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成します。
- 作成したカスタム・イメージのOCIDをノートにとります。
ステップ2: Ubuntuノード・パッケージのダウンロード元のURLの構成
このステップでは、Oracleが提供するUbuntuノード・パッケージをダウンロードするURLを構成します。
ダウンロードURLは、ワーカー・ノードに必要なUbuntuリリースおよびKubernetesバージョンによって異なります。ダウンロードURLには、オブジェクト・ストレージの場所、および特定のUbuntuリリースとKubernetesバージョンの詳細が含まれます。
KubernetesドキュメントのKubernetesバージョン・スキュー・サポート・ポリシーで説明されているように、コントロール・プレーン・ノードおよびワーカー・ノード(自己管理ノードを含む)で実行されているKubernetesのバージョンは、互換性がある必要があることに注意してください。互換性のあるKubernetesバージョンを含むノード・パッケージのダウンロードURLを構築するのはユーザーの責任です。Kubernetes Engineは、指定したノード・パッケージのKubernetesバージョンが、クラスタのコントロール・プレーン・ノードで実行されているKubernetesバージョンと互換性があるかどうかをチェックしません。
次のようにダウンロードURLを作成します。
- 任意のテキスト・エディタで新規テキスト・ファイルをオープンします。
- 次のようにダウンロード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 -
kubernetes-1.30 -
kubernetes-1.31 -
kubernetes-1.32 -
kubernetes-1.33 -
kubernetes-1.34
-
たとえば、ワーカー・ノードで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 -
- (オプション)次のステップでダウンロードURLが必要なため、テキスト・ファイルを便利な場所に保存します。
ステップ3: Ubuntuノード・パッケージをインストールし、ワーカー・ノードをブートストラップするcloud-initスクリプトを作成します。
このステップでは、cloud-initスクリプトを作成して、Oracleが提供するUbuntuノード・パッケージをダウンロードしてインストールし、ワーカー・ノードをブートストラップします。
Ubuntuを管理対象ノードで実行するか、自己管理ノードで実行するかによって、cloud-initスクリプトに追加するロジックが異なることに注意してください。
管理対象ノードのcloud-initスクリプトの作成
管理対象ノードでUbuntuを実行するcloud-initスクリプトを作成するには:
- 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 -
oci-oke-node-all-1.30.10 -
oci-oke-node-all-1.31.10 -
oci-oke-node-all-1.32.1 -
oci-oke-node-all-1.33.1 -
oci-oke-node-all-1.34.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 -
- cloud-initスクリプト・ファイルを保存します。
自己管理ノードのcloud-initスクリプトの作成
自己管理ノードでUbuntuを実行するcloud-initスクリプトを作成するには:
- コンソールまたはCLIを使用して、自己管理ノードのCloud-initスクリプトの作成の手順に従って、自己管理ノードを追加する拡張クラスタのKubernetes APIプライベート・エンドポイントを取得します。
- コンソールまたはCLIを使用して、自己管理ノードのCloud-initスクリプトの作成の手順に従って、クラスタのbase64エンコードCA証明書をクラスタのkubeconfigファイルから取得します。
- 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 -
oci-oke-node-all-1.30.10 -
oci-oke-node-all-1.31.10 -
oci-oke-node-all-1.32.1 -
oci-oke-node-all-1.33.1 -
oci-oke-node-all-1.34.1
Kubernetesマイナー・バージョンは、ダウンロードURLの構築時に指定したKubernetesマイナー・バージョンと一致する必要があります(ステップ2: Ubuntuノード・パッケージのダウンロード元のURLの構成を参照)。
-
-
<cluster-endpoint>は、以前に取得したクラスタのKubernetes APIエンドポイントのIPアドレスです。 -
<base64-encoded-certificate>は、以前に取得した(文字LS0tで始まる)クラスタのbase64エンコードCA証明書です。
たとえば、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 -
- cloud-initスクリプト・ファイルを保存します。
ステップ4: Ubuntuを実行しているワーカー・ノードをクラスタに追加します
このステップでは、前に作成したcloud-initスクリプトを使用して、Ubuntuを実行しているワーカー・ノードをKubernetesクラスタに追加します。
Ubuntuを管理対象ノードで実行するか、自己管理ノードで実行するかによって、従うべき指示が異なります。管理対象ノードの場合は、管理対象ノード・プールを定義します。自己管理ノードの場合、コンピュート・インスタンスをワーカー・ノードとして追加します。
CLIを使用して、カスタム・イメージに基づいて管理対象ノードを作成する必要があります。
Ubuntuワーカー・ノードを管理対象ノードとして追加しています
既存のクラスタでUbuntuを実行している管理対象ノードを追加するには
- コマンド・プロンプトを開き、oci ce node-pool createコマンドを使用して新しいノード・プールを作成します。
- コマンドに必要な必須パラメータ:
--node-image-idパラメータを含めて、ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成するで作成したカスタム・イメージのOCIDを指定します。--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エンコードされることを指定します
-
Linux:
たとえば、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-versionパラメータを使用して指定するKubernetesバージョンは、cloud-initスクリプトで指定したKubernetesバージョンに対応している必要があります(ステップ3: Ubuntuノード・パッケージをインストールしてワーカー・ノードをブートストラップするためのcloud-initスクリプトの作成を参照)。
Ubuntuワーカー・ノードを自己管理ノードとして追加しています
自己管理ノードを作成する前に、次のことを確認します。
- 自己管理ノードを追加するクラスタは、自己管理ノード用に適切に構成されます。Cluster Requirementsを参照してください。
- 動的グループおよびIAMポリシーはすでに存在します。これにより、自己管理ノードをホストするコンピュート・インスタンスが、Kubernetes Engineで作成された拡張クラスタに参加できるようになります。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。
コンソールの使用
- 自己管理ノードをホストする新しいコンピュート・インスタンスを作成します:
- ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
- コンピュート・サービスのドキュメントの手順に従って、新しいコンピュート・インスタンスを作成します。新しいコンピュート・インスタンスが拡張クラスタに参加できるようにするには、適切なポリシーが存在する必要があります。「自己管理ノードの動的グループおよびポリシーの作成」を参照してください。
- 「イメージおよびシェイプ」セクションで、「イメージの変更」を選択します。
- 「マイ・イメージ」を選択し、「イメージOCID」オプションを選択し、「ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成する」で作成したカスタム・イメージのOCIDを入力します。
- 「拡張オプション」を選択し、「管理」セクションで「cloud-initスクリプトの貼付け」オプションを選択します。
- 「ステップ3: cloud-initスクリプトを作成してUbuntuノード・パッケージをインストールし、ワーカー・ノードをブートストラップする」の自己管理ノード用に作成したcloud-initスクリプトを「Cloud-initスクリプト」フィールドにコピーして貼り付けます。
- 自己管理ノードをホストするコンピュート・インスタンスを作成するには、「作成」を選択します。
コンピュート・インスタンスが作成されると、cloud-initスクリプトで指定したKubernetes APIエンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。
- (オプション)自己管理ノードの作成の手順に従って、自己管理ノードがKubernetesクラスタに追加されたこと、およびラベルがノードに追加され、想定どおりに設定されていることを確認します。
CLIの使用
- コマンド・プロンプトを開き、
oci Compute instance launchコマンドおよび必須パラメータを入力して自己管理ノードを作成します。 - コマンドに必要な必須パラメータ:
--image-idパラメータを含めて、ステップ1: 必要なUbuntuリリースを実行している既存のコンピュート・インスタンスに基づいてカスタム・イメージを作成するで作成したカスタム・イメージのOCIDを指定します。--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エンドポイントを使用して、自己管理ノードとしてクラスタに追加されます。