Armベース・ノードでのアプリケーションの実行
Kubernetes Engine (OKE)を使用して作成されたクラスタ内のArmベースのワーカー・ノードでアプリケーションを実行する方法をご覧ください。
Armベースのワーカー・ノードでアプリケーションを実行するには、管理対象ノード・プールとArmベースのシェイプを選択します。シェイプによって、ノード・プール内の各ノードに割り当てるCPU数とメモリー量が決まります。Armベースのベア・メタル・シェイプと柔軟なVMシェイプを選択できます。これらのAmpere A1コンピュート・インスタンスは、Ampere Altraプロセッサに基づいています(Armベースのコンピュートを参照)。これらのシェイプのOCPU数、メモリー、ストレージおよびネットワーキングの詳細は、コンピュート・シェイプを参照してください。
新しいクラスタの作成時に、コンソール、APIおよびCLIを使用して、ノード・プールのArmベースのシェイプを指定できます。新しいノード・プールの作成時にArmベースのシェイプを指定することもできます。コンソール・ワークフローを使用したKubernetesクラスタの作成および更新済プロパティを使用したワーカー・ノードの作成のノード・プール構成ステップをそれぞれ参照してください。
使用可能な予約可能なArmベースのコアの数を表示するには、コンソールを使用します。ナビゲーション・メニューを開き、「ガバナンスと管理」を選択します。「テナント管理」で、「制限、割当ておよび使用状況」を選択します。
Armベースのシェイプは、他のシェイプと比較して、より優れたコスト・パフォーマンス、より優れたセキュリティ分離(各コアがシングルスレッドであるため)、より一貫したパフォーマンスを実現します。通常、開発者は、KubernetesクラスタでArmベースのワーカー・ノードを使用してアプリケーションを開発およびテストします。
Kubernetesエンジンで作成したクラスタにアプリケーションをデプロイする場合は、ポッド仕様で必要なコンピュート・リソースを指定する必要があります。アプリケーションをデプロイするために、kubeスケジューラによって、必要なリソースがあるノードが決定されます。クラスタにArmベースのシェイプを持つノード・プールと、他のシェイプ(AMD64シェイプなど)を持つノード・プールがある場合、ポッド仕様でnodeSelectorを使用して、アプリケーションがArmベースのワーカー・ノードで実行されるように指定できます。「Armベースのノードでのみ実行するポッドの定義」を参照してください。
Armベースのワーカー・ノードとArm以外のワーカー・ノードの両方にアプリケーションを同じクラスタにデプロイする場合は、Oracle Cloud Infrastructure RegistryなどのOpen Container Initiative準拠のレジストリに格納されているマルチアーキテクチャ・イメージ(マニフェスト・リストとも呼ばれる)を使用します(コンテナ・レジストリの概要を参照)。単一のソース・ツリーからマルチアーキテクチャ・イメージを構築し、x86アーキテクチャとArmアーキテクチャの両方のイメージを含む1つのイメージ・タグを使用します。Docker Buildx、PodmanおよびBuildahを使用して、マルチアーキテクチャ・イメージを構築できます。
次の点に注意してください:
- Kubernetesバージョン1.19.7以降を実行しているクラスタのノード・プールにArmベースのシェイプを指定できます。以前のバージョンのKubernetesを実行しているノード・プールにArmベースのシェイプを指定しないでください。
- Armベースのシェイプでノード・プールを作成した後、非Armベースのシェイプを持つようにノード・プールを変更することはできません。同様に、Armベースではないシェイプのノード・プールをArmベースのシェイプに変更することはできません。
- ノード・プールにArmベースのシェイプを指定する場合は、シェイプと互換性のあるイメージも指定します。コンピュート・シェイプを参照してください。
Armベースのノードでのみ実行するポッドの定義
クラスタにArmベースのシェイプを持つノード・プールと、他のシェイプ(AMD64シェイプなど)を持つノード・プールがある場合、ポッド仕様でnodeSelectorを使用して、アプリケーションがArmベースのワーカー・ノードでのみ実行されるように指定できます。たとえば、次の構成ファイルでは、クラスタ内の任意のArmベースのノードで実行するポッドを定義します。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
kubernetes.io/arch: arm64