如何将“–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_template
或 aws_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 函数