跳至内容

如何解决 Amazon EKS 托管节点组和启动模板的问题?

2 分钟阅读
0

我在使用 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 网站上的 nodeadmMerging 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) 权限或策略,请完成以下步骤:

  1. 激活 AWS KMS 用于加密卷的 AWS Key Management Service (AWS KMS) 密钥
  2. 确保 AWS KMS 密钥具有所需的密钥策略
  3. 修改密钥策略,以允许更多 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) 启动模板,请完成以下步骤:

  1. 打开 Amazon EKS 控制台
  2. 在导航窗格中,选择 Clusters(集群)。
  3. Cluster name(集群名称)下,选择包含要更新的节点组的集群。
  4. 选择 Compute(计算)选项卡。
  5. 对于 Node groups(节点组),选择您的节点,然后选择 Change version(更改版本)。
  6. 选择更新后的节点组版本。此外,请确保 Update strategy(更新策略)为 Rolling update(滚动更新)。
  7. 选择 Update(更新)。

当您使用启动模板创建节点组并删除引用模板时,也会出现此错误。Amazon EKS 会复制您用于创建节点组的模板。如果删除原始模板,则必须重新创建节点组。

要重新创建节点组,请完成以下步骤:

  1. 启动新的节点组

  2. 运行以下命令,验证所有节点是否运行正常、是否处于 Ready(就绪)状态,以及是否已加入集群:

    kubectl get nodes
  3. 耗尽 Worker 节点

  4. 删除原始节点组

节点组会在创建完新的启动模板后进入 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 集群?

AWS 官方已更新 1 年前