

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 混合節點 `nodeadm` 參考
<a name="hybrid-nodes-nodeadm"></a>

Amazon EKS 混合節點 CLI (`nodeadm`) 可簡化混合節點元件的安裝、組態、註冊和解除安裝。您可以在作業系統映像中包含 `nodeadm`，以自動化混合節點引導，如需詳細資訊，請參閱 [準備混合節點的作業系統](hybrid-nodes-os.md)。

混合節點的 `nodeadm` 版本與用於將 Amazon EC2 執行個體引導為 Amazon EKS 叢集中節點的 `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\_64 主機** 

```
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 major.minor 版本，例如 `1.32` 

 **Flags** 


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-p`,<br /> `--credential-provider`  | TRUE | 要安裝的憑證提供者。支援的值為 `iam-ra` 和 `ssm`。如需詳細資訊，請參閱[準備混合節點的憑證](hybrid-nodes-creds.md)。 | 
|  `-s`,<br /> `--containerd-source`  | FALSE | `containerd` 的來源。`nodeadm` 支援從 OS distro、Docker 套件安裝 `containerd`，並略過 `containerd` 安裝。<br /> **Values (數值)** <br /> `distro` - 這是預設值。 `nodeadm`將安裝由與 EKS Kubernetes 版本相容的節點作業系統分發的最新`containerd`套件。 `distro` 不是 Red Hat Enterprise Linux (RHEL) 作業系統支援的值。<br /> `docker` - `nodeadm`將安裝由 Docker 建置和分發且與 EKS Kubernetes 版本相容的最新`containerd`套件。 `docker` 不是 Amazon Linux 2023 支援的值。<br /> `none` - `nodeadm` 不會安裝 `containerd` 套件。您必須先手動安裝 `containerd`，然後才能執行 `nodeadm init`。 | 
|  `-r`,<br /> `--region`  | FALSE | 指定下載成品 AWS 的區域，例如 SSM Agent。預設為 `us-west-2`。 | 
|  `-t`,<br /> `--timeout`  | FALSE | 安裝命令持續時間上限。輸入遵循持續時間格式。例如 `1h23m`。安裝命令的預設下載逾時設定為 20 分鐘。 | 
|  `-h`, `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 

 **範例** 

`1.32` 使用 AWS Systems Manager (SSM) 做為登入資料提供者來安裝 Kubernetes 版本

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

`1.32` 使用 AWS Systems Manager (SSM) 作為登入資料提供者安裝 Kubernetes 版本，Docker 作為容器化來源，下載逾時為 20 分鐘。

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

`1.32` 使用 AWS IAM Roles Anywhere 做為登入資料提供者來安裝 Kubernetes 版本

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


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-c`,<br /> `--config-source`  | TRUE | nodeadm 組態的來源。對於混合節點，輸入應該遵循具有檔案結構描述的 URI。 | 
|  `-h`, `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 

 **範例** 

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


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-c`,<br /> `--config-source`  | TRUE | `nodeadm` 組態的來源。對於混合節點，輸入應該遵循具有檔案結構描述的 URI。 | 
|  `-s`,<br /> `--skip`  | FALSE | 要略過的 `init` 階段。除非有助於修正問題，否則不建議略過任何階段。<br /> **Values (數值)** <br /> `install-validation` 會略過檢查上述安裝命令是否已成功執行。<br /> 如果節點上已啟用防火牆，則 `cni-validation` 會略過檢查 Cilium 或 Calico CNI 的 VXLAN 連接埠是否已開啟<br /> `node-ip-validation` 會略過檢查節點 IP 是否落在遠端節點網路中的 CIDR 內 | 
|  `-h`, `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 

 **範例** 

```
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 major.minor 版本，例如 `1.32` 

 **Flags** 


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-c`,<br /> `--config-source`  | TRUE | `nodeadm` 組態的來源。對於混合節點，輸入應該遵循具有檔案結構描述的 URI。 | 
|  `-t`,<br /> `--timeout`  | FALSE | 下載成品逾時。輸入遵循持續時間格式。例如 1h23m。升級命令的預設下載逾時設定為 10 分鐘。 | 
|  `-s`,<br /> `--skip`  | FALSE | 要略過的升級階段。除非有助於修正問題，否則不建議略過任意階段。<br /> **Values (數值)** <br /> `pod-validation` 會略過檢查節點上是否所有 Pod 都在執行，但常駐程式集和靜態 Pod 除外。<br /> `node-validation` 會略過檢查是否已包圍隔離節點。<br /> `init-validation` 會略過檢查節點是否在執行升級之前已成功初始化。<br /> `containerd-major-version-upgrade` 可防止在節點升級期間進行容器主要版本升級。 | 
|  `-h`, `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 

 **範例** 

```
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` 命令會停止並移除 `nodeadm` 在 `nodeadm install` 期間安裝的成品，包括 kubelet 和 containerd。請注意，解除安裝命令不會耗盡或刪除叢集中的混合節點。您必須分別執行耗盡和刪除操作，如需詳細資訊，請參閱 [移除混合節點](hybrid-nodes-remove.md)。根據預設，如果節點上還有剩餘的 Pod，則 `nodeadm uninstall` 不會繼續。同樣地，`nodeadm uninstall` 不會移除 CNI 相依性或您在叢集上執行的其他 Kubernetes 附加元件的相依性。若要從主機完全移除 CNI 安裝，請參閱 [設定混合節點的 CNI](hybrid-nodes-cni.md) 中的指示。如果您使用 AWS SSM 混合啟用做為內部部署憑證提供者，`nodeadm uninstall`命令會將您的主機取消註冊為 AWS SSM 受管執行個體。

 **用途** 

```
nodeadm uninstall [flags]
```

 **Flags** 


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-s`,<br /> `--skip`  | FALSE | 要略過的解除安裝階段。除非有助於修正問題，否則不建議略過任何階段。<br /> **Values (數值)** <br /> `pod-validation` 會略過檢查節點上是否所有 Pod 都在執行，但常駐程式集和靜態 Pod 除外。<br /> `node-validation` 會略過檢查是否已包圍隔離節點。<br /> `init-validation` 會略過檢查節點是否在執行解除安裝之前已成功初始化。 | 
|  `-h`,<br /> `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 
|  `-f`,<br /> `--force`  | FALSE | 強制刪除可能包含 Kubernetes 和 CNI 元件剩餘檔案的其他目錄。<br /> **WARNING** <br />這將刪除預設 Kubernetes 和 CNI 目錄中的所有內容 (`/var/lib/cni`、`/etc/cni/net.d` 等等)。如果您在這些位置存放您自己的資料，則請勿使用此旗標。<br />從 nodeadm `v1.0.9` 開始，`./nodeadm uninstall --skip node-validation,pod-validation --force` 命令不會再刪除 `/var/lib/kubelet` 目錄。這是因為它可能包含 Pod 磁碟區和磁碟區子路徑目錄，而這些目錄有時會包含掛載的節點檔案系統。<br /> **安全處理秘訣** <br />- 刪除掛載的路徑可能會導致意外刪除實際掛載的節點檔案系統。在手動刪除 `/var/lib/kubelet` 目錄之前，請仔細檢查所有作用中的掛載並安全地卸載磁碟區，以避免資料遺失。 | 

 **範例** 

```
nodeadm uninstall
```

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

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

`nodeadm debug` 命令可用於對運作狀態不佳或設定錯誤的混合節點進行故障診斷。它會驗證下列需求是否已就位。
+ 節點具有必要 AWS APIs的網路存取權，以取得登入資料，
+ 節點可以取得所設定混合節點 IAM 角色的 AWS 登入資料，
+ 節點具有對 EKS Kubernetes API 端點的網路存取權以及 EKS Kubernetes API 端點憑證的有效性，
+ 節點能夠使用 EKS 叢集進行身分驗證，其在叢集中的身分有效，而且該節點可以透過為 EKS 叢集設定的 VPC 存取 EKS 叢集。

如果發現錯誤，命令的輸出會建議故障診斷步驟。某些驗證步驟會顯示子程序。如果失敗，輸出會顯示在驗證錯誤下的 stderr 區段中。

 **用途** 

```
nodeadm debug [flags]
```

 **Flags** 


| 名稱 | 必要 | Description | 
| --- | --- | --- | 
|  `-c`, `--config-source`  | TRUE | `nodeadm` 組態的來源。對於混合節點，輸入應該遵循具有檔案結構描述的 URI。 | 
|  `--no-color`  | FALSE | 停用顏色輸出。適用於自動化。 | 
|  `-h`, `--help`  | FALSE | 顯示說明訊息，其中包含可用的旗標、子命令和定位值參數。 | 

 **範例** 

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

## Nodeadm 檔案位置
<a name="_nodeadm_file_locations"></a>

### nodeadm 安裝
<a name="_nodeadm_install_2"></a>

執行 `nodeadm install` 時，會設定下列檔案和檔案位置。


| Artifact | 路徑 | 
| --- | --- | 
| IAM Roles Anywhere CLI | /usr/local/bin/aws\_signing\_helper | 
| Kubelet 二進位檔 | /usr/bin/kubelet | 
| Kubectl 二進位檔 | usr/local/bin/kubectl | 
| ECR 憑證提供者 | /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<br />在 RHEL 和 AL2023 上 - /usr/bin/amazon-ssm-agent | 
| containerd | 在 Ubuntu 和 AL2023 上 - /usr/bin/containerd<br />在 RHEL 上 - /bin/containerd | 
| Iptables | 在 Ubuntu 和 AL2023 上 - /usr/sbin/iptables<br />在 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 env 檔案 | /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\_signing\_helper\_update.service | 
| Sysctl conf 檔案 | /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>

以下是混合節點登入`nodeConfig.yaml`資料 AWS IAM Roles Anywhere 的範例。

使用 AWS IAM Roles Anywhere 做為內部部署憑證提供者時，`nodeName`您在`nodeadm`組態中使用的 必須符合您為混合節點 IAM 角色設定範圍的許可。例如，如果您的混合節點 IAM 角色許可僅允許 AWS IAM Roles Anywhere 在角色工作階段名稱等於主機憑證的 CN 時擔任角色，則`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 組態和旗標。請參閱以下範例，了解如何新增額外的節點標籤 `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
```

**注意**  
容器版本 1.x 和 2.x 使用不同的組態格式。Containerd 1.x 使用組態版本 2，而 Containerd 2.x 使用組態版本 3。雖然 containerd 2.x 仍與組態第 2 版回溯相容，但建議使用組態第 3 版，以獲得最佳效能。使用 檢查您的容器版本`containerd --version`或檢閱`nodeadm`安裝日誌。如需組態版本控制的詳細資訊，請參閱 https：//https://containerd.io/releases/

您也可以使用 containerd 組態來啟用 SELinux 支援。在 containerd 上啟用 SELinux 後，請確保在節點上排程的 Pod 已啟用適當的 securityContext 和 seLinuxOptions。如需設定安全性內容的詳細資訊，請參閱 [Kubernetes 文件](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)。

**注意**  
根據預設，Red Hat Enterprise Linux (RHEL) 8 和 RHEL 9 已啟用 SELinux，並在主機上設定為嚴格。根據預設，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
```