我在 Amazon Elastic Kubernetes Service (Amazon EKS) 的 Amazon Linux 2023 (AL2023) 亚马逊机器映像 (AMI) 中使用自定义脚本、自管理节点或自定义启动模板。我想提供自定义用户数据。
简短描述
AL2023 使用采用 YAML 配置架构的 nodeadm 节点初始化流程。对于自管理节点组或具有自定义启动模板的托管节点组,在创建新节点组时必须提供额外的集群元数据。必须在 YAML 配置架构中包含的最低元数据要求是集群名称、API 服务器端点、证书颁发机构和服务 CIDR。
具有所需最低参数的配置示例:
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: EKS-CLUSTER-NAME
apiServerEndpoint: API-SERVER-ENDPOINT
certificateAuthority: CERTIFICATE-AUTHORITY
cidr: SERVICE-IPv4-RANGE
有关详细信息,请参阅 Amazon EKS-optimized Amazon Linux 2023 AMIs now available 中的升级到 AL2023 之前部分。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
您必须使用在 AL2023 上运行的 Amazon EKS AMI。要查看 AMI ID,请运行以下 get-parameter AWS CLI 命令:
aws ssm get-parameter --name /aws/service/eks/optimized-ami/kubernetes-version/ami-type/recommended/image_id \
--region region-code --query "Parameter.Value" --output text
**注意:**将 kubernetes-version 替换为支持的 Amazon EKS 版本,将 region-code 替换为您的AWS 区域。此外,对于基于 x86 的实例,将 ami-type 替换为 amazon-linux-2023/x86_64/standard;对于 ARM 实例,替换为 amazon-linux-2023/arm64/standard。
按以下格式向用户数据添加所需的最低参数:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="BOUNDARY"
--BOUNDARY
Content-Type: application/node.eks.aws
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec: ...
--BOUNDARY--
**注意:**您也可以将参数嵌入到 Mime 多部分文档中。有关详细信息,请参阅 Cloud-init 网站上的 Mime 多部分存档。
使用 DescribeCluster API 查找 ClusterDetails 并查看所需的最低参数。例如,当使用 NodeConfigSpec 时,您可以将 config 和标志 kubelet 选项传递给 kubelet。有关详细信息,请参阅 Kubernetes 网站上的 CredentialProviderConfig 和 kubelet。
用户数据配置示例:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="BOUNDARY"
--BOUNDARY
Content-Type: application/node.eks.aws
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
apiServerEndpoint: API_SERVER_ENDPOINT
certificateAuthority: CERTIFICATE
cidr: SERVICE_IPv4_RANGE
name: CLUSTER_NAME
kubelet:
config:
maxPods: 17
flags:
- "--node-labels=key=value"
--BOUNDARY
Content-Type: text/x-shellscript;
#!/bin/bash
set -o xtrace
yum install htop -y
--BOUNDARY--
**注意:**在启动模板中输入用户数据时,请确保代码中不包含多余的空格或缩进。当存在空格问题时,节点无法加入集群,因为 nodeadm 无法启动。