

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

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# ハイブリッドノード用のオペレーティングシステムを準備する
<a name="hybrid-nodes-os"></a>

Bottlerocket、Amazon Linux 2023 (AL2023)、Ubuntu、RHEL は、ハイブリッドノードのノードオペレーティングシステムとして使用されるために継続的に検証されます。Bottlerocket は、VMware vSphere 環境でのみ AWS でサポートされています。AL2023 は、Amazon EC2 の外部で実行される場合、AWS サポートプランの対象外です。AL2023 はオンプレミスの仮想化環境でのみ使用できます。詳細については、「[Amazon Linux 2023 ユーザーガイド](https://docs.aws.amazon.com/linux/al2023/ug/outside-ec2.html)」を参照してください。AWS は Ubuntu および RHEL オペレーティングシステムとのハイブリッドノード統合をサポートしていますが、オペレーティングシステム自体はサポートしていません。

オペレーティングシステムのプロビジョニングと管理はお客様の責任となります。ハイブリッドノードを初めてテストする場合、プロビジョニング済みのホストで Amazon EKS Hybrid Nodes CLI (`nodeadm`) を実行するのが最も簡単です。本稼働デプロイでは、ホスト起動時にホストを Amazon EKS クラスターに自動的に結合する systemd サービスとして実行するように設定された `nodeadm` を、オペレーティングシステムイメージに含めることが推奨されます。Bottlerocket を vSphere のノードオペレーティングシステムとして使用している場合は `nodeadm` を使用する必要はありません。Bottlerocket にはハイブリッドノードに必要な依存関係が既に含まれ、ホストのスタートアップ時に設定するクラスターに自動的に接続されるからです。

## バージョン互換性
<a name="_version_compatibility"></a>

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


| オペレーティングシステム | バージョン | 
| --- | --- | 
|  Amazon Linux  |  Amazon Linux 2023 (AL2023)  | 
|  Bottlerocket  |  v1.37.0 以降、Kubernetes v1.28 以降を実行している VMware のバリアント  | 
|  Ubuntu  |  Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04  | 
|  Red Hat Enterprise Linux  |  RHEL 8、RHEL 9  | 

## オペレーティングシステムに関する考慮事項
<a name="_operating_system_considerations"></a>

### General
<a name="_general"></a>
+ Amazon EKS Hybrid Nodes CLI (`nodeadm`) を使用すると、ハイブリッドノードのコンポーネントおよび依存関係のインストールと設定を簡素化できます。`nodeadm install` プロセスは、オペレーティングシステムイメージのビルドパイプライン中、または各オンプレミスホストの実行時に実行できます。`nodeadm` がインストールするコンポーネントの詳細については、「[ハイブリッドノード `nodeadm` 参照](hybrid-nodes-nodeadm.md)」を参照してください。
+ オンプレミス環境でプロキシを使用してインターネットにアクセスしている場合、インストールおよびアップグレードのプロセスでパッケージマネージャーがプロキシを使用するよう設定するために、追加のオペレーティングシステム設定が必要です。手順については「[ハイブリッドノードのプロキシを設定する](hybrid-nodes-proxy.md)」を参照してください。

### Bottlerocket
<a name="_bottlerocket"></a>
+ Bottlerocket ノードを接続するときのステップとツールは他のオペレーティングシステムのステップとは異なるため、「[ハイブリッドノードを接続する](hybrid-nodes-join.md)」の手順ではなく「[Bottlerocket を実行しているハイブリッドノードの接続](hybrid-nodes-bottlerocket.md)」に記載しています。
+ Bottlerocket のステップでは、ハイブリッドノード CLI のツールである `nodeadm` は使用しません。
+ EKS Hybrid Nodes でサポートされているのは、Bottlerocket のバージョンが v1.37.0 以降である VMware のバリアントのみです。Bottlerocket の VMware のバリアントは、Kubernetes のバージョン v1.28 以降で使用できます。[その他の Bottlerocket のバリアント](https://bottlerocket.dev/en/os/1.36.x/concepts/variants)は、ハイブリッドノードのオペレーティングシステムとしてサポートされていません。注: Bottlerocket の VMware のバリアントを使用できるのは、x86\$164 のアーキテクチャのみです。

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

### Ubuntu
<a name="_ubuntu"></a>
+ Ubuntu 24.04 を使用している場合、ポッドを適切に終了させるための修正を適用するために、containerd のバージョンを更新するか、AppArmor の設定を変更する必要がある場合があります。「[Ubuntu \$12065423](https://bugs.launchpad.net/ubuntu/+source/containerd-app/\+bug/2065423)」を参照してください。AppArmor プロファイルに変更を適用するには、再起動が必要です。Ubuntu 24.04 の最新バージョンには、修正が含まれた更新版の containerd バージョン (containerd バージョン 1.7.19 以降) がパッケージマネージャーに含まれています。

### ARM
<a name="_arm"></a>
+ ARM ハードウェアを使用している場合、EKS kube-proxy アドオンのバージョン 1.31 以降を実行するためには、Cryptography Extension (ARMv8.2\$1crypto) を搭載した ARMv8.2 準拠のプロセッサが必要です。Cortex-A72 ベースのプロセッサのほか、Raspberry Pi 5 より前のすべての Raspberry Pi システムもこの要件を満たしていません。回避策として、2026 年 7 月に延長サポートが終了するまで、EKS kube-proxy アドオンのバージョン 1.30 をこれまで通り使用できます。「[Kubernetes release calendar](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)」を参照するか、アップストリームからカスタム kube-proxy イメージを使用してください。
+ kube-proxy ログに以下のエラーメッセージが記録されていれば、この非互換性が生じていることになります。

```
Fatal glibc error: This version of Amazon Linux requires a newer ARM64 processor compliant with at least ARM architecture 8.2-a with Cryptographic extensions. On EC2 this is Graviton 2 or later.
```

## オペレーティングシステムイメージの構築
<a name="_building_operating_system_images"></a>

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

### 前提条件
<a name="_prerequisites"></a>

Packer テンプレートの例を使用する前に、Packer を実行しているマシンに以下がインストールされている必要があります。
+ Packer バージョン 1.11.0 以降。Packer のインストール手順については、「Packer documentation」の「[nstall Packer](https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli)」を参照してください。
+ OVA を構築する場合、VMware vSphere プラグイン 1.4.0 以降
+ `Qcow2` または raw イメージを構築する場合、QEMU プラグインバージョン 1.x

### 環境変数の設定
<a name="_set_environment_variables"></a>

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

 **General** 

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


| 環境変数 | タイプ | 説明 | 
| --- | --- | --- | 
|  PKR\$1SSH\$1PASSWORD  |  String  |  Packer は、プロビジョニング時に作成されたマシンに SSH 接続する際は、`ssh_username` および `ssh_password` 変数を使用します。これは、各 OS のキックスタートファイルまたは user-data ファイル内に初期ユーザーを作成する際に使用されるパスワードと一致する必要があります。デフォルトは、OS に応じて「builder」または「ubuntu」に設定されます。パスワードを設定する際は、必ず対応する `ks.cfg` または `user-data` ファイル内のパスワードも一致するように変更してください。  | 
|  ISO\$1URL  |  String  |  使用する ISO の URL。サーバーからダウンロードするウェブリンクでも、ローカルファイルへの絶対パスでもかまいません  | 
|  ISO\$1CHECKSUM  |  String  |  指定された ISO に関連するチェックサム。  | 
|  CREDENTIAL\$1PROVIDER  |  String  |  ハイブリッドノードの認証情報プロバイダー。有効な値は `ssm` (SSM ハイブリッドアクティベーション用、デフォルト) と `iam` (IAM Roles Anywhere 用) です  | 
|  K8S\$1VERSION  |  String  |  ハイブリッドノードの Kubernetes バージョン (`1.31` など)。サポートされている Kubernetes のバージョンについては、「[Amazon EKS supported versions](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)」を参照してください。  | 
|  NODEADM\$1ARCH  |  String  |  `nodeadm install` 用アーキテクチャ。`amd` または `arm` を選択します。  | 

 ** (RHEL**) 

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


| 環境変数 | タイプ | 説明 | 
| --- | --- | --- | 
|  RH\$1USERNAME  |  String  |  RHEL サブスクリプションマネージャーのユーザー名  | 
|  RH\$1PASSWORD  |  String  |  RHEL サブスクリプションマネージャーのパスワード  | 
|  RHEL\$1VERSION  |  String  |  使用する RHEL の ISO のバージョン。有効な値は `8` または `9` です。  | 

 **Ubuntu** - 

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

 **vSphere** 

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


| 環境変数 | タイプ | 説明 | 
| --- | --- | --- | 
|  VSPHERE\$1SERVER  |  String  |  vSphere のサーバーアドレス  | 
|  VSPHERE\$1USER  |  String  |  vSphere のユーザー名  | 
|  VSPHERE\$1PASSWORD  |  String  |  vSphere のパスワード  | 
|  VSPHERE\$1DATACENTER  |  String  |  vSphere のデータセンター名  | 
|  VSPHERE\$1CLUSTER  |  String  |  vSphere のクラスター名  | 
|  VSPHERE\$1DATASTORE  |  String  |  vSphere のデータストア名  | 
|  VSPHERE\$1NETWORK  |  String  |  vSphere のネットワーク名  | 
|  VSPHERE\$1OUTPUT\$1FOLDER  |  String  |  テンプレート用の vSphere の出力フォルダ  | 

 **QEMU** 


| 環境変数 | タイプ | 説明 | 
| --- | --- | --- | 
|  PACKER\$1OUTPUT\$1FORMAT  |  String  |  QEMU ビルダーの出力形式。有効な値は、`qcow2` および `raw` です。  | 

 **テンプレートを検証する** 

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

```
packer validate template.pkr.hcl
```

### イメージを構築する
<a name="_build_images"></a>

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

 **vSphere OVA** 

**注記**  
vSphere で RHEL を使用している場合は、キックスタートファイルを OEMDRV イメージに変換し、起動元の ISO として渡す必要があります。詳細については、EKS ハイブリッドノードの GitHub リポジトリにある「[Packer Readme](https://github.com/aws/eks-hybrid/tree/main/example/packer#utilizing-rhel-with-vsphere)」を参照してください。

 **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](https://www.qemu.org/docs/master/system/qemu-cpu-models.html)」のドキュメントで確認し、以下のコマンドを実行する際にホストの 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 を通して渡す
<a name="_pass_nodeadm_configuration_through_user_data"></a>

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

1. GitHub の [govc readme](https://github.com/vmware/govmomi/blob/main/govc/README.md) の手順に従って `govc` CLI をインストールします。

1. 前のセクションで 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"
   ```

1. 各新規 VM のテンプレートをクローンした後は、VM の `metadata.yaml` と `userdata.yaml` を作成します。VM は同じ `userdata.yaml` と `metadata.yaml` を共有でき、以下のステップで VM ごとにこれらを入力していきます。`nodeadm` の設定は、`userdata.yaml` の `write_files` セクションで作成および定義されます。以下の例では、ハイブリッドノードのオンプレミス認証情報プロバイダーとして AWS SSM ハイブリッドアクティベーションを使用しています。`nodeadm` 設定の詳細については、「[ハイブリッドノード `nodeadm` 参照](hybrid-nodes-nodeadm.md)」を参照してください。

    **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
   ```

1. 以下のコマンドを使用して、`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
   ```

1. 新しい VM の電源をオンにします。これにより、設定した EKS クラスターに自動的に接続されます。

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