協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 Amazon EKS 的節點類別
Amazon EKS 節點類別是範本,可讓您精細控制 EKS Auto Mode 受管節點的組態。節點類別定義適用於 EKS 叢集中節點群組的基礎設施層級設定,包括網路組態、儲存設定和資源標記。本主題說明如何建立和設定節點類別,以符合您的特定操作需求。
當您需要自訂 EKS Auto Mode 在預設設定之外佈建和設定 EC2 執行個體的方式時,建立節點類別可讓您精確控制關鍵基礎設施參數。例如,您可以為增強安全性指定私有子網路置放、為效能敏感工作負載設定執行個體暫時性儲存,或為成本分配套用自訂標記。
建立節點類別
若要建立 NodeClass
,請遵循下列步驟:
-
使用節點類別組態建立 YAML 檔案 (例如
nodeclass.yaml
) -
使用 將組態套用至您的叢集
kubectl
-
參考節點集區組態中的節點類別。如需詳細資訊,請參閱為 EKS 自動模式建立節點集區。
您需要kubectl
安裝並設定 。如需詳細資訊,請參閱設定 以使用 Amazon EKS。
基本節點類別範例
以下是節點類別範例:
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: private-compute spec: subnetSelectorTerms: - tags: Name: "private-subnet" kubernetes.io/role/internal-elb: "1" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" ephemeralStorage: size: "160Gi"
此 NodeClass 會增加節點上的暫時性儲存量。
使用下列方式套用此組態:
kubectl apply -f nodeclass.yaml
接著,在您的節點集區組態中參考節點類別。如需詳細資訊,請參閱為 EKS 自動模式建立節點集區。
建立節點類別存取項目
如果您建立自訂節點類別,則需要建立 EKS 存取項目,以允許節點加入叢集。當您使用內建節點類別和節點集區時,EKS 會自動建立存取項目。
如需有關存取項目如何運作的詳細資訊,請參閱 使用 EKS 存取項目授予 IAM 使用者對 Kubernetes 的存取權。
建立 EKS Auto Mode 節點類別的存取項目時,您需要使用EC2
存取項目類型。
使用 CLI 建立存取項目
若要建立 EC2 節點的存取項目並關聯 EKS Auto Node 政策:
使用叢集名稱和節點角色 ARN 更新下列 CLI 命令。節點角色 ARN 是在節點類別 YAML 中指定。
# Create the access entry for EC2 nodes aws eks create-access-entry \ --cluster-name <cluster-name> \ --principal-arn <node-role-arn> \ --type EC2 # Associate the auto node policy aws eks associate-access-policy \ --cluster-name <cluster-name> \ --principal-arn <node-role-arn> \ --policy-arn arn:aws: eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy \ --access-scope type=cluster
使用 CloudFormation 建立存取項目
若要建立 EC2 節點的存取項目並關聯 EKS Auto Node 政策:
使用叢集名稱和節點角色 ARN 更新下列 CloudFormation。節點角色 ARN 是在節點類別 YAML 中指定。
EKSAutoNodeRoleAccessEntry: Type: AWS::EKS::AccessEntry Properties: ClusterName: <cluster-name> PrincipalArn: <node-role-arn> Type: "EC2" AccessPolicies: - AccessScope: Type: cluster PolicyArn: arn:aws: eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy DependsOn: [ <cluster-name> ] # previously defined in CloudFormation
如需有關部署 CloudFormation 堆疊的資訊,請參閱 CloudFormation 入門
節點類別規格
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: my-node-class spec: # Required fields role: MyNodeRole # IAM role for EC2 instances subnetSelectorTerms: - tags: Name: "private-subnet" kubernetes.io/role/internal-elb: "1" # Alternative using direct subnet ID # - id: "subnet-0123456789abcdef0" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" # Alternative approaches: # - id: "sg-0123456789abcdef0" # - name: "eks-cluster-security-group" # Optional: Pod subnet selector for advanced networking podSubnetSelectorTerms: - tags: Name: "pod-subnet" kubernetes.io/role/pod: "1" # Alternative using direct subnet ID # - id: "subnet-0987654321fedcba0" # must include Pod security group selector also podSecurityGroupSelectorTerms: - tags: Name: "eks-pod-sg" # Alternative using direct security group ID # - id: "sg-0123456789abcdef0" # Optional: Selects on-demand capacity reservations and capacity blocks # for EKS Auto Mode to prioritize. capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03 # Alternative Approaches - tags: Name: "targeted-odcr" # Optional owning account ID filter owner: "012345678901" # Optional fields snatPolicy: Random # or Disabled networkPolicy: DefaultAllow # or DefaultDeny networkPolicyEventLogs: Disabled # or Enabled ephemeralStorage: size: "80Gi" # Range: 1-59000Gi or 1-64000G or 1-58Ti or 1-64T iops: 3000 # Range: 3000-16000 throughput: 125 # Range: 125-1000 # Optional KMS key for encryption kmsKeyID: "arn:aws: kms:region:account:key/key-id" # Accepted formats: # KMS Key ID # KMS Key ARN # Key Alias Name # Key Alias ARN advancedNetworking: # Optional: Controls whether public IP addresses are assigned to instances that are launched with the nodeclass. # If not set, defaults to the MapPublicIpOnLaunch setting on the subnet. associatePublicIPAddress: false # Optional: Forward proxy, commonly requires certificateBundles as well # for EC2, see https://repost.aws/knowledge-center/eks-http-proxy-containerd-automation httpsProxy: http://192.0.2.4:3128 #commonly port 3128 (Squid) or 8080 (NGINX) #Max 255 characters #httpsProxy: http://[2001:db8::4]:3128 # IPv6 address with port, use [] noProxy: #Max 50 entries - localhost #Max 255 characters each - 127.0.0.1 #- ::1 # IPv6 localhost #- 0:0:0:0:0:0:0:1 # IPv6 localhost - 169.254.169.254 # EC2 Instance Metadata Service #- [fd00:ec2::254] # IPv6 EC2 Instance Metadata Service # Domains to exclude, put all VPC endpoints here - .internal - .eks.amazonaws.com # Optional: Custom certificate bundles. certificateBundles: - name: "custom-cert" data: "base64-encoded-cert-data" # Optional: Additional EC2 tags (with restrictions) tags: Environment: "production" Team: "platform" # Note: Cannot use restricted tags like: # - kubernetes.io/cluster/* # - karpenter.sh/provisioner-name # - karpenter.sh/nodepool # - karpenter.sh/nodeclaim # - karpenter.sh/managed-by # - eks.amazonaws.com/nodeclass
考量事項
-
如果您想要驗證執行個體有多少本機儲存體,您可以描述節點以查看暫時性儲存資源。
-
磁碟區加密 - EKS 使用設定的自訂 KMS 金鑰來加密執行個體的唯讀根磁碟區和讀取/寫入資料磁碟區。
-
取代節點 IAM 角色 - 如果您變更與 相關聯的節點 IAM 角色
NodeClass
,您將需要建立新的存取項目。在叢集建立期間,EKS 會自動為節點 IAM 角色建立存取項目。節點 IAM 角色需要AmazonEKSAutoNodePolicy
EKS 存取政策。如需詳細資訊,請參閱使用 EKS 存取項目授予 IAM 使用者對 Kubernetes 的存取權。 -
最大 Pod 密度 - EKS 會將節點上的 Pod 數量上限限制為 110。此限制會在現有最大 Pod 計算之後套用。如需詳細資訊,請參閱選擇最佳的 Amazon EC2 節點執行個體類型。
-
標籤 - 如果您想要將標籤從 Kubernetes 傳播到 EC2,則需要設定其他 IAM 許可。如需詳細資訊,請參閱了解 EKS Auto Mode 中的身分和存取。
-
預設節點類別 - 請勿將自訂節點類別命名為
default
。這是因為 EKS Auto Mode 包含NodeClass
稱為 的default
,會在您啟用至少一個內建 時自動佈建NodePool
。如需啟用內建 的詳細資訊NodePools
,請參閱 啟用或停用內建 NodePools。 -
subnetSelectorTerms
具有多個子網路的行為 - 如果有多個子網路符合subnetSelectorTerms
條件或您透過 ID 提供的子網路,EKS Auto Mode 會建立分佈於子網路的節點。-
如果子網路位於不同的可用區域 (AZs),您可以使用 Kubernetes 功能,例如 Pod 拓撲分散限制
條件和拓撲感知路由, 分別將 Pod 和流量分散到各個區域。 -
如果相同 AZ 中有多個子網路符合
subnetSelectorTerms
,EKS Auto Mode 會在分佈在該 AZ 中子網路的每個節點上建立 Pod。EKS Auto Mode 會在相同 AZ 中其他子網路中的每個節點上建立次要網路介面。它會根據每個子網路中的可用 IP 地址數量進行選擇,以更有效率地使用子網路。不過,您無法指定 EKS Auto Mode 為每個 Pod 使用的子網路;如果您需要 Pod 在特定子網路中執行,請Pod 的子網路選擇改用 。
-
Pod 的子網路選擇
podSubnetSelectorTerms
和 podSecurityGroupSelectorTerms
欄位允許 Pod 在與其節點不同的子網路中執行,以啟用進階聯網組態。此區隔可增強對網路流量路由和安全政策的控制。請注意, podSecurityGroupSelectorTerms
是 的必要項目podSubnetSelectorTerms
。
使用案例
當您需要以下項目podSubnetSelectorTerms
時使用:
-
將基礎設施流量 node-to-node通訊) 與應用程式流量 (Pod-to-Pod通訊) 分開
-
將不同的網路組態套用至 Pod 子網路以外的節點子網路。
-
為節點和 Pod 實作不同的安全政策或路由規則。
-
針對節點流量設定反向代理或網路篩選,而不會影響 Pod 流量。使用
advancedNetworking
和certificateBundles
來定義反向代理,以及代理的任何自我簽署或私有憑證。
範例組態
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: advanced-networking spec: role: MyNodeRole # Subnets for EC2 instances (nodes) subnetSelectorTerms: - tags: Name: "node-subnet" kubernetes.io/role/internal-elb: "1" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" # Separate subnets for Pods podSubnetSelectorTerms: - tags: Name: "pod-subnet" kubernetes.io/role/pod: "1" podSecurityGroupSelectorTerms: - tags: Name: "eks-pod-sg"
Pod 子網路選擇器的考量事項
-
降低 Pod 密度:使用 時,每個節點可以執行較少的 Pod
podSubnetSelectorTerms
,因為節點的主要網路介面位於節點子網路中,且無法用於 Pod 子網路中的 Pod。 -
子網路選擇器限制:標準
subnetSelectorTerms
和securityGroupSelectorTerms
組態不適用於 Pod 子網路選擇。 -
網路規劃:確保節點和 Pod 子網路有足夠的 IP 地址空間來支援工作負載需求。
-
路由組態:確認已正確設定 Pod 子網路的路由表和網路存取控制清單 (ACL),以便在節點和 Pod 子網路之間進行通訊。
-
可用區域:確認您已建立跨多個 AZs Pod 子網路。如果您使用的是特定的 Pod 子網路,它必須與節點子網路 AZ 位於相同的 AZ 中。