如何将"–kubelet-extra-args"传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?



我遵循从https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html创建EKS托管节点组的示例

配置要求我通过--kubelet-extra-args参数向/etc/eks/bootstrap.sh脚本传递额外的参数。

我的EKS工作节点是通过Terraform资源aws_eks_node_group配置的

我找不到任何选项来配置允许我传递--kubelet-extra-args参数的资源。

我看错地方了吗,还是没有办法做到这一点?

如果您需要传递--kubelet-extra-args,您可以选择将用户数据传递给实例,这些数据可用于执行常见的自动配置任务,甚至在实例启动后运行脚本。

在我看来,您应该有一个tpl(模板)文件,其中包含创建节点时需要运行的脚本。

用户数据。像这样的TPL文件

#!/bin/bash
%{ if length(kubelet_extra_args) > 0 }
export KUBELET_EXTRA_ARGS="${kubelet_extra_args}"
%{ endif }
%{ if length(kubelet_extra_args) > 0 || length (bootstrap_extra_args) > 0 || length (after_cluster_joining_userdata) > 0 }
/etc/eks/bootstrap.sh --apiserver-endpoint '${cluster_endpoint}' --b64-cluster-ca '${certificate_authority_data}' ${bootstrap_extra_args} '${cluster_name}'

前一个userdata。TPL文件是使用templatefile函数调用的,该函数呈现脚本上的所有值。

例如,在另一个文件中,您将有一个名为aws_launch_templateaws_launch_configuration的资源,其中包含如下user_database64encode输入。

最后,应用所有更改,然后创建新节点,它们将使用新配置创建。

这里是完整的EKS节点组实现,以及如何在这里部署它的示例

我希望它对你有用。

--kubelet-extra args需要传递给bootstrap.sh脚本。当ami_type不是"CUSTOM"时,EKS生成bootstrap命令并将其附加在用户数据的末尾,这使得很难在那里进行定制。

可以在用户数据脚本中不使用自定义AMI(但使用启动模板)来完成。(有关user-data脚本的更多详细信息,请参阅此回答)

# We add another variable the we control to pass even more stuff to kubelet
sed -i '/KUBELET_EXTRA_ARGS$/{s|$| \|;a    $KUBELET_CUSTOM_ARGS'$'n''}' /etc/systemd/system/kubelet.service /etc/eks/containerd/kubelet-containerd.service
cat > /etc/systemd/system/kubelet.service.d/40-kubelet-custom-args.conf <<'EOF'
[Service]
Environment='KUBELET_CUSTOM_ARGS=--allowed-unsafe-sysctls "net.core.somaxconn"'
EOF

这将使用单元文件上的另一个变量传递给kubeletKUBELET_CUSTOM_ARGS(因为EKS填充了几个东西,如KUBELET_EXTRA_ARGS中的max-pods,我不想覆盖那些)

您想要传递给kubelet的实际参数可能会有所不同。

我看到在不使用自定义AMI时不要从用户数据调用bootstrap.sh的建议已被删除-它可能会在AWS生成命令之前调用它,因此它也可以工作,我更喜欢让EKS控制参数。

最新更新