協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
混合節點 nodeadm 參考
Amazon EKS 混合節點 CLI (nodeadm) 可簡化混合節點元件的安裝、組態、註冊和解除安裝。您可以在作業系統映像中包含 nodeadm,以自動化混合節點引導,如需詳細資訊,請參閱 準備混合節點的作業系統。
混合節點的 nodeadm 版本與用於將 Amazon EC2 執行個體引導為 Amazon EKS 叢集中節點的 nodeadm 版本不同。遵循相應 nodeadm 版本的文件和參考。本文件頁面適用於混合節點 nodeadm 版本。
混合節點的原始程式碼 nodeadm 會發布在 https://github.com/aws/eks-hybrid
重要
您必須與擁有 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 |
|---|---|---|
|
|
TRUE |
要安裝的憑證提供者。支援的值為 |
|
|
FALSE |
Values (數值) |
|
|
FALSE |
指定下載成品 AWS 的區域,例如 SSM Agent。預設為 |
|
|
FALSE |
安裝命令持續時間上限。輸入遵循持續時間格式。例如 |
|
|
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 |
|---|---|---|
|
|
TRUE |
nodeadm 組態的來源。對於混合節點,輸入應該遵循具有檔案結構描述的 URI。 |
|
|
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 |
|---|---|---|
|
|
TRUE |
|
|
|
FALSE |
要略過的 Values (數值) 如果節點上已啟用防火牆,則 |
|
|
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 |
|---|---|---|
|
|
TRUE |
|
|
|
FALSE |
下載成品逾時。輸入遵循持續時間格式。例如 1h23m。升級命令的預設下載逾時設定為 10 分鐘。 |
|
|
FALSE |
要略過的升級階段。除非有助於修正問題,否則不建議略過任意階段。 Values (數值) |
|
|
FALSE |
顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。 |
範例
nodeadm upgrade 1.32 -c file://nodeConfig.yaml
nodeadm upgrade 1.32 -c file://nodeConfig.yaml --timeout 20m
nodeadm uninstall
nodeadm uninstall 命令會停止並移除 nodeadm 在 nodeadm install 期間安裝的成品,包括 kubelet 和 containerd。請注意,解除安裝命令不會耗盡或刪除叢集中的混合節點。您必須分別執行耗盡和刪除操作,如需詳細資訊,請參閱 移除混合節點。根據預設,如果節點上還有剩餘的 Pod,則 nodeadm uninstall 不會繼續。同樣地,nodeadm uninstall 不會移除 CNI 相依性或您在叢集上執行的其他 Kubernetes 附加元件的相依性。若要從主機完全移除 CNI 安裝,請參閱 設定混合節點的 CNI 中的指示。如果您使用 AWS SSM 混合啟用做為內部部署憑證提供者,nodeadm uninstall命令會將您的主機取消註冊為 AWS SSM 受管執行個體。
用途
nodeadm uninstall [flags]
Flags
| Name | 必要 | Description |
|---|---|---|
|
|
FALSE |
要略過的解除安裝階段。除非有助於修正問題,否則不建議略過任何階段。 Values (數值) |
|
|
FALSE |
顯示說明訊息,其中包含可用的旗標、子命令和定位值參數。 |
|
|
FALSE |
強制刪除可能包含 Kubernetes 和 CNI 元件剩餘檔案的其他目錄。 WARNING 這將刪除預設 Kubernetes 和 CNI 目錄中的所有內容 ( 從 nodeadm 安全處理秘訣 - 刪除掛載的路徑可能會導致意外刪除實際掛載的節點檔案系統。在手動刪除 |
範例
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 |
|---|---|---|
|
|
TRUE |
|
|
|
FALSE |
停用顏色輸出。適用於自動化。 |
|
|
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