

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

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

# ハイブリッドノード `nodeadm` 参照
<a name="hybrid-nodes-nodeadm"></a>

Amazon EKS Hybrid Nodes CLI (`nodeadm`) は、ハイブリッドノードコンポーネントのインストール、設定、登録、アンインストールを簡素化します。オペレーティングシステムイメージに `nodeadm` を含めると、ハイブリッドノードのブートストラップを自動化できます。詳細については、「[ハイブリッドノード用のオペレーティングシステムを準備する](hybrid-nodes-os.md)」を参照してください。

ハイブリッドノードの `nodeadm` バージョンは、Amazon EKS クラスター内のノードとして Amazon EC2 インスタンスをブートストラップするために使用される `nodeadm` バージョンとは異なります。適切な `nodeadm` バージョンのドキュメントとリファレンスに従ってください。このドキュメントページは、ハイブリッドノードの `nodeadm` バージョンを対象としています。

ハイブリッドノード `nodeadm` のソースコードは、https://github.com/aws/eks-hybrid GitHub リポジトリで公開されています。

**重要**  
root/sudo 権限を持つユーザーで `nodeadm` を実行する必要があります。

## `nodeadm` のダウンロード
<a name="_download_nodeadm"></a>

`nodeadm` のハイブリッドノード版は Amazon CloudFront をフロントに置いた Amazon S3 でホストされます。各オンプレミスホストに `nodeadm` をインストールするにはオンプレミスホストから以下のコマンドを実行してください。

 **x86\$164 ホストの場合** 

```
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm'
```

 **ARM ホストの場合** 

```
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/arm64/nodeadm'
```

各ホストでダウンロードしたバイナリに実行可能ファイルのアクセス許可を追加します。

```
chmod +x nodeadm
```

## `nodeadm install`
<a name="_nodeadm_install"></a>

`nodeadm install` コマンドはハイブリッドノードを実行して Amazon EKS クラスターに結合するために必要なアーティファクトと依存関係をインストールするために使用されます。`nodeadm install` コマンドは各ハイブリッドノードで個別に実行することも、イメージビルドパイプライン中に実行して、オペレーティングシステムイメージにハイブリッドノードの依存関係をプリインストールすることもできます。

 **使用方法** 

```
nodeadm install [KUBERNETES_VERSION] [flags]
```

 **位置引数** 

(必須 `KUBERNETES_VERSION` インストールする EKS Kubernetes のメジャーバージョンとマイナーバージョン (例: `1.32`) 

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-p`,  `--credential-provider`   |  正  |  インストールする認証情報プロバイダー。サポートされている値は`iam-ra` および `ssm` です。詳細については「[ハイブリッドノードの認証情報を準備する](hybrid-nodes-creds.md)」を参照してください。  | 
|   `-s`,  `--containerd-source`   |  誤  |  `containerd` のソース。`nodeadm` はOS ディストリビューション、Docker パッケージからの `containerd` のインストール、および `containerd` のインストールのスキップをサポートしています。  **値**   `distro` - これはデフォルト値です。`nodeadm` は、EKS Kubernetes バージョンと互換性のある、ノード OS によって配布される最新の `containerd` パッケージをインストールします。`distro` は Red Hat Enterprise Linux (RHEL) オペレーティングシステムでサポートされる値ではありません。  `docker` — `nodeadm` は、EKS Kubernetes バージョンと互換性のある、Docker によって構築および配布された最新の `containerd` パッケージをインストールします。`docker` は Amazon Linux 2023 でサポートされる値ではありません。  `none` — `nodeadm` は `containerd` パッケージをインストールしません。`nodeadm init` を実行する前に、`containerd` を手動でインストールする必要があります。  | 
|   `-r`,  `--region`   |  誤  |  SSM エージェントといったアーティファクトをダウンロードするための AWS リージョンを指定します。デフォルトは `us-west-2` です。  | 
|   `-t`,  `--timeout`   |  誤  |  install コマンドの最大実行時間。入力は時間形式に従います。例: `1h23m`。install コマンドのデフォルトのダウンロードタイムアウトは 20 分に設定されています。  | 
|   `-h`, `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 

 **例** 

認証情報プロバイダーとして AWS システムマネージャー (SSM 使用して Kubernetes バージョン `1.32` をインストールする

```
nodeadm install 1.32 --credential-provider ssm
```

AWS システムマネージャー (SSM 認証情報プロバイダーとして、Docker を containerd のソースとして、ダウンロードタイムアウトを 20 分にして Kubernetes バージョン `1.32` をインストールします。

```
nodeadm install 1.32 --credential-provider ssm --containerd-source docker --timeout 20m
```

認証情報プロバイダーとして AWS IAM Roles Anywhere を使用して Kubernetes バージョン `1.32` をインストールする

```
nodeadm install 1.32 --credential-provider iam-ra
```

## `nodeadm config check`
<a name="_nodeadm_config_check"></a>

`nodeadm config check` コマンドは提供されたノード設定にエラーがないか確認します。このコマンドはハイブリッドノード設定ファイルの正確性を検証するために使用できます。

 **使用方法** 

```
nodeadm config check [flags]
```

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  正  |  nodeadm 設定のソース。ハイブリッドノードの場合、入力は file スキームを使用する URI に従う必要があります。  | 
|   `-h`, `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 

 **例** 

```
nodeadm config check -c file://nodeConfig.yaml
```

## `nodeadm init`
<a name="_nodeadm_init"></a>

`nodeadm init` コマンドはハイブリッドノードを起動し、設定された Amazon EKS クラスターに接続します。`nodeConfig.yaml` ファイルの設定方法の詳細については、「[SSM ハイブリッドアクティベーション用のノード設定](#hybrid-nodes-node-config-ssm)」または「[IAM Roles Anywhere 用のノード設定](#hybrid-nodes-node-config-iamra)」を参照してください。

 **使用方法** 

```
nodeadm init [flags]
```

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  正  |  `nodeadm` 設定のソース。ハイブリッドノードの場合、入力は file スキームを使用する URI に従う必要があります。  | 
|   `-s`,  `--skip`   |  誤  |  スキップする `init` のフェーズ。問題の修正に役立つ場合を除き、どのフェーズもスキップすることはお勧めしません。  **値**   `install-validation` は、先行する install コマンドが正常に実行されたかどうかの確認をスキップします。  ノードでファイアウォールが有効になっている場合、`cni-validation` は Cilium または Calico CNI の VXLAN ポートが開かれているかどうかの確認をスキップします。  `node-ip-validation` は、ノード IP がリモートノードネットワークの CIDR 内に含まれているかどうかのチェックをスキップします。  | 
|   `-h`, `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 

 **例** 

```
nodeadm init -c file://nodeConfig.yaml
```

## `nodeadm upgrade`
<a name="_nodeadm_upgrade"></a>

`nodeadm upgrade` コマンドはインストールされているすべてのアーティファクトを最新バージョンにアップグレードし、ノードをブートストラップしてアップグレードされたアーティファクトを設定し、AWS の EKS クラスターに参加させます。アップグレードはノードで実行されているワークロードに対する破壊的なコマンドです。アップグレードを実行する前にはワークロードを別のノードに移動してください。

 **使用方法** 

```
nodeadm upgrade [KUBERNETES_VERSION] [flags]
```

 **位置引数** 

(必須 `KUBERNETES_VERSION` インストールする EKS Kubernetes のメジャーバージョンとマイナーバージョン (例: `1.32`) 

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-c`,  `--config-source`   |  正  |  `nodeadm` 設定のソース。ハイブリッドノードの場合、入力は file スキームを使用する URI に従う必要があります。  | 
|   `-t`,  `--timeout`   |  誤  |  アーティファクトのダウンロードのタイムアウト。入力は時間形式に従います。たとえば、1h23m です。upgrade コマンドのデフォルトのダウンロードタイムアウトは 10 分に設定されています。  | 
|   `-s`,  `--skip`   |  誤  |  スキップするアップグレードフェーズ。問題の修正に役立つ場合を除き、どのフェーズもスキップすることはお勧めしません。  **値**   `pod-validation` はデーモンセットと静的ポッドを除くすべてのポッドがノード上で実行されていないことのチェックをスキップします。  `node-validation` はノードが隔離されているかどうかの確認をスキップします。  `init-validation` はアップグレードを実行する前にノードが正常に初期化されたかどうかの確認をスキップします。  `containerd-major-version-upgrade` は、ノードのアップグレード時に containerd のメジャーバージョンがアップグレードされないようにします。  | 
|   `-h`, `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 

 **例** 

```
nodeadm upgrade 1.32 -c file://nodeConfig.yaml
```

```
nodeadm upgrade 1.32 -c file://nodeConfig.yaml --timeout 20m
```

## `nodeadm uninstall`
<a name="_nodeadm_uninstall"></a>

`nodeadm uninstall` コマンドは kubelet や containerd など、`nodeadm install` の実行中に `nodeadm` がインストールしたアーティファクトを停止および削除してください。uninstall コマンドはクラスターからハイブリッドノードをドレインまたは削除しないことに注意してください。ドレインと削除の操作は個別に実行する必要があります。詳細については「[ハイブリッドノードを削除する](hybrid-nodes-remove.md)」を参照してください。デフォルトではノードにポッドが残っている場合、`nodeadm uninstall` は続行されません。同様に、`nodeadm uninstall` は CNI 依存関係や、クラスターで実行している他の Kubernetes アドオンの依存関係を削除しません。ホストから CNI インストールを完全に削除するには「[ハイブリッドノードの CNI を設定する](hybrid-nodes-cni.md)」の手順を参照してください。オンプレミス認証情報プロバイダーとして AWS SSM ハイブリッドアクティベーションを使用している場合、`nodeadm uninstall` コマンドはホストを AWS SSM マネージドインスタンスから登録解除します。

 **使用方法** 

```
nodeadm uninstall [flags]
```

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-s`,  `--skip`   |  誤  |  アンインストール時にスキップするフェーズ。問題の修正に役立つ場合を除き、どのフェーズもスキップすることはお勧めしません。  **値**   `pod-validation` はデーモンセットと静的ポッドを除くすべてのポッドがノード上で実行されていないことのチェックをスキップします。  `node-validation` はノードが隔離されているかどうかの確認をスキップします。  `init-validation` はアンインストールを実行する前にノードが正常に初期化されたかどうかの確認をスキップします。  | 
|   `-h`,  `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 
|   `-f`,  `--force`   |  誤  |  Kubernetes および CNI コンポーネントからの残存ファイルを含む可能性のある追加のディレクトリを強制的に削除します。  **警告**  これにより、デフォルトの Kubernetes および CNI ディレクトリのすべてのコンテンツ (`/var/lib/cni`、`/etc/cni/net.d` など) が削除されます。これらの場所に独自のデータを保存する場合は、このフラグを使用しないでください。 nodeadm `v1.0.9` 以降、`./nodeadm uninstall --skip node-validation,pod-validation --force` コマンドは `/var/lib/kubelet` ディレクトリを削除しなくなりました。これは、マウントされたノードファイルシステムを含むことがある Pod ボリュームと volume-subpath ディレクトリが含まれている可能性があるためです。  **安全な処理のヒント**  - マウントされたパスを削除すると、実際にマウントされたノードファイルシステムが誤って削除される可能性があります。`/var/lib/kubelet` ディレクトリを手動で削除する前に、すべてのアクティブなマウントを慎重に検査し、ボリュームを安全にマウント解除して、データ損失を回避します。  | 

 **例** 

```
nodeadm uninstall
```

```
nodeadm uninstall --skip node-validation,pod-validation
```

## `nodeadm debug`
<a name="_nodeadm_debug"></a>

`nodeadm debug` コマンドは異常または誤設定のハイブリッドノードのトラブルシューティングに使用できます。以下の要件が満たされていることを検証します。
+ ノードが認証情報を取得するために必要な AWS API へのネットワークアクセスがあること
+ ノードが設定されたハイブリッドノードの IAM ロールに対し AWS 認証情報を取得できること
+ ノードに EKS Kubernetes API エンドポイントへのネットワークアクセスがあり、EKS Kubernetes API エンドポイント証明書が有効であること
+ ノードが EKS クラスターに対し認証でき、クラスター内での ID が有効で、EKS クラスター用に設定された VPC を介して EKS クラスターにアクセスできること。

エラーが見つかった場合、コマンドの出力はトラブルシューティングのステップを提示します。特定の検証ステップは子プロセスを示しています。これらが失敗した場合、出力は検証エラーの下の stderr セクションに表示されます。

 **使用方法** 

```
nodeadm debug [flags]
```

 **Flags** 


| 名前 | 必要 | 説明 | 
| --- | --- | --- | 
|   `-c`, `--config-source`   |  正  |  `nodeadm` 設定のソース。ハイブリッドノードの場合、入力は file スキームを使用する URI に従う必要があります。  | 
|   `--no-color`   |  誤  |  色の出力を無効にします。自動化に役立ちます。  | 
|   `-h`, `--help`   |  誤  |  使用可能なフラグ、サブコマンド、位置値パラメータを含むヘルプメッセージを表示します。  | 

 **例** 

```
nodeadm debug -c file://nodeConfig.yaml
```

## Nodeadm ファイルの場所
<a name="_nodeadm_file_locations"></a>

### nodeadm のインストール
<a name="_nodeadm_install_2"></a>

`nodeadm install` を実行すると、以下のファイルおよびファイルの場所が設定されます。


| アーティファクト | パス | 
| --- | --- | 
|  IAM Roles Anywhere  |  /usr/local/bin/aws\$1signing\$1helper  | 
|  Kubelet binary  |  /usr/bin/kubelet  | 
|  Kubectl binary  |  usr/local/bin/kubectl  | 
|  ECR Credentials Provider  |  /etc/eks/image-credential-provider/ecr-credential-provider  | 
|   AWS IAM オーセンティケーター  |  /usr/local/bin/aws-iam-authenticator  | 
|  SSM Setup CLI  |  /opt/ssm/ssm-setup-cli  | 
|  SSM Agent  |  Ubuntu の場合 - /snap/amazon-ssm-agent/current/amazon-ssm-agent RHEL および AL2023 の場合 - /usr/bin/amazon-ssm-agent  | 
|  Containerd  |  Ubuntu および AL2023 の場合 - /usr/bin/containerd RHEL の場合 - /bin/containerd  | 
|  Iptables  |  Ubuntu および AL2023 の場合 - /usr/sbin/iptables RHEL の場合 - /sbin/iptables  | 
|  CNI プラグイン  |  /opt/cni/bin  | 
|  インストール済みアーティファクトトラッカー  |  /opt/nodeadm/tracker  | 

### nodeadm init
<a name="_nodeadm_init_2"></a>

`nodeadm init` を実行すると、以下のファイルおよびファイルの場所が設定されます。


| 名前 | パス | 
| --- | --- | 
|  Kubelet kubeconfig  |  /var/lib/kubelet/kubeconfig  | 
|  Kubelet 設定  |  /etc/kubernetes/kubelet/config.json  | 
|  Kubelet systemd ユニット  |  /etc/systemd/system/kubelet.service  | 
|  イメージ認証情報プロバイダー設定  |  /etc/eks/image-credential-provider/config.json  | 
|  Kubelet 環境ファイル  |  /etc/eks/kubelet/environment  | 
|  Kubelet 証明書  |  /etc/kubernetes/pki/ca.crt  | 
|  Containerd 設定  |  /etc/containerd/config.toml  | 
|  Containerd カーネルモジュール設定  |  /etc/modules-load.d/containerd.conf  | 
|   AWS 設定ファイル  |  /etc/aws/hybrid/config  | 
|   AWS 認証情報ファイル (認証情報ファイルを有効にする場合)  |  /eks-hybrid/.aws/credentials  | 
|   AWS 署名ヘルパーシステムユニット  |  /etc/systemd/system/aws\$1signing\$1helper\$1update.service  | 
|  Sysctl 設定ファイル  |  /etc/sysctl.d/99-nodeadm.conf  | 
|  Ca-certificates  |  /etc/ssl/certs/ca-certificates.crt  | 
|  Gpg キーファイル  |  /etc/apt/keyrings/docker.asc  | 
|  Docker リポジトリソースファイル  |  /etc/apt/sources.list.d/docker.list  | 

## SSM ハイブリッドアクティベーション用のノード設定
<a name="hybrid-nodes-node-config-ssm"></a>

ハイブリッドノードの認証情報に AWS SSM ハイブリッドアクティベーションを使用する場合の `nodeConfig.yaml` の例を以下に示します。

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

## IAM Roles Anywhere 用のノード設定
<a name="hybrid-nodes-node-config-iamra"></a>

ハイブリッドノードの認証情報用の AWS IAM Roles Anywhere の `nodeConfig.yaml` の例を以下に示します。

AWS IAM Roles Anywhere をオンプレミス認証情報プロバイダーとして使用する場合、`nodeadm` 設定で使用する `nodeName` はハイブリッドノードの IAM ロールを対象としたアクセス許可と一致する必要があります。たとえば、ハイブリッドノードの IAM ロールのアクセス許可ではロールセッション名がホスト証明書の CN と一致する場合しか AWS IAM Roles Anywhere がロールを引き受けることは許可されない場合、`nodeadm` 設定の `nodeName` は証明書の CN と同じである必要があります。使用する `nodeName` は 64 文字以下にする必要があります。詳細については、[ハイブリッドノードの認証情報を準備する](hybrid-nodes-creds.md) を参照してください。

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:              # Name of the EKS cluster
    region:            # AWS Region where the EKS cluster resides
  hybrid:
    iamRolesAnywhere:
      nodeName:        # Name of the node
      trustAnchorArn:  # ARN of the IAM Roles Anywhere trust anchor
      profileArn:      # ARN of the IAM Roles Anywhere profile
      roleArn:         # ARN of the Hybrid Nodes IAM role
      certificatePath: # Path to the certificate file to authenticate with the IAM Roles Anywhere trust anchor
      privateKeyPath:  # Path to the private key file for the certificate
```

## kubelet をカスタマイズするためのノード設定 (オプション)
<a name="hybrid-nodes-nodeadm-kubelet"></a>

`nodeadm` 設定で kubelet 設定と flags を渡すことができます。追加のノードラベル `abc.amazonaws.com/test-label` を追加する方法と、`shutdownGracePeriod` を 30 秒に設定するための設定については以下の例を参照してください。

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  kubelet:
    config:           # Map of kubelet config and values
       shutdownGracePeriod: 30s
    flags:            # List of kubelet flags
       - --node-labels=abc.company.com/test-label=true
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

## containerd をカスタマイズするためのノード設定 (オプション)
<a name="_node_config_for_customizing_containerd_optional"></a>

`nodeadm` 設定でカスタム containerd 設定を渡すことができます。`nodeadm` の containerd 設定はインライン TOML を受け入れます。containerd コンテンツストアで解凍されたイメージレイヤーの削除を無効にするための containerd の設定方法については以下の例を参照してください。

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  containerd:
    config: |         # Inline TOML containerd additional configuration
       [plugins."io.containerd.grpc.v1.cri".containerd]
       discard_unpacked_layers = false
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```

**注記**  
containerd のバージョン 1.x と 2.x では、異なる設定形式が使用されます。containerd 1.x は設定バージョン 2 を使用し、containerd 2.x は設定バージョン 3 を使用します。containerd 2.x は設定バージョン 2 と下位互換性がありますが、最適なパフォーマンスを得るには設定バージョン 3 をお勧めします。`containerd --version` を使用して containerd バージョンを確認するか、`nodeadm` のインストールログを確認します。設定のバージョニングの詳細については、https://containerd.io/releases/ を参照してください。

containerd 設定を使用して SELinux サポートを有効にすることもできます。containerd で SELinux が有効になっている場合はノードでスケジュールされたポッドで適切な securityContext と seLinuxOptions が有効になっていることを確認してください。セキュリティコンテキストの設定の詳細については[Kubernetes ドキュメント](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)を参照してください。

**注記**  
Red Hat Enterprise Linux (RHEL 8 および RHEL 9 では SELinux がデフォルトで有効になっており、ホスト上で strict に設定されています。Amazon Linux 2023 はデフォルトで SELinux が有効になっており、許可モードに設定されています。SELinux がホストで許可モードに設定されている場合、containerd で有効にしてもリクエストはブロックされませんが、ホストの SELinux 設定に従ってログに記録されます。

```
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
  cluster:
    name:             # Name of the EKS cluster
    region:           # AWS Region where the EKS cluster resides
  containerd:
    config: |         # Inline TOML containerd additional configuration
       [plugins."io.containerd.grpc.v1.cri"]
       enable_selinux = true
  hybrid:
    ssm:
      activationCode: # SSM hybrid activation code
      activationId:   # SSM hybrid activation id
```