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

Posted

技术标签:

【中文标题】如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?【英文标题】:How to pass "–kubelet-extra-args" to AWS EKS node group created by Terraform aws_eks_node_group? 【发布时间】:2021-10-23 22:01:25 【问题描述】:

我正在按照从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 参数。

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

【问题讨论】:

您是否尝试过通过将user_data 传递到 EKS 节点组的 ASG 启动模板中链接到的文档中的方法? aws_eks_node_group 资源有一个 launch_template 块,可以定位您的自定义 launch_template 资源:registry.terraform.io/providers/hashicorp/aws/latest/docs/…。 【参考方案1】:

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

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

userdata.tpl 文件如this

#!/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_data base64encode 输入,例如 this。

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

完整的 EKS 节点组实现here 以及如何部署它的示例here

希望对你有用。

【讨论】:

好吧,我曾希望避免设置单独的启动模板,但看起来这是唯一的方法。 嘿@ChristianSeifert,是的,我认为这是唯一的方法,但不是一个糟糕的解决方案,我希望它对你和你的团队有用,如果我能澄清任何疑问,请告诉我跨度>

以上是关于如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 POST 参数传递给 Durable Function,然后将此参数传递给 Timer Triggered 函数

如何将参数传递给进程

如何通过反射将参数传递给方法

如何将库类或对象传递给片段?

如何将参数传递给快速完成的函数

如何将参数传递给由 fork() 创建的进程