混合節點 nodeadm 參考 - Amazon EKS

協助改進此頁面

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

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

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

混合節點 nodeadm 參考

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

混合節點的 nodeadm 版本與用於將 Amazon EC2 執行個體引導為 Amazon EKS 叢集中節點的 nodeadm 版本不同。遵循相應 nodeadm 版本的文件和參考。本文件頁面適用於混合節點 nodeadm 版本。

混合節點的原始程式碼 nodeadm 會發布在 https://github.com/aws/eks-hybrid GitHub 儲存庫中。

重要

您必須與擁有 root/sudo 權限的使用者一同執行 nodeadm

下載 nodeadm

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

nodeadm install 命令可用於安裝執行混合節點並將其加入 Amazon EKS 叢集所需的成品和相依性。nodeadm install 命令可在每個混合節點上分別執行,也可以在映像建置管道期間執行,進而在作業系統映像中預先安裝混合節點相依性。

用途

nodeadm install [KUBERNETES_VERSION] [flags]

位置引數

(必要) KUBERNETES_VERSION 要安裝的 EKS Kubernetes major.minor 版本,例如 1.32

Flags

Name 必要 Description

-p,

--credential-provider

TRUE

要安裝的憑證提供者。支援的值為 iam-rassm。如需詳細資訊,請參閱準備混合節點的憑證

-s,

--containerd-source

FALSE

containerd 的來源。nodeadm 支援從 OS distro、Docker 套件安裝 containerd,並略過 containerd 安裝。

Values (數值)

distro - 這是預設值。 nodeadm將安裝由與 EKS Kubernetes 版本相容的節點作業系統分發的最新containerd套件。 distro 不是 Red Hat Enterprise Linux (RHEL) 作業系統支援的值。

docker - nodeadm將安裝由 Docker 建置和分發且與 EKS Kubernetes 版本相容的最新containerd套件。 docker 不是 Amazon Linux 2023 支援的值。

none - nodeadm 不會安裝 containerd 套件。您必須先手動安裝 containerd,然後才能執行 nodeadm init

-r,

--region

FALSE

指定下載成品 AWS 的區域,例如 SSM Agent。預設為 us-west-2

-t,

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

nodeadm config check 命令會檢查提供的節點組態是否存在錯誤。此命令可用於確認和驗證混合節點組態檔案的正確性。

用途

nodeadm config check [flags]

Flags

Name 必要 Description

-c,

--config-source

TRUE

nodeadm 組態的來源。對於混合節點,輸入應該遵循具有檔案結構描述的 URI。

-h, --help

FALSE

顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。

範例

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

nodeadm init

nodeadm init 命令會啟動混合節點並將其與設定的 Amazon EKS 叢集進行連接。如需如何設定 nodeConfig.yaml 檔案的詳細資訊,請參閱 SSM 混合啟用的節點組態IAM Roles Anywhere 的節點組態

用途

nodeadm init [flags]

Flags

Name 必要 Description

-c,

--config-source

TRUE

nodeadm 組態的來源。對於混合節點,輸入應該遵循具有檔案結構描述的 URI。

-s,

--skip

FALSE

要略過的 init 階段。除非有助於修正問題,否則不建議略過任何階段。

Values (數值)

install-validation 會略過檢查上述安裝命令是否已成功執行。

如果節點上已啟用防火牆,則 cni-validation 會略過檢查 Cilium 或 Calico CNI 的 VXLAN 連接埠是否已開啟

node-ip-validation 會略過檢查節點 IP 是否落在遠端節點網路中的 CIDR 內

-h, --help

FALSE

顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。

範例

nodeadm init -c file://nodeConfig.yaml

nodeadm upgrade

nodeadm upgrade 命令會將所有已安裝的成品升級到最新版本,並引導節點來設定升級的成品,並在 AWS上加入 EKS 叢集。升級是對節點上執行的工作負載的干擾命令。請先將工作負載移至另一個節點,然後再執行升級。

用途

nodeadm upgrade [KUBERNETES_VERSION] [flags]

位置引數

(必要) KUBERNETES_VERSION 要安裝的 EKS Kubernetes major.minor 版本,例如 1.32

Flags

Name 必要 Description

-c,

--config-source

TRUE

nodeadm 組態的來源。對於混合節點,輸入應該遵循具有檔案結構描述的 URI。

-t,

--timeout

FALSE

下載成品逾時。輸入遵循持續時間格式。例如 1h23m。升級命令的預設下載逾時設定為 10 分鐘。

-s,

--skip

FALSE

要略過的升級階段。除非有助於修正問題,否則不建議略過任意階段。

Values (數值)

pod-validation 會略過檢查節點上是否所有 Pod 都在執行,但常駐程式集和靜態 Pod 除外。

node-validation 會略過檢查是否已包圍隔離節點。

init-validation 會略過檢查節點是否在執行升級之前已成功初始化。

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

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

用途

nodeadm uninstall [flags]

Flags

Name 必要 Description

-s,

--skip

FALSE

要略過的解除安裝階段。除非有助於修正問題,否則不建議略過任何階段。

Values (數值)

pod-validation 會略過檢查節點上是否所有 Pod 都在執行,但常駐程式集和靜態 Pod 除外。

node-validation 會略過檢查是否已包圍隔離節點。

init-validation 會略過檢查節點是否在執行解除安裝之前已成功初始化。

-h,

--help

FALSE

顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。

-f,

--force

FALSE

強制刪除可能包含 Kubernetes 和 CNI 元件剩餘檔案的其他目錄。

WARNING

這將刪除預設 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 磁碟區和磁碟區子路徑目錄,而這些目錄有時會包含掛載的節點檔案系統。

安全處理秘訣

- 刪除掛載的路徑可能會導致意外刪除實際掛載的節點檔案系統。在手動刪除 /var/lib/kubelet 目錄之前,請仔細檢查所有作用中的掛載並安全地卸載磁碟區,以避免資料遺失。

範例

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

nodeadm debug

nodeadm debug 命令可用於對運作狀態不佳或設定錯誤的混合節點進行故障診斷。它會驗證下列需求是否已就位。

  • 節點具有必要 AWS APIs的網路存取權,以取得登入資料,

  • 節點可以取得所設定混合節點 IAM 角色的 AWS 登入資料,

  • 節點具有對 EKS Kubernetes API 端點的網路存取權以及 EKS Kubernetes API 端點憑證的有效性,

  • 節點能夠使用 EKS 叢集進行身分驗證,其在叢集中的身分有效,而且該節點可以透過為 EKS 叢集設定的 VPC 存取 EKS 叢集。

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

用途

nodeadm debug [flags]

Flags

Name 必要 Description

-c, --config-source

TRUE

nodeadm 組態的來源。對於混合節點,輸入應該遵循具有檔案結構描述的 URI。

--no-color

FALSE

停用顏色輸出。適用於自動化。

-h, --help

FALSE

顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。

範例

nodeadm debug -c file://nodeConfig.yaml

Nodeadm 檔案位置

nodeadm 安裝

執行 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

在 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

執行 nodeadm init 時,會設定下列檔案和檔案位置。

Name 路徑

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/contianerd.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 混合啟用的節點組態

以下是針對混合節點登入資料使用 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 的節點組態

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

使用 AWS IAM Roles Anywhere 做為內部部署憑證提供者時,nodeName您在nodeadm組態中使用的 必須符合您為混合節點 IAM 角色設定範圍的許可。例如,如果您的混合節點 IAM 角色許可僅允許 AWS IAM Roles Anywhere 在角色工作階段名稱等於主機憑證的 CN 時擔任角色,則nodeadm組態nodeName中的 必須與您憑證的 CN 相同。您使用的 nodeName 不可超過 64 個字元。如需詳細資訊,請參閱準備混合節點的憑證

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 的節點組態 (選用)

您可以在 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 的節點組態 (選用)

您可以在 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 文件

注意

根據預設,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