如何解决 Amazon EKS 托管节点组和启动模板的问题?
我在使用 Amazon Elastic Kubernetes Service (Amazon EKS) 托管节点组和启动模板时遇到了问题。
解决方法
如果您使用带有指定亚马逊机器映像 (AMI) 的托管节点组启动模板来启动您的 Worker 节点,则必须配置用户数据。如果您的集群是私有集群,且使用虚拟私有云 (VPC) 端点进行连接,请在用户数据中指定以下属性:
- certificate-authority
- api-server-endpoint
- DNS 集群 IP 地址
您还必须提供引导命令,以便 Worker 节点加入您的集群。如果您使用带有自定义启动模板的 Amazon 托管节点组,请在启动模板中根据您的 AMI 指定正确的用户数据。
**注意:**如果您使用托管节点组启动 Worker 节点,则无需为经 Amazon EKS 优化的 Amazon Linux AMI 配置用户数据。
为您的 Worker 节点配置用户数据
根据您的 AMI 配置用户数据。
AL2
如果您使用 Amazon Linux 2 AMI,请在启动模板的用户数据部分中指定以下信息:
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash set -ex /etc/eks/bootstrap.sh my-cluster \ --b64-cluster-ca certificate-authority \ --apiserver-endpoint api-server-endpoint \ --dns-cluster-ip service-cidr.10 \ --kubelet-extra-args '--max-pods=my-max-pods-value' \ --use-max-pods false --==MYBOUNDARY==-
AL2023
您可以将自行管理的节点或托管节点组与自定义启动模板配合使用。创建新节点组时,必须提供 apiServerEndpoint、certificateAuthority 和服务 CIDR 集群元数据。Amazon Linux 会使用这些额外的值来引导 Worker 节点并使其加入集群。
配置示例:
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="//" --// Content-Type: application/node.eks.aws --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: apiServerEndpoint: https://CCEABD8D413231403775F7AA9E56D037.gr7.us-west-2.eks.amazonaws.com certificateAuthority: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJYUxrK2N0M0Zmdll3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBNE1qTXlNREk0TlRaYUZ3MHpOREE0TWpFeU1ETXpOVFphTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUURTRWF1c25hS1A5azJYOEd1QkEzQ1czQkZjQ3owSk1EUjRrVDhxUERhOHA4OFY5bkNDcUkvMnlaa2sKSHdIc0hpRDR2OWtoc2hCN1h5OFZaeW56NG8vYkhEZUc5MTZCZ0xzN05Ld1E2Sjd4b0dKc3JyVGtwdUJ3dWpTMgpkbGtLSG0yNTRUelNiQ2VWUkFGbVJGVmljUUh5aEpTSElBN0tUT1dHeUhvUEZJd3l4NS8xZkpmdEIxM0Y3MlBBCm9DaFZBNHdEOVFEZ1NxR0xOMTVMNEN2REFVdFVXaXBtRTZQdWRBNTBxMzNCSzRpRzc4Q0lFbDNXSHl6L3dzOEcKek5hQ2N5ZnlINjRFSHpsVkRkZmFHMWh0ODhKZ01pKy82Vm1vbmthdlJhQzVHZlhsdk5MKzFtVnJycWhTT3hBRQpJS1N2aW9rZndjODA5bzJWaUtiSmhkUE5yQTRKQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSR3JPdzVaSmJ4ZmI2dTF1ek4wNFJtSkFCU1ZUQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQTFkTnE2aHhXSgp6OU4zM09XamU2cG5LU3pmbGdCaG5PRXRhSUlKa21kUWpUN0FDdlMwMDJyRjFnQUFneTVRR2pjM29mN3hzRzJoCkczemhuUGFTTXFLampsOWRnZGJsZTVEZmIwTjZGVlZXeGE3SFBxZ0NCeXZ1ZXdXOTYwcmxLZ1luMDJBVm16c3kKVW8rRXgwQVA4Q3lVUzQ5Z0RaSFN3MVZGbE1mbFkwb2thSERabG9lR256WDk1REc0Zzk4ZHR1Vkd1Sm1lZ1lpRApKUmN3T2xubUlDUHNsUXcrbGh2S0NFT0RvM0hBWWdwTGxkSFBvYTJCZlBwbk9IMWtMNlFFMURTZU8wQUhmNjBYCk1mTzVTNUwwQVFidk1aM005c2JJdDlhby9YbWk3NnJHMThtMzMrdy9LWkV5cVg1NHZ6UTlZUHBjSGV6bk5oY2oKUy9XajhNZk9KMk9SCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K cidr: 10.100.0.0/16 name: my-first-eks-cluster kubelet: config: maxPods: 29 clusterDNS: - 10.100.0.10 flags: - "--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=my-first-eks-cluster,alpha.eksctl.io/nodegroup-name=ng-1,eks.amazonaws.com/nodegroup-image=ami-032a2a7895e882f27,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=ng-1,eks.amazonaws.com/sourceLaunchTemplateId=lt-0d8806dd42301728f" --//--
nodeadm 节点初始化过程采用 YAML 配置架构。有关详细信息,请参阅 Amazon EKS AMI 网站上的 nodeadm 和 Merging multiple configuration objects(合并多个配置对象)。
如果您在托管节点组的启动模板中使用多个节点配置,请参阅使用启动模板自定义托管式节点。
对 Amazon EKS 集群中的错误进行故障排除
Client.InternalError: Client error on launch
在自定义启动模板中使用加密的 Amazon Elastic Block Store (Amazon EBS) 卷时,如果权限不正确,将会出现 Client error on launch 错误。要检查加密状态和 AWS Identity and Access Management (IAM) 权限或策略,请完成以下步骤:
- 激活 AWS KMS 用于加密卷的 AWS Key Management Service (AWS KMS) 密钥。
- 确保 AWS KMS 密钥具有所需的密钥策略。
- 修改密钥策略,以允许更多 IAM 角色使用加密的 Amazon EBS 卷。
SourceEc2LaunchTemplateNotFound or The Amazon EC2 Launch Template lt-abcdefghijklmn version x was not found
当您通过节点的 Amazon EC2 Auto Scaling 组手动更改自定义启动模板版本时,将会出现 SourceEc2LaunchTemplateNotFound 错误。您必须使用 Amazon EKS 控制台更新启动模板版本。
要从托管节点组更新您的 Amazon Elastic Compute Cloud (Amazon EC2) 启动模板,请完成以下步骤:
- 打开 Amazon EKS 控制台。
- 在导航窗格中,选择 Clusters(集群)。
- 在 Cluster name(集群名称)下,选择包含要更新的节点组的集群。
- 选择 Compute(计算)选项卡。
- 对于 Node groups(节点组),选择您的节点,然后选择 Change version(更改版本)。
- 选择更新后的节点组版本。此外,请确保 Update strategy(更新策略)为 Rolling update(滚动更新)。
- 选择 Update(更新)。
当您使用启动模板创建节点组并删除引用模板时,也会出现此错误。Amazon EKS 会复制您用于创建节点组的模板。如果删除原始模板,则必须重新创建节点组。
要重新创建节点组,请完成以下步骤:
-
运行以下命令,验证所有节点是否运行正常、是否处于 Ready(就绪)状态,以及是否已加入集群:
kubectl get nodes
节点组会在创建完新的启动模板后进入 DEGRADED 状态
如果节点组进入 DEGRADED 状态,您将会收到一条类似于以下示例的消息:
"The Amazon EC2 Launch Template : lt-abcdefghijklmn has a new version associated with your Autoscaling group, which is not managed by Amazon EKS. Expected Launch Template version: x"。
当托管节点组的 Amazon EC2 启动模板版本与 Amazon EKS 创建的版本不匹配时,将会出现此错误。
无法直接更新未使用自定义启动模板的现有节点组。要解决此问题,请使用您的自定义设置创建启动模板和版本。然后,使用启动模板创建节点组。如果您从自定义模板启动了新节点组,请创建该模板的新版本。
实例无法加入 Amazon EKS 集群
要解决此问题,请参阅如何让我的 Worker 节点加入我的 Amazon EKS 集群?
- 语言
- 中文 (简体)
