協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
建立自我管理的 Amazon Linux 節點
本主題會說明如何啟動已向 Amazon EKS 叢集註冊的 Linux 節點的 Auto Scaling 群組。節點加入叢集後,您就可以將 Kubernetes 應用程式部署至其中。您也可以使用 eksctl 或 AWS 管理主控台 來啟動自我管理的 Amazon Linux 節點。如果您需要在 AWS Outposts 上啟動節點,請參閱 在 AWS Outpost 上建立 Amazon Linux 節點。
-
現有 Amazon EKS 叢集。若要部署叢集,請參閱 建立 Amazon EKS 叢集。如果在已啟用 AWS Outposts、AWS Wavelength 或 AWS Local Zones 的 AWS 區域中擁有子網路,則建立您的叢集時,這些子網路不得傳入。
-
供節點使用的現有 IAM 角色。若要建立服務角色,請參閱Amazon EKS 節點 IAM 角色。如果此角色沒有任何 VPC CNI 的政策,則 VPC CNI Pod 需要以下個別角色。
-
(選用,但建議) Kubernetes 專用 Amazon VPC CNI 外掛程式的附加元件設定有自己的 IAM 角色,該角色已連接必要的 IAM 政策。如需詳細資訊,請參閱 設定 Amazon VPC CNI 外掛程式以使用 IRSA。
-
熟悉選擇最佳 Amazon EC2 節點執行個體類型中所列的考量事項。取決於您選擇的執行個體類型,您的叢集和 VPC 可能還有其他先決條件。
您可以使用下列任意一項啟動自我管理的 Linux 節點:
eksctl
使用 eksctl 啟動自我管理的 Linux 節點
-
在裝置或 AWS CloudShell 上安裝版本
0.214.0或更新版本的eksctl命令列工具。如需有關安裝或更新eksctl的指示,請參閱eksctl文件中的安裝一節。 -
(選用) 如果 AmazonEKS_CNI_Policy 受管 IAM 政策已連接至您的 Amazon EKS 節點 IAM 角色,建議您改為將其指派給您與 Kubernetes
aws-node服務帳戶相關聯的 IAM 角色。如需詳細資訊,請參閱 設定 Amazon VPC CNI 外掛程式以使用 IRSA。 -
以下命令會在現有的叢集建立節點群組。將
al-nodes取代為您的節點群組名稱。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。使用您叢集的名稱取代my-cluster。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。使用您自己的值取代其餘範例值。依預設,系統會使用與控制平面相同的 Kubernetes 版本來建立節點。選擇
--node-type的值之前,請檢閱選擇最佳 Amazon EC2 節點執行個體類型。使用 Amazon EC2 金鑰對或公有金鑰的名稱取代
my-key。此金鑰會在節點啟動後用於將 SSH 套用至節點。如果您還沒有 Amazon EC2 金鑰對,可以在 AWS 管理主控台 中建立一個。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的 Amazon EC2 金鑰對。使用下列命令來建立您的節點群組。
重要
如果想將節點群組部署至 AWS Outposts、Wavelength 或 Local Zone 子網路,還需注意其他考量事項:
-
在建立叢集時,不得傳入子網路。
-
您必須使用指定子網路和
volumeType的組態檔案來建立節點群組。如需詳細資訊,請參閱: gp2 eksctl文件中的從組態檔案建立節點群組和組態檔案結構描述 。
eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed=false \ --ssh-public-key my-key若要部署節點群組:
-
其可以將比預設組態更大量的 IP 位址指派給 Pod,請參閱 將更多 IP 位址指派給具有字首的 Amazon EKS 節點。
-
其可以從與執行個體不同的 CIDR 區塊將
IPv4地址指派給 Pod,請參閱 使用自訂聯網在替代子網路中部署 Pod。 -
其可以將
IPv6地址指派給 Pod 和服務,請參閱 了解叢集、Pod 與服務的 IPv6 位址。 -
沒有傳入網際網路存取,請參閱 部署網際網路存取受到限制的私有叢集。
如需所有可用選項和預設值的完整清單,請輸入以下命令。
eksctl create nodegroup --help如果節點無法加入叢集,請參閱「故障診斷」章節中的 節點無法加入叢集。
範例輸出如下。建立節點時,會有數行輸出。輸出的最後幾行之一類似於以下的範例行。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
-
(選用) 部署範例應用程式以測試您的叢集和 Linux 節點。
-
如果下列條件為真,我們建議封鎖 Pod 對 IMDS 的存取:
-
您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pod 僅具有所需的最低許可。
-
叢集中沒有 Pod 出於其他原因 (例如擷取當前的 AWS 區域) 需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。
如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
AWS 管理主控台
步驟 1:使用 AWS 管理主控台 啟動自我管理的 Linux 節點
-
下載最新版的 AWS CloudFormation 範本。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml -
等待您的叢集狀態顯示為
ACTIVE。如果在叢集處於作用中狀態之前啟動節點,則節點向叢集註冊將會失敗,導致必須再次啟動。 -
選擇 Create stack (建立堆疊),然後選取 With new resources (standard) (使用新資源 (標準))。
-
針對 Specify template (指定範本),選取 Upload a template file (上傳範本檔案),然後選取 Choose file (選擇檔案)。
-
選取您下載的
amazon-eks-nodegroup.yaml檔案。 -
選取下一步。
-
在 Specify stack details (指定堆疊詳細資訊) 頁面上,據此填寫下列參數,然後選擇 Next (下一步):
-
堆疊名稱:為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如,您可以稱它為
my-cluster-nodes。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。 -
ClusterName:輸入建立 Amazon EKS 叢集時使用的名稱。此名稱必須與叢集名稱相同,否則節點無法加入叢集。
-
ClusterControlPlaneSecurityGroup:選擇來自您建立 VPC 時所產生 AWS CloudFormation 輸出的 SecurityGroups 值。
下列步驟顯示擷取適用群組的一種操作。
-
開啟 Amazon EKS 主控台
。 -
選擇叢集的名稱。
-
選擇 Networking (網路) 索引標籤。
-
從 ClusterControlPlaneSecurityGroup 下拉式清單中選取時,請使用 Additional Security Group (其他安全群組) 值作為參考。
-
-
NodeGroupName:輸入節點群組的名稱。此名稱稍後可用於識別為您節點建立的 Auto Scaling 節點群組。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。
-
NodeAutoScalingGroupMinSize:輸入節點 Auto Scaling 群組可以縮減的最低節點數。
-
NodeAutoScalingGroupDesiredCapacity:堆疊建立時,輸入欲擴展的所需節點數量。
-
NodeAutoScalingGroupMaxSize:輸入節點 Auto Scaling 群組可以擴增的最大節點數。
-
NodeInstanceType:選擇節點的執行個體類型。如需詳細資訊,請參閱 選擇最佳的 Amazon EC2 節點執行個體類型。
-
NodeImageIdSSMParam:為變數 Kubernetes 版本預先填入了最近 Amazon EKS 最佳化 AMI 的 Amazon EC2 Systems Manager 參數。若要使用 Amazon EKS 支援不同的 Kubernetes 次要版本,請將
1.XX取代為不同的支援的版本。建議指定與叢集相同的 Kubernetes 版本。您亦可使用不同的 AMI 類型來取代
amazon-linux-2。如需詳細資訊,請參閱 擷取建議的 Amazon Linux AMI ID。注意
Amazon EKS 節點 AMI 以 Amazon Linux 為基礎。您可以透過 Amazon Linux 安全中心
或是訂閱關聯的 RSS 摘要 ,追蹤 Amazon Linux 2 的安全或隱私權事件。安全與隱私權事件包含問題的概觀、哪些套件受到影響,以及如何更新您的執行個體以修正問題。 -
NodeImageId:(選用) 如果您使用自己的自訂 AMI (而不是 Amazon EKS 最佳化 AMI),請輸入 AWS 區域的節點 AMI ID。如果您在此指定值,則會覆寫 NodeImageIdSSMParam 欄位中的任何值。
-
NodeVolumeSize:為您的節點指定根磁碟區大小 (以 GiB 為單位)。
-
NodeVolumeType:為您的節點指定根磁碟區類型。
-
KeyName:輸入 Amazon EC2 SSH 金鑰對的名稱,您可以在節點啟動後使用該金鑰對來透過 SSH 連接至節點。如果您還沒有 Amazon EC2 金鑰對,可以在 AWS 管理主控台 中建立一個。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的 Amazon EC2 金鑰對。
注意
如果您未在此提供金鑰對,則 AWS CloudFormation 堆疊建立失敗。
-
BootstrapArguments:指定要傳遞至節點引導指令碼的任何選用引數,例如額外的
kubelet引數。如需詳細資訊,請檢視 GitHub 上的 bootstrap script usage information(啟動程序指令碼使用資訊)。 若要部署節點群組:
-
其可以將比預設組態更大量的 IP 位址指派給 Pod,請參閱 將更多 IP 位址指派給具有字首的 Amazon EKS 節點。
-
其可以從與執行個體不同的 CIDR 區塊將
IPv4地址指派給 Pod,請參閱 使用自訂聯網在替代子網路中部署 Pod。 -
其可以將
IPv6地址指派給 Pod 和服務,請參閱 了解叢集、Pod 與服務的 IPv6 位址。 -
沒有傳入網際網路存取,請參閱 部署網際網路存取受到限制的私有叢集。
-
-
DisableIMDSv1:預設情況下,每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。若要防止節點群組中的未來節點和 Pod 使用 MDSv1,請將 DisableIMDSv1 設定為 true。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務。如需在節點上限制存取的詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
VpcId:輸入您建立的 VPC ID。
-
子網路:選擇您為 VPC 建立的子網路。如果您已依照為您的 Amazon EKS 叢集建立 Amazon VPC 中所述的步驟建立 VPC,則只需指定要啟動節點的 VPC 中的私有子網路。您可以看到哪些子網是私有子網,方法是從叢集的 Networking (聯網) 標籤打開每一個子網連結。
重要
-
如有任何子網路是公有子網路,則必須啟用自動公有 IP 地址指派設定。如果未針對公有子網路啟用此設定,則您部署至該公有子網路的任何節點都不會獲派公有 IP 位址,而且無法與叢集或其他 AWS 服務通訊。如果子網路是在 2020 年 3 月 26 日前使用任一 Amazon EKS AWS CloudFormation VPC 範本部署的,或使用
eksctl部署的,則會停用公有子網路的自動公有 IP 位址指派。如需如何啟用子網路的公有 IP 地址指派的相關資訊,請參閱修改您子網路的公有 IPv4 定址屬性。如果節點部署到私有子網路,則可透過 NAT 閘道來與叢集和其他 AWS 服務通訊。 -
如果子網路無法存取網際網路,請確保您已知悉部署網際網路存取受到限制的私有叢集中的考量事項和額外步驟。
-
如果選取 AWS Outposts、Wavelength 或 Local Zone 子網路,則建立叢集時,子網路不得傳入。
-
-
-
請在 Configure stack options (設定堆疊選項) 頁面上選取所需的選項,然後選擇 Next (下一頁)。
-
選取我了解 AWS CloudFormation 會建立 IAM 資源。左側的核取方塊,然後選擇建立堆疊。
-
當當堆疊已完成建立時,從主控台將其選取,然後選擇 Outputs (輸出)。
-
為已建立的節點群組記錄 NodeInstanceRole。當您設定 Amazon EKS 節點時會需要此值。
步驟 2:讓節點加入叢集
注意
如果您在沒有傳出網際網路存取權的私有 VPC 內啟動節點,則必須啟用節點才能從 VPC 內加入叢集。
-
檢查以瞭解是否有
aws-authConfigMap。kubectl describe configmap -n kube-system aws-auth -
如果您看到
aws-authConfigMap,請視需要更新之。-
開啟
ConfigMap進行編輯。kubectl edit -n kube-system configmap/aws-auth -
視需要新增
mapRoles個項目。將rolearn值設定為您在先前程序中記錄的 NodeInstanceRole 值。[...] data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...] -
儲存檔案並結束您的文字編輯器。
-
-
如果您收到一個錯誤,說明 "
Error from server (NotFound): configmaps "aws-auth" not found,那麼請套用股票ConfigMap。-
下載組態對應。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml -
在
aws-auth-cm.yaml檔案中,將rolearn值設定為您在先前程序中紀錄的 NodeInstanceRole 值。您可以使用文字編輯器來完成此操作,或者透過取代my-node-instance-role並執行下列命令:sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml -
套用組態。此命令可能需要幾分鐘的時間來完成。
kubectl apply -f aws-auth-cm.yaml
-
-
查看節點的狀態,並等待他們到達
Ready狀態。kubectl get nodes --watch輸入
Ctrl+C傳回 Shell 提示。注意
如果您收到任何授權或資源類型錯誤,請參閱故障診斷主題中的未經授權或存取遭拒 (kubectl)。
如果節點無法加入叢集,請參閱「故障診斷」章節中的 節點無法加入叢集。
-
(僅限 GPU 節點) 若您選擇了 GPU 執行個體類型和 Amazon EKS 最佳化加速 AMI,則必須套用 Kubernetes 專用 NVIDIA 裝置外掛程式
作為叢集上的 DaemonSet。請先以您想要的 NVIDIA/k8s-device-plugin 版本來取代 vX.X.X,然後再執行下列命令。kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
步驟 3:其他動作
-
(選用) 部署範例應用程式以測試您的叢集和 Linux 節點。
-
(選用) 如果 AmazonEKS_CNI_Policy 受管 IAM 政策 (如果您有
IPv4叢集) 或AmazonEKS_CNI_IPv6_Policy(您自我建立的政策,前提是如果您有IPv6叢集) 連接至 Amazon EKS 節點 IAM 角色,建議改為將其指派給您與 Kubernetesaws-node服務帳戶相關聯的 IAM 角色。如需詳細資訊,請參閱 設定 Amazon VPC CNI 外掛程式以使用 IRSA。 -
如果下列條件為真,我們建議封鎖 Pod 對 IMDS 的存取:
-
您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pod 僅具有所需的最低許可。
-
叢集中沒有 Pod 出於其他原因 (例如擷取當前的 AWS 區域) 需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。
如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -