ハイブリッドノード用のオペレーティングシステムを準備する - アマゾン EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

ハイブリッドノード用のオペレーティングシステムを準備する

Amazon Linux 2023 (AL2023)、Ubuntu、Red Hat Enterprise Linux (RHEL) は、ハイブリッドノードのノードオペレーティングシステムとして継続的に検証されます。AWS はこれらのオペレーティングシステムとのハイブリッドノード統合をサポートしていますが、オペレーティングシステム自体のサポートは提供していません。AL2023 は、Amazon EC2 の外部で実行される場合、AWS サポートプランの対象外です。AL2023 はオンプレミスの仮想化環境でのみ使用できます。詳細については、「Amazon Linux 2023 ユーザーガイド」を参照してください。

オペレーティングシステムのプロビジョニングと管理はお客様の責任となります。ハイブリッドノードを初めてテストする場合、プロビジョニング済みのホストで Amazon EKS Hybrid Nodes CLI (nodeadm) を実行するのが最も簡単です。本稼働デプロイでは、ホスト起動時にホストを Amazon EKS クラスターに自動的に結合する systemd サービスとして実行するように設定された nodeadm をオペレーティングシステムイメージに含めることをお勧めします。

バージョン互換性

以下の表は、ハイブリッドノードのノードオペレーティングシステムとしての使用に互換性があり、検証済みとなっているオペレーティングシステムのバージョンを示しています。オペレーティングシステムのこの表に記載されていないバリアントやバージョンを使用している場合、そのオペレーティングシステムのバリアントまたはバージョンとのハイブリッドノードの互換性は、AWS サポートの対象外となります。ハイブリッドノードは基盤となるインフラストラクチャに依存せず、x86 および ARM アーキテクチャに対応しています。

オペレーティングシステム バージョン

アマゾン Linux

Amazon Linux 2023 (AL2023)

Ubuntu

Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04

Red Hat Enterprise Linux

RHEL 8、RHEL 9

オペレーティングシステムに関する考慮事項

全般

  • Amazon EKS Hybrid Nodes CLI (nodeadm) を使用すると、ハイブリッドノードのコンポーネントおよび依存関係のインストールと設定を簡素化できます。nodeadm install プロセスは、オペレーティングシステムイメージのビルドパイプライン中、または各オンプレミスホストの実行時に実行できます。nodeadm がインストールするコンポーネントの詳細については、「ハイブリッドノード nodeadm 参照」を参照してください。

  • オンプレミス環境でプロキシを使用してインターネットにアクセスしている場合、インストールおよびアップグレードのプロセスでパッケージマネージャーがプロキシを使用するよう設定するために、追加のオペレーティングシステム設定が必要です。手順については、「ハイブリッドノードのプロキシを設定する」を参照してください。

Containerd

  • Containerd は標準の Kubernetes コンテナランタイムであり、ハイブリッドノードのみならず、あらゆるコンピューティングタイプの Amazon EKS ノードの依存関係の 1 つです。Amazon EKS Hybrid Nodes CLI (nodeadm) は、nodeadm install プロセス中に containerd のインストールを試みます。--containerd-source コマンドラインオプションを使用して、nodeadm install の実行時に containerd のインストールを設定できます。有効なオプションは、nonedistrodocker です。RHEL を使用している場合、distro は有効なオプションではなく、Docker のリポジトリから containerd ビルドをインストールするよう nodeadm を設定するか、containerd を手動でインストールできます。AL2023 または Ubuntu を使用する場合、nodeadm はオペレーティングシステムのディストリビューションから containerd をインストールするのがデフォルトになります。nodeadm で containerd をインストールしない場合は、--containerd-source none オプションを使用します。

Ubuntu

  • Ubuntu 20.04 を使用している場合は、認証情報プロバイダーとして AWS Systems Manager のハイブリッドアクティベーションを使用する必要があります。AWSIAM Roles Anywhere は、Ubuntu 20.04 ではサポートされていません。

  • Ubuntu 24.04 を使用している場合、ポッドを適切に終了させるための修正を適用するために、containerd のバージョンを更新するか、AppArmor の設定を変更する必要がある場合があります。「Ubuntu #2065423」を参照してください。AppArmor プロファイルに変更を適用するには、再起動が必要です。Ubuntu 24.04 の最新バージョンには、修正が含まれた更新版の containerd バージョン (containerd バージョン 1.7.19 以降) がパッケージマネージャーに含まれています。

RHEL

  • RHEL 8 を使用している場合は、認証情報プロバイダーとして AWS Systems Manager のハイブリッドアクティベーションを使用する必要があります。AWSIAM Roles Anywhere は RHEL 8 ではサポートされていません。

オペレーティングシステムイメージの構築

Amazon EKS は、nodeadm を含み、ホスト起動時に実行するように設定されたオペレーティングシステムイメージを作成するために使用できる Packer テンプレートの例を提供しています。このプロセスは、各ホストでハイブリッドノードの依存関係を個別にプルすることを避け、ハイブリッドノードのブートストラッププロセスを自動化するために推奨されています。Packer テンプレートの例は、Ubuntu 22.04、Ubuntu 24.04、RHEL 8、または RHEL 9 ISO イメージで使用でき、イメージの出力は OVA、Qcow2、または raw の形式で行えます。

前提条件

Packer テンプレートの例を使用する前に、Packer を実行しているマシンに以下がインストールされている必要があります。

  • Packer バージョン 1.11.0 以降。Packer のインストール手順については、「Packer documentation」の「nstall Packer」を参照してください。

  • OVA を構築する場合、VMware vSphere プラグイン 1.4.0 以降

  • Qcow2 または raw イメージを構築する場合、QEMU プラグインバージョン 1.x

環境変数の設定

Packer ビルドを実行する前に、Packer を実行しているマシンで次の環境変数を設定します。

全般

いずれのオペレーティングシステムおよび出力形式においても、イメージを構築する際には、以下の環境変数を設定する必要があります。

環境変数 タイプ 説明

PKR_SSH_PASSWORD

String

Packer は、プロビジョニング時に作成されたマシンに SSH 接続する際は、ssh_username および ssh_password 変数を使用します。これは、各 OS のキックスタートファイルまたは user-data ファイル内に初期ユーザーを作成する際に使用されるパスワードと一致する必要があります。デフォルトは、OS に応じて「builder」または「ubuntu」に設定されます。パスワードを設定する際は、必ず対応する ks.cfg または user-data ファイル内のパスワードも一致するように変更してください。

ISO_URL

String

使用する ISO の URL。サーバーからダウンロードするウェブリンクでも、ローカルファイルへの絶対パスでもかまいません

ISO_CHECKSUM

String

指定された ISO に関連するチェックサム。

CREDENTIAL_PROVIDER

String

ハイブリッドノードの認証情報プロバイダー。有効な値は ssm (SSM ハイブリッドアクティベーション用、デフォルト) と iam (IAM Roles Anywhere 用) です

K8S_VERSION

String

ハイブリッドノードの Kubernetes バージョン (1.31 など)。サポートされている Kubernetes のバージョンについては、「EKS の Kubernetes バージョンライフサイクルを理解する」を参照してください。

NODEADM_ARCH

String

nodeadm install 用アーキテクチャ。amd または arm を選択します。

RHEL

RHEL を使用している場合は、以下の環境変数を設定する必要があります。

環境変数 タイプ 説明

RH_USERNAME

String

RHEL サブスクリプションマネージャーのユーザー名

RH_PASSWORD

String

RHEL サブスクリプションマネージャーのパスワード

RHEL_VERSION

String

使用する RHEL の ISO のバージョン。有効な値は 8 または 9 です。

Ubuntu

Ubuntu 固有の環境変数は必要ありません。

vSphere

VMware vSphere OVA を構築する場合は、以下の環境変数を設定する必要があります。

環境変数 タイプ 説明

VSPHERE_SERVER

String

vSphere のサーバーアドレス

VSPHERE_USER

String

vSphere のユーザー名

VSPHERE_PASSWORD

String

vSphere のパスワード

VSPHERE_DATACENTER

String

vSphere のデータセンター名

VSPHERE_CLUSTER

String

vSphere のクラスター名

VSPHERE_DATASTORE

String

vSphere のデータストア名

VSPHERE_NETWORK

String

vSphere のネットワーク名

VSPHERE_OUTPUT_FOLDER

String

テンプレート用の vSphere の出力フォルダ

QEMU

環境変数 タイプ 説明

PACKER_OUTPUT_FORMAT

String

QEMU ビルダーの出力形式。有効な値は、qcow2 および raw です。

テンプレートを検証する

環境変数を設定した後は、ビルドを実行する前に以下のコマンドでテンプレートを検証します。テンプレートに異なる名前を使用している場合は、template.pkr.hcl を置き換えてください。

packer validate template.pkr.hcl

イメージを構築する

以下のコマンドを使用してイメージを構築し、-only フラグを使用してイメージのターゲットとオペレーティングシステムを指定します。テンプレートに異なる名前を使用している場合は、template.pkr.hcl を置き換えてください。

vSphere OVA

注記

vSphere で RHEL を使用している場合は、キックスタートファイルを OEMDRV イメージに変換し、起動元の ISO として渡す必要があります。詳細については、EKS ハイブリッドノードの GitHub リポジトリにある「Packer Readme」を参照してください。

Ubuntu 22.04 OVA

packer build -only=general-build.vsphere-iso.ubuntu22 template.pkr.hcl

Ubuntu 24.04 OVA

packer build -only=general-build.vsphere-iso.ubuntu24 template.pkr.hcl

RHEL 8 OVA

packer build -only=general-build.vsphere-iso.rhel8 template.pkr.hcl

RHEL 9 OVA

packer build -only=general-build.vsphere-iso.rhel9 template.pkr.hcl

QEMU

注記

ビルダーのホストと一致しない特定のホストの CPU 用にイメージを構築する場合は、ホストの CPU に対応する名前を「QEMU」のドキュメントで確認し、以下のコマンドを実行する際にホストの CPU 名を指定した -cpu フラグを使用します。

Ubuntu 22.04 Qcow2/Raw

packer build -only=general-build.qemu.ubuntu22 template.pkr.hcl

Ubuntu 24.04 Qcow2/Raw

packer build -only=general-build.qemu.ubuntu24 template.pkr.hcl

RHEL 8 Qcow2/Raw

packer build -only=general-build.qemu.rhel8 template.pkr.hcl

RHEL 9 Qcow2/Raw

packer build -only=general-build.qemu.rhel9 template.pkr.hcl

nodeadm 設定を user-data を通して渡す

cloud-init を介して nodeadm の設定を user-data で渡すことで、ホストの起動時にハイブリッドノードを設定し、自動的に EKS クラスターに接続することができます。以下は、ハイブリッドノードのインフラストラクチャとして VMware vSphere を使用する場合の実装例です。

  1. GitHub の govc readme の手順に従って govc CLI をインストールします。

  2. 前のセクションで Packer ビルドを実行してテンプレートをプロビジョニングした後は、以下を使用してテンプレートをクローンし、複数の異なるノードを作成することができます。ハイブリッドノードに使用する新規 VM を作成するたびに、テンプレートをクローンする必要があります。以下のコマンド内の変数は、お使いの環境に応じた値に置き換えます。以下のコマンドの VM_NAME は、metadata.yaml ファイルを介して VM の名前を注入する際に NODE_NAME として使用されます。

    govc vm.clone -vm "/PATH/TO/TEMPLATE" -ds="YOUR_DATASTORE" \ -on=false -template=false -folder=/FOLDER/TO/SAVE/VM "VM_NAME"
  3. 各新規 VM のテンプレートをクローンした後は、VM の metadata.yamluserdata.yaml を作成します。VM は同じ userdata.yamlmetadata.yaml を共有でき、以下のステップで VM ごとにこれらを入力していきます。nodeadm の設定は、userdata.yamlwrite_files セクションで作成および定義されます。以下の例では、ハイブリッドノードのオンプレミス認証情報プロバイダーとして AWS SSM ハイブリッドアクティベーションを使用しています。nodeadm 設定の詳細については、「ハイブリッドノード nodeadm 参照」を参照してください。

    userdata.yaml:

    #cloud-config users: - name: # username for login. Use 'builder' for RHEL or 'ubuntu' for Ubuntu. passwd: # password to login. Default is 'builder' for RHEL. groups: [adm, cdrom, dip, plugdev, lxd, sudo] lock-passwd: false sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash write_files: - path: /usr/local/bin/nodeConfig.yaml permissions: '0644' content: | apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: # Cluster Name region: # AWS region hybrid: ssm: activationCode: # Your ssm activation code activationId: # Your ssm activation id runcmd: - /usr/local/bin/nodeadm init -c file:///usr/local/bin/nodeConfig.yaml >> /var/log/nodeadm-init.log 2>&1

    metadata.yaml:

    お使いの環境に応じた metadata.yaml を作成します。"$NODE_NAME" 変数の形式は、後続のステップで値が入力されるため、ファイル内にそのまま保持してください。

    instance-id: "$NODE_NAME" local-hostname: "$NODE_NAME" network: version: 2 ethernets: nics: match: name: ens* dhcp4: yes
  4. 以下のコマンドを使用して、userdata.yaml および metadata.yaml ファイルを gzip+base64 文字列として追加します。以下のコマンドは、作成する VM ごとに実行する必要があります。VM_NAME は、更新する VM の名前に置き換えてください。

    export NODE_NAME="VM_NAME" export USER_DATA=$(gzip -c9 <userdata.yaml | base64) govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.userdata="${USER_DATA}" govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.userdata.encoding=gzip+base64 envsubst '$NODE_NAME' < metadata.yaml > metadata.yaml.tmp export METADATA=$(gzip -c9 <metadata.yaml.tmp | base64) govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.metadata="${METADATA}" govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.metadata.encoding=gzip+base64
  5. 新しい VM の電源をオンにします。これにより、設定した EKS クラスターに自動的に接続されます。

    govc vm.power -on "${NODE_NAME}"