本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用啟動範本自訂受管節點
若要取得最高層級的自訂,您可以使用自己的啟動範本來部署受管節點。使用啟動範本可提供下列功能:
-
在部署節點時提供啟動程序引數,例如額外的
kubelet
引數。 -
將 IP 地址指派給來自不同於將 IP 地址指派給節點之 CIDR 區塊的 Pods。
-
將自己的自訂 AMI 部署至節點。
-
將您自己的自訂 CNI 部署至節點。
如果您在第一次建立受管節點群組期間提供自己的啟動範本,稍後也會得到更出色的靈活性。只要使用自己的啟動範本部署受管節點群組,您就可以使用不同版本的相同啟動範本來反覆更新。將節點群組更新為不同版本的啟動範本時,群組中的所有節點都會回收,以符合指定啟動範本版本的新組態。
一律使用 Amazon EC2 Auto Scaling 群組所使用的啟動範本部署受管節點群組。如果未提供啟動範本,Amazon EKS API 會使用帳戶中的預設值自動建立此啟動範本。然而,我們不建議您修改自動產生的啟動範本。此外,未使用自訂啟動範本的現有節點群組無法直接更新。相反,您必須建立具有自訂啟動範本的新節點群組,才能執行此動作。
啟動範本組態基礎知識
您可以使用 AWS Management Console、 AWS CLI或開發 AWS 套件建立 Amazon EC2 自動擴展啟動範本。如需詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的建立 Auto Scaling 群組的啟動範本。啟動範本中的某些設定與用於受管理節點組態的設定類似。使用啟動範本部署或更新節點群組時,必須在節點群組組態或啟動範本其中一個位置中指定某些設定。請勿同時在兩個位置指定同一設定。如果設定存在於不應該的地方,則建立或更新節點群組之類的動作會失敗。
下表會列出啟動範本中禁止的設定。該表也會列出受管節點群組組態中需要的類似設定 (如果有)。列出的設定是顯示在主控台中的設定。它們在 AWS CLI 和 SDK 中可能具有相似但不同的名稱。
啟動範本:禁止 | Amazon EKS 節點群組組態 |
---|---|
Network interfaces (網路介面) (Add network interface (新增網路介面)) 下的 Subnet (子網) | Specify networking (指定聯網) 頁面上 Node Group network configuration (節點群組網路組態) 下的 Subnets (子網) |
Advanced details (進階詳細資訊) 下的 IAM instance profile (IAM 執行個體描述檔) | Configure Node Group (設定節點群組) 頁面上 Node Group configuration (節點群組組態) 下的 Node IAM Role (節點 IAM 角色) |
Advanced details (進階詳細資訊) 下的 Shutdown behavior (關機行為) 和 Stop - Hibernate behavior (停用 – 休眠行為)。為兩種設定在啟動範本中保留預設 Don't include in launch template setting (請勿包含在啟動範本設定中)。 | 無同等。Amazon EKS 必須控制執行個體生命週期,而非 Auto Scaling 群組。 |
下表會列出受管節點群組組態中禁止的設定。該表也會列出類似的設定 (如果有),這些設定在啟動範本中是必要設定。列出的設定是顯示在主控台中的設定。它們可能在 AWS CLI 和 SDK 中具有類似的名稱。
Amazon EKS 節點群組組態設定:禁止 | 啟動範本 |
---|---|
(僅當您在啟動模板中指定了自訂 AMI 時) 在 Set compute and scaling configuration (設定運算和擴展組態) 頁面上 Node Group compute configuration (節點群組運算組態) 下的 AMI type (AMI 類型) – 主控台顯示 Specified in launch template (在啟動範本中指定) 以及指定的 AMI ID。 如果未在啟動範本中指定 Application and OS Images (Amazon Machine Image) (應用程式和作業系統映像 (Amazon Machine Image)),您可在節點群組組態中選取 AMI。 |
Launch template contents (啟動範本內容) 下的 Application and OS Images (Amazon Machine Image) (應用程式和作業系統映像 (Amazon Machine Image)):如果您有下列任一要求,則必須指定 ID:
|
Set compute and scaling configuration (設定運算和擴展組態) 頁面上 Node Group compute configuration (節點群組運算組態) 下的 Disk size (磁碟大小):主控台顯示 Specified in launch template (在啟動範本中指定)。 | Storage (Volumes) (儲存 (磁碟區)) (Add new volume (新增磁碟區)) 下的 Size (大小)。您必須在啟動範本中指定此選項。 |
Specify Networking (指定聯網) 頁面上 Node Group configuration (節點群組組態) 下的 SSH key pair (SSH 金鑰對) – 主控台會顯示在啟動範本中指定的金鑰,或顯示 Not specified in launch template (未在啟動範本中指定)。 | Key pair (login) (金鑰對 (登入)) 下的 Key pair name (金鑰對名稱)。 |
使用啟動範本時,您無法指定允許遠端存取的來源安全群組。 | 針對執行個體的 Network settings (網路設定) 下的 Security groups (安全群組) 或 Network interfaces (網路介面) 下的 Security groups (安全群組) (Add network interface (新增網路介面)),但不能兩者同時選擇。如需詳細資訊,請參閱 使用自訂安全群組。 |
注意
-
如果使用啟動範本部署節點群組,請在啟動範本的 Launch template contents (啟動範本內容) 中指定零或一個 Instance type (執行個體類型)。您也可以在主控台上的 Set compute and scaling configuration (設定運算和擴展組態) 頁面中,為 Instance types (執行個體類型) 指定 0 到 20 個執行個體類型。您還可以使用其他使用 Amazon EKS API 的工具來執行這項操作。如果在啟動範本中指定執行個體類型,並使用該啟動範本來部署節點群組,則無法在主控台中指定任何執行個體類型,或使用其他使用 Amazon EKS API 的工具。如果未在啟動範本、主控台中或使用其他使用 Amazon EKS API 的工具指定執行個體類型,請使用
t3.medium
執行個體類型。如果您的節點群組正在使用 Spot 容量類型,則建議使用主控台指定多個執行個體類型。如需詳細資訊,請參閱 受管節點群組容量類型。 -
如果您部署到節點群組的任何容器使用執行個體中繼資料服務版本 2,請確定在啟動範本中將 Metadata response hop limit (中繼資料回應躍點限制) 設定為
2
。如需詳細資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的執行個體中繼資料和使用者資料。如果在未使用自訂啟動範本的情況下部署受管節點群組,則會自動為預設啟動範本中的節點群組設定此值。
標記 Amazon EC2 執行個體
您可以使用啟動範本的 TagSpecification
參數,以指定要將哪些標籤套用至節點群組中的 Amazon EC2 執行個體。IAM 實體呼叫 CreateNodegroup
或 UpdateNodegroupVersion
API 必須擁有 ec2:RunInstances
和 ec2:CreateTags
許可,而且標籤必須新增至啟動範本。
使用自訂安全群組
您可以使用啟動範本來指定自訂 Amazon EC2 安全群組以套用至節點群組中的執行個體。這可以是在執行個體層級安全群組參數中,也可以是網路介面組態參數的一部分。不過,您無法建立同時指定執行個體層級和網路介面安全群組的啟動範本。請考慮下列適用於搭配受管節點群組使用之自訂安全群組的條件:
-
Amazon EKS 僅允許使用單一網路介面規格的啟動範本。
-
預設情況下,Amazon EKS 將叢集安全群組套用至節點群組中的執行個體,以促進節點與控制平面之間的通訊。如果使用先前提到的任一選項在啟動範本中指定自訂安全群組,則 Amazon EKS 不會新增叢集安全群組。因此,您必須確保安全群組的傳入和傳出規則可啟用與叢集端點的通訊。如果安全群組規則不正確,工作節點便無法加入叢集。如需安全群組規則的詳細資訊,請參閱 Amazon EKS 安全群組與考量。
-
如需 SSH 存取節點群組中的執行個體,請包含允許該存取的安全群組。
Amazon EC2 使用者資料
啟動範本包含自訂使用者資料的區段。您可以在此區段中指定節點群組的組態設定,無需手動建立個別自訂 AMI。如需有關 Bottlerocket 可用設定的詳細資訊,請參閱 GitHub 上的 Using user data
您可以在啟動執行個體時使用 cloud-init
提供啟動範本中的 Amazon EC2 使用者資料。如需詳細資訊,請參閱 cloud-init 文件
與受管節點群組搭配使用的啟動範本中的 Amazon EC2 使用者資料,必須為 Amazon Linux AMI 的 MIME 分段封存kubelet
的使用者資料中指定任何命令。這會作為 Amazon EKS 合併使用者資料的一部分執行。某些 kubelet
參數 (例如在節點上設定標籤) 可以透過受管節點群組 API 直接設定。
注意
如果有關進階 kubelet
自訂 (包括手動啟動或傳入自訂組態參數) 的詳細資訊,請參閱 指定 AMI。如果啟動範本中指定自訂 AMI ID 時,Amazon EKS 不會合併使用者資料。
下列詳細資訊提供有關使用者資料區段的詳細資訊。
指定 AMI
如果有下列其中一項要求,請在啟動範本 ImageId
欄位中指定 AMI ID。選取您對其他資訊的要求。
引導是一個術語,用於描述新增在執行個體啟動時可以執行的命令。例如,引導允許使用額外的 kubelet
eksctl
將引數傳遞給 bootstrap.sh
而不指定啟動範本。您也可以在啟動範本的使用者資料區段中指定資訊來執行此動作。
引導是一個術語,用於描述新增在執行個體啟動時可以執行的命令。您可以使用 eksctl
將引數傳遞給 Start-EKSBootstrap.ps1
而不指定啟動範本。您也可以在啟動範本的使用者資料區段中指定資訊來執行此動作。
如果您想指定自訂 Windows AMI ID,請注意下列考量事項:
-
您必須使用啟動範本,並在使用者資料區段中提供所需引導命令。若要擷取所需 Windows ID,您可以使用 Amazon EKS 最佳化 Windows AMI 中的資料表。
-
您需滿足幾個限制和條件。例如,您必須新增
eks:kube-proxy-windows
至 AWS IAM 驗證器設定對應。如需詳細資訊,請參閱 指定 AMI ID 時的限制和條件。
在啟動範本的使用者資料區段中指定下列資訊。使用您自己的值取代每一個
。example value
-APIServerEndpoint
、-Base64ClusterCA
,和 -DNSClusterIP
引數為選用。但是,定義引述會允許 Start-EKSBootstrap.ps1
指令碼避免進行 describeCluster
呼叫。
-
唯一需要的引數是叢集名稱 (
)。my-cluster
-
若要擷取您的叢集的
,請執行以下命令。certificate-authority
aws eks describe-cluster --query "cluster.certificateAuthority.data" --output text --name
my-cluster
--regionregion-code
-
若要擷取您的叢集的
,請執行以下命令。api-server-endpoint
aws eks describe-cluster --query "cluster.endpoint" --output text --name
my-cluster
--regionregion-code
-
--dns-cluster-ip
的值是結尾處為.10
的服務 CIDR。若要擷取您的叢集的
,請執行以下命令。例如,如果傳回的值是service-cidr
ipv4 10.100.0.0/16
,則您的值是
。10.100.0.10
aws eks describe-cluster --query "cluster.kubernetesNetworkConfig.serviceIpv4Cidr" --output text --name
my-cluster
--regionregion-code
-
如需其他引數,請參閱 引導指令碼組態參數。
注意
如果您使用的是自訂服務 CIDR,則需要使用
-ServiceCIDR
參數來對其進行指定。否則,叢集中 Pods 的 DNS 解析將會失敗。
<powershell> [string]$EKSBootstrapScriptFile = "$env:ProgramFiles\Amazon\EKS\Start-EKSBootstrap.ps1" & $EKSBootstrapScriptFile -EKSClusterName
my-cluster
` -Base64ClusterCAcertificate-authority
` -APIServerEndpointapi-server-endpoint
` -DNSClusterIPservice-cidr.10
</powershell>
如需詳細資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的 Amazon Machine Image (AMI)。Amazon EKS AMI 構建規格包含用於基於 Amazon Linux 構建自定義 Amazon EKS AMI 的資源和配置腳本。如需詳細資訊,請參閱 GitHub 上的 Amazon EKS AMI Build Specification
重要
指定 AMI 時,Amazon EKS 不會合併任何使用者資料。相反,您必須負責提供所需的 bootstrap
命令,讓節點加入叢集。如果節點無法加入叢集,則 Amazon EKS CreateNodegroup
和 UpdateNodegroupVersion
動作也會失敗。
指定 AMI ID 時的限制和條件
以下是使用受管節點群組指定 AMI ID 所涉及的限制和條件:
-
您必須建立新的節點群組,才能在指定啟動範本的 AMI ID 與不指定 AMI ID 之間切換。
-
有較新的 AMI 版本可用時,您不會在主控台中收到通知。若要將節點群組更新為較新的 AMI 版本,您需要使用更新的 AMI ID 來建立新版本的啟動範本。然後,您需要使用新的啟動範本版本更新節點群組。
-
如果指定 AMI ID,則無法在 API 中設定下列欄位:
-
amiType
-
releaseVersion
-
version
-
-
如果您指定 AMI ID,則 API 的任何
taints
集合都會以非同步方式套用。若要在節點加入叢集之前套用污點,您必須使用--register-with-taints
命令列旗標將污點傳遞給使用者資料的kubelet
。如需詳細資訊,請參閱 Kubernetes 文件中的kubelet
。 -
為Windows受管節點群組指定自訂 AMI ID 時,請新增
eks:kube-proxy-windows
至 AWS IAM 驗證器組態對應。必須要有這項,DNS 才能正常運作。-
開啟 AWS IAM 驗證器設定對應以進行編輯。
kubectl edit -n kube-system cm aws-auth
-
將此項目新增至與 Windows 節點關聯之每個
rolearn
下的groups
清單中。您的組態映射看起來應類似於aws-auth-cm-windows.yaml
。 - eks:kube-proxy-windows
-
儲存檔案並結束您的文字編輯器。
-