協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 AWS Outposts 上建立 Amazon Linux 節點
本主題會說明如何啟動 Outpost 上已向 Amazon EKS 叢集註冊的 Amazon Linux 節點的 Auto Scaling 群組。叢集可以在 AWS 雲端或 Outpost 上。
-
現有的 Outpost。如需詳細資訊,請參閱什麼是 AWS Outpost。
-
現有 Amazon EKS 叢集。若要在 AWS 雲端部署叢集,請參閱建立 Amazon EKS 叢集。若要在 Outpost 上部署叢集,請參閱在 AWS Outposts 上建立本機 Amazon EKS 叢集以獲得高可用性。
-
假設您要在 AWS 雲端的叢集中建立節點,而且您在已啟用 AWS Outposts、 AWS Wavelength 或 AWS Local Zones 的 AWS 區域中有子網路。然後,在您建立叢集時,不得傳入這些子網路。如果您要在 Outpost 上的叢集中建立節點,則必須在建立叢集時在 Outpost 子網路中傳遞 。
-
(建議用於 AWS 雲端上的叢集) Amazon VPC CNI 外掛程式,適用於 Kubernetes 附加元件,其設定為其自身的 IAM 角色,並已連接必要的 IAM 政策。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA。本機叢集不支援服務帳戶的 IAM 角色。
您可以使用 eksctl
或 AWS Management Console (使用 AWS CloudFormation 範本) 建立自我管理的 Amazon Linux 節點群組。您也可使用 Terraform
您可以使用此頁面所述的下列工具,為本機叢集建立自我管理節點群組:
重要
-
自我管理節點群組包含您帳戶中的 Amazon EC2 執行個體。當您或 Amazon EKS 代表您更新控制平面版本時,這些執行個體不會自動升級。自我管理節點群組在主控台中沒有任何需要更新的指示。您可以檢視安裝在節點上的
kubelet
版本,方法是選取您叢集的 Overview (概觀) 標籤上的 Nodes (節點) 清單上的節點,以判斷哪些節點需要更新。您必須手動更新節點。如需詳細資訊,請參閱更新叢集的自我管理節點。 -
在自我管理節點上使用的 kubelet 憑證會發出一年過期。根據預設,憑證輪換不會啟用 (請參閱:https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration
),這表示如果您的自我管理節點執行超過一年,就無法再向 Kubernetes API 進行身分驗證。 -
最佳實務是建議客戶定期更新自我管理節點群組,以接收來自最新 Amazon EKS 最佳化 AMI CVEs 和安全修補程式。更新用於自我管理節點群組的 AMI 也會觸發節點的重新建立,並確保它們不會因為過期的 kubelet 憑證而發生問題。
-
或者,您也可以在建立自我管理節點群組時啟用用戶端憑證輪換 (請參閱:https://https://kubernetes.io/docs/tasks/tls/certificate-rotation/
),以確保 kubelet 憑證隨著目前憑證接近過期而續約。
eksctl
使用 啟動自我管理的 Linux 節點 eksctl
-
安裝安裝在您裝置
0.204.0
或 AWS CloudShell 上的eksctl
命令列工具版本 或更新版本。如需有關安裝或更新eksctl
的指示,請參閱eksctl
文件中的安裝一節。 -
如果您的叢集位於 AWS 雲端,且 AmazonEKS_CNI_Policy 受管 IAM 政策已連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給您改為與 Kubernetes
aws-node
服務帳戶建立關聯的 IAM 角色。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA。若您的叢集位於 Outpost 上,則政策必須連接至您的節點角色。 -
以下命令會在現有的叢集建立節點群組。叢集必須使用
eksctl
來建立。將al-nodes
取代為您的節點群組名稱。節點群組名稱不能超過 63 個字元。它必須以字母或數字開頭,但剩餘字元也可以包含連字符和底線。使用您叢集的名稱取代my-cluster
。此名稱僅能使用英數字元 (區分大小寫) 和連字號。它必須以英數字元開頭,且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。若您的叢集存在於 Outpost 上,請使用 Outpost 子網路的 ID 來取代id
。如果您的叢集存在於 AWS 雲端上,請將ID
取代為您建立叢集時未指定的子網路 ID。使用您 Outpost 支援的執行個體類型來取代instance-type
。將剩餘的範例值
取代為您自己的值。依預設,系統會使用與控制平面相同的 Kubernetes 版本來建立節點。使用您 Outpost 上可用的執行個體類型來取代
instance-type
。將
my-key
取代為您的 Amazon EC2 金鑰對或公有金鑰的名稱。此金鑰會在節點啟動後用於將 SSH 套用至節點。如果您還沒有 Amazon EC2 金鑰對,您可以在 中建立一個金鑰對 AWS Management Console。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的 Amazon EC2 金鑰對。使用下列命令來建立您的節點群組。
eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id
如果您的叢集部署在 AWS 雲端:
-
您部署的節點群組可以從與執行個體不同的 CIDR 區塊將
IPv4
地址指派給 Pod。如需詳細資訊,請參閱使用自訂聯網在替代子網路中部署 Pod。 -
您部署的節點群組不需要傳出網際網路存取。如需詳細資訊,請參閱部署網際網路存取受限的私有叢集。
如需所有可用選項和預設值的完整清單,請參閱
eksctl
文件中的 AWS Outposts Support。 -
如果節點無法加入叢集,請參閱節點無法加入叢集疑難排解 Amazon EKS 叢集和節點的問題無法將節點加入叢集,以及疑難排解 AWS Outposts 上的本機 Amazon EKS 叢集。
-
範例輸出如下。建立節點時,會有數行輸出。輸出的最後幾行之一類似於以下的範例行。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
-
(選用) 部署範例應用程式以測試您的叢集和 Linux 節點。
AWS Management Console
步驟 1:使用 啟動自我管理的 Linux 節點 AWS Management Console
-
下載最新版本的 AWS CloudFormation 範本。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
-
選擇 Create stack (建立堆疊),然後選取 With new resources (standard) (使用新資源 (標準))。
-
針對 Specify template (指定範本),選取 Upload a template file (上傳範本檔案),然後選取 Choose file (選擇檔案)。選取在上一步驟中下載的
amazon-eks-nodegroup.yaml
檔案,然後選取 Next (下一步)。 -
在 Specify stack details (指定堆疊詳細資訊) 頁面上,據此填寫下列參數,然後選擇 Next (下一步):
-
堆疊名稱:為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如,您可以呼叫它
al-nodes
。此名稱僅能使用英數字元 (區分大小寫) 和連字號。它必須以英數字元開頭,且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。 -
ClusterName:請輸入您叢集的名稱。如果此名稱與您的叢集名稱不相符,您的節點將無法加入叢集。
-
ClusterControlPlaneSecurityGroup:從您在建立 VPC 時產生的 AWS CloudFormation 輸出中選擇 SecurityGroups 值。
下列步驟顯示擷取適用群組的一種操作。
-
開啟 Amazon EKS 主控台
。 -
選擇叢集的名稱。
-
選擇 Networking (網路) 索引標籤。
-
從 ClusterControlPlaneSecurityGroup 下拉式清單中選取時,請使用 Additional Security Group (其他安全群組) 值作為參考。
-
-
NodeGroupName:輸入節點群組的名稱。此名稱稍後可用來識別為您的節點建立的 Auto Scaling 節點群組。
-
NodeAutoScalingGroupMinSize:輸入節點 Auto Scaling 群組可以縮減的最低節點數。
-
NodeAutoScalingGroupDesiredCapacity:堆疊建立時,輸入欲擴展的所需節點數量。
-
NodeAutoScalingGroupMaxSize:輸入節點 Auto Scaling 群組可以擴增的最大節點數。
-
NodeInstanceType:選擇節點的執行個體類型。如果您的叢集在 AWS 雲端上執行,如需詳細資訊,請參閱選擇最佳的 Amazon EC2 節點執行個體類型。若您的叢集正於 Outpost 上執行,則您僅可選取 Outpost 上可用的執行個體類型。
-
NodeImageIdSSMParam:預先填入變數 Kubernetes 版本最近 Amazon EKS 最佳化 AMI 的 Amazon EC2 Systems Manager 參數。若要使用 Amazon EKS 支援的不同 Kubernetes 次要版本,請將
1.XX
取代為不同的支援版本。建議指定與叢集相同的 Kubernetes 版本。若要使用 Amazon EKS 最佳化加速 AMI,請將
amazon-linux-2
取代為amazon-linux-2-gpu
。若要使用 Amazon EKS 最佳化 Arm AMI,請將amazon-linux-2
取代為amazon-linux-2-arm64
。注意
Amazon EKS 節點 AMIs 是以 Amazon Linux 為基礎。您可以在 Amazon Linux 安全中心選擇所需版本的索引標籤,來追蹤 Amazon Linux 的安全
或隱私權事件。您也可以訂閱適用的 RSS 摘要。安全與隱私權事件包含問題的概觀、哪些套件受到影響,以及如何更新您的執行個體以修正問題。 -
NodeImageId:(選用) 如果您使用自己的自訂 AMI (而非 Amazon EKS 最佳化 AMI),請輸入您 AWS 區域的節點 AMI ID。如果您在此指定值,則會覆寫 NodeImageIdSSMParam 欄位中的任何值。
-
NodeVolumeSize:為您的節點指定根磁碟區大小 (以 GiB 為單位)。
-
NodeVolumeType:為您的節點指定根磁碟區類型。
-
KeyName:輸入 Amazon EC2 SSH 金鑰對的名稱,您可以在節點啟動後使用該金鑰對來透過 SSH 連接至節點。如果您還沒有 Amazon EC2 金鑰對,您可以在 中建立一個金鑰對 AWS Management Console。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的 Amazon EC2 金鑰對。
注意
如果您未在此處提供金鑰對, AWS CloudFormation 堆疊建立會失敗。
-
BootstrapArguments:您可將多個選用引數傳遞至節點。如需詳細資訊,請檢視 GitHub 上的 bootstrap script usage information
(啟動程序指令碼使用資訊)。如果您要將節點新增至 AWS Outposts 上的 Amazon EKS 本機叢集 (其中 Kubernetes 控制平面執行個體在 AWS Outposts 上執行),且叢集沒有傳入和傳出網際網路連線 (也稱為私有叢集),則必須提供下列引導引數 (作為單行)。 --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}
若要擷取 Amazon
CLUSTER_CA
EKS 本機叢集CLUSTER_ID
的APISERVER_ENDPOINT
、 和 值,請執行下列 AWS CLI 命令。將 cluster-name 取代為您的叢集名稱,並將區域 (例如 us-east-1) 取代為您的叢集 AWS 區域。echo "CLUSTER_CA=$(aws eks describe-cluster --name cluster-name --region region --query cluster.certificateAuthority.data --output text)" echo "APISERVER_ENDPOINT=$(aws eks describe-cluster --name cluster-name --region region --query cluster.endpoint --output text)" echo "CLUSTER_ID=$(aws eks describe-cluster --name cluster-name --region region --query cluster.id --output text)"
-
DisableIMDSv1:預設情況下,每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。若要防止節點群組中的未來節點和 Pod 使用 IMDSv1,請將 DisableIMDSv1 設為 true。如需 IMDS 的詳細資訊,請參閱設定執行個體中繼資料服務。如需在節點上限制存取的詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
子網路:如果叢集位於 Outpost 上,則請至少在 VPC 中選擇一個私有子網路。在選擇子網路之前,請先檢閱子網路需求和注意事項。您可以看到哪些子網是私有子網,方法是從叢集的 Networking (聯網) 標籤打開每一個子網連結。
-
-
請在 Configure stack options (設定堆疊選項) 頁面上選取所需的選項,然後選擇 Next (下一頁)。
-
選取我確認 AWS CloudFormation 可能會建立 IAM 資源的左側核取方塊,然後選擇建立堆疊。
-
當當堆疊已完成建立時,從主控台將其選取,然後選擇 Outputs (輸出)。
-
為已建立的節點群組記錄 NodeInstanceRole。當您設定 Amazon EKS 節點時會需要此值。
步驟 2:啟用節點以加入您的叢集
-
檢查以瞭解是否有
aws-auth
ConfigMap
。kubectl describe configmap -n kube-system aws-auth
-
如果您看到
aws-auth
ConfigMap
,請視需要更新之。-
開啟
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)。
如果節點無法加入叢集,請參閱節點無法加入叢集疑難排解 Amazon EKS 叢集和節點的問題無法將節點加入叢集,以及疑難排解 AWS Outposts 上的本機 Amazon EKS 叢集。
-
安裝 Amazon EBS CSI 驅動程式。如需詳細資訊,請參閱 GitHub 上的 Installation
(安裝)。在 Set up driver permission (設定驅動程式權限) 區段中,請務必依照 Using IAM instance profile (使用 IAM 執行個體設定檔) 選項指示操作。您必須使用 gp2
儲存類別。不支援gp3
儲存體方案。若要在叢集上建立
gp2
儲存類別,請完成以下步驟。-
執行下列命令以建立
gp2-storage-class.yaml
檔案。cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
-
將清單檔案套用至叢集。
kubectl apply -f gp2-storage-class.yaml
-
-
(僅限 GPU 節點) 如果您選擇 GPU 執行個體類型和 Amazon EKS 最佳化加速 AMI,則必須將 Kubernetes 的 NVIDIA 裝置外掛程式
套用為叢集上的 DaemonSet。在執行下列命令之前,將 vX.X.X
取代為所需的 NVIDIA/k8s-device-plugin版本。 kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
Step3:其他動作
-
(選用) 部署範例應用程式以測試您的叢集和 Linux 節點。
-
若您的叢集部署在 Outpost 上,請跳過此步驟。如果您的叢集部署在 AWS 雲端上,則下列資訊為選用。如果 AmazonEKS_CNI_Policy 受管 IAM 政策連接至您的 Amazon EKS 節點 IAM 角色,建議您將其指派給您改為與 Kubernetes
aws-node
服務帳戶建立關聯的 IAM 角色。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA。