aws eks创建节点组的不同方式和逻辑

news2025/1/12 6:45:00

该问题来源于,eks节点组能否修改实例类型,不同创建方式修改节点参数的方式是否有区别。结论如下:

  • eksctl创建托管节点组,无法通过修改启动模板修改节点类型(在eks控制台update会报错),但是可以直接修改asg的实例类型
  • eksctl创建自管节点组,自由度最大,可以通过修改启动模板定制
  • 控制台创建指定ami,需要手动添加userdata,可以修改启动模板并在控制台update,节点更新可以选择滚动更新策略
  • 控制台创建不指定ami,自动添加userdata,可以修改启动模板并在控制台update,节点更新可以选择滚动更新策略

bootstrap.sh 启动脚本

需要在节点启动时执行 bootstrap.sh 加入eks集群,

节点需要通过以下命令获取实例类型

INSTANCE_TYPE=$(imds 'latest/meta-data/instance-type')

之后根据 eni-max-pods.txt 中的记录查找对应实例类型的最大pod数量,写入到kubelet service中

bootstrap启动脚本完成初始化操作后,最终会启动kubelet,通过额外参数--cloud-provider string 指定cloud-provider 为aws

img

–cloud-provider string
The provider for cloud services. Set to empty string for running with no cloud provider. If set, the cloud provider determines the name of the node (consult cloud provider documentation to determine if and how the hostname is used). (DEPRECATED: will be removed in 1.24 or later, in favor of removing cloud provider code from Kubelet.)

如果不构建ami,也可以通过 KUBELET_EXTRA_ARGS 指定kubelet启动的额外参数

Set the “–kubelet-extra-args” flag when invoking bootstrap.sh

bootstrap.sh, the script that bootstraps nodes when using the EKS Optimized AMI, supports a flag called --kubelet-extra-args that allows you to pass in additional kubelet configuration.

/etc/eks/bootstrap.sh my-cluster --kubelet-extra-args '--registry-qps=20 --registry-burst=40'

注意:如果更新kubelet配置文件(bootstrap.sh 执行之后),需要重启kubelet

写入的service文件如下

if [[ -n "$KUBELET_EXTRA_ARGS" ]]; then
  cat << EOF > /etc/systemd/system/kubelet.service.d/30-kubelet-extra-args.conf
[Service]
Environment='KUBELET_EXTRA_ARGS=$KUBELET_EXTRA_ARGS'
EOF
fi

$ cat /etc/systemd/system/kubelet.service
[Service]
ExecStartPre=/sbin/iptables -P FORWARD ACCEPT -w 5
ExecStart=/usr/bin/kubelet --cloud-provider aws \
    --config /etc/kubernetes/kubelet/kubelet-config.json \
    --kubeconfig /var/lib/kubelet/kubeconfig \
    --container-runtime docker \
    --network-plugin cni $KUBELET_ARGS $KUBELET_EXTRA_ARGS

支持的实例类型必然需要从 eni-max-pods.txt 寻找匹配项,因此如果某种实例类型不支持,只能自行创建ami,将max-pods的item添加到 eni-max-pods.txt 中

To add support for new instance types, at a minimum, we need to update files/eni-max-pods.txt using the amazon-vpc-cni-k8s package. to set the number of max pods available for those instance types. If the instance type is not on the list, bootstrap.sh will fail when the node is started.

eksctl创建托管节点组

eksctl创建了启动模板,但是没有直接使用该启动模板,而是将该启动模板作为source,并调用eks api创建新的启动模板和相应的节点组,但是实例类型仍旧是在auto scaling 组中指定的(启动模板中没有指定实例类型,将启动模板中的类型覆盖)。因此只修改auto scaling组会发现,eks console和启动模板中尽管都没有该类型,但是节点仍旧能够启动。

在这里插入图片描述

使用eksctl创建的节点组,额外参数中存在 eks.amazonaws.com/sourceLaunchTemplateId=lt-0b34caeab43941df3

$ cat /etc/systemd/system/kubelet.service.d/30-kubelet-extra-args.conf
[Service]
Environment='KUBELET_EXTRA_ARGS=--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/nodegroup-name=xxxxxxx,alpha.eksctl.io/cluster-name=worklearn,eks.amazonaws.com/nodegroup-image=ami-0b67ce88915e3b7fd,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=testtemp,eks.amazonaws.com/sourceLaunchTemplateId=lt-0b34caeab43941df3 --max-pods=110'

实例的启动模板为如下

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="//"

--//
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
set -ex
B64_CLUSTER_CA=xxxxxxxx
API_SERVER_URL=https://xxxxxxxxxxxx.sk1.cn-north-1.eks.amazonaws.com.cn
K8S_CLUSTER_DNS_IP=10.100.0.10
/etc/eks/bootstrap.sh xxxxxx --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/nodegroup-name=testtemp,alpha.eksctl.io/cluster-name=worklearn,eks.amazonaws.com/nodegroup-image=ami-0b67ce88915e3b7fd,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=testtemp,eks.amazonaws.com/sourceLaunchTemplateId=lt-0b34caeab43941df3 --max-pods=110' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false

--//--

eksctl创建自管节点组

自管节点和托管节点组有所区别,自管节点组创建的资源更多

启动模板中此时已经加入了编码后的userdata,说明该auto scaling组并非调用eks api创建的,而是直接创建auto scaling组并加入集群

H4sIAAAAAAAA/7xYbXPiOnT+nl+hspmbu+0a/ALZJTN0GoPNu8GyJYO3OxlhKbGxLfvaIpBs8987hpANu9yd3k6nX0gsPc/R0dHReY79IUiyDZWCjN9HDxc5CWLywMobwDdJclFseJDSmwsJSKDxSIpGEq0ae0KjDIooF2WDxWUgksYqy0QpCpLXSaLWy/AfUUKW5KyoWNsiEuzuPkpYWa0aZFwwLm7A1feXqwsAsi1nxQ0oskzcVD8XAOREhDegwURwtBtvVixhQmI7UZD6usx4BWNFGpVllPHyBtTk62az9t7+f0kXAADQnVnu7dAy4B1EljucGh2aBTEr6GF2ghzXgHfW7dTobLMiThgp+H7qdj68cwyIDXiH4KQTCpGXN42G2TWbnw1FMb/02r0viqZ8Npo97bNxrbZbavdLr17GSj3gEs8KEUpKncVlnaTkOeNkW9aDLK0HB/v6dfPuuHz3tjNxZDFxlC5EdORGeg/iEXKQP7JlE8H9nCy6sTJy0PSRxFbP9nDoy6bmoJHuy0nXRlB3......

控制台创建托管节点组

注意:托管节点组的更新操作只能修改节点组的大小,无法修改实例类型等参数

指定模板更新,节点组更新中,eks会修改asg参数(min,desired,max)完成滚动更新

使用启动模板并指定ami

如果在启动模板中指定了ami,则需要编写userdata

控制台创建节点组选择多种实例类型,但际上创建的启动模板会选择默认的类型t3.medium

在这里插入图片描述

实例类型实际上是在auto scaling组中指定的

在这里插入图片描述

使用启动模板但不指定ami

在启动模板中不指定ami,会使用默认的ami并自动在userdata中填充内容

/etc/eks/bootstrap.sh xxxxx --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup-image=ami-0b67ce88915e3b7fd,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=xxxxxx --max-pods=110' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false

不指定ami,eks中现实的ami是日期编号

在这里插入图片描述

可以通过滚动更新的方式修改节点类型
在这里插入图片描述

开启pdb可能会影响滚动更新的结果

This option respects pod disruption budgets for your cluster. The update fails if Amazon EKS is unable to gracefully drain the pods that are running on this node group due to a pod disruption budget issue.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络系统管理 - Server02配置

一、Server02系统基础环境配置 二、DISK配置服务器软RAID工作任务 三、DFS membe端配置工作任务 1.Server02系统基础环境配置 (1)请根据附件说明或提供的基础信息,配置服务器的主机名,IP 地址,创建要求的用户名及密码;

docker镜像、容器 常用命令,容器端口映射

文章目录前言一、docker基础命令二、docker镜像命令1、docker images&#xff1a;列出本地主机的镜像2、 docker search &#xff1a;查看镜像3、docker pull&#xff1a;拉取镜像4、docker rmi &#xff1a; 删除docker镜像三、docker容器命令1、环境准备2、运行容器3、启动、…

Python常见工厂函数用法

工厂函数&#xff1a;能够产生类实例的内建函数。 工厂函数是指这些内建函数都是类对象&#xff0c; 当调用它们时&#xff0c;实际上是创建了一个类实例。 Python中的工厂函数举例如下&#xff1a; int(),long(),float(),complex(),bool()aint(9.9) a 9 blong(45) b 45L ff…

JavaScript 虚拟键盘:Mindfusion JavaScript Keyboard

高度交互&#xff0c;高度可定制--JavaScript 虚拟键盘--Mindfusion JavaScript Keyboard 现在&#xff0c;您的 JavaScript 应用程序可以像本地移动应用程序一样处理屏幕输入。 特征 键盘布局 扩展、紧凑和标准布局模式。KeyboardLayout 工具可帮助您根据需要创建和排列自定义…

【Hack The Box】linux练习-- Traverxec

HTB 学习笔记 【Hack The Box】linux练习-- Traverxec &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月21日&#x1f334; &#x…

Spark学习(5)-Spark Core之RDD

1 RDD详解 1.1 为什么需要RDD 分布式计算需要: 分区控制Shuffle控制数据存储\序列化\发送数据计算API等一系列功能 这些功能, 不能简单的通过Python内置的本地集合对象(如 List\ 字典等)去完成。我们在分布式框架中, 需要有一个统一的数据抽象对象, 来实现上述分布式计算所需…

JavaScript面向对象:类的继承

继承 现实中的继承&#xff1a;子承父业&#xff0c;比如我们都继承了父亲的姓。 程序中的继承&#xff1a;子类可以继承父类的一些属性和方法。 语法&#xff1a; class Father{ // 父类 } class Son extends Father { // 子类继承父类 } 实例&#xff1a; cla…

手把手教你开通小程序流量主

手把手教你开通小程序流量主 开通条件是累计独立访客不低于 1000。也就是1000级以上&#xff0c;其实这个不难。 接下来以防火安全知识专项学习与竞答为例&#xff0c;写一篇开通流量主、创建广告和代码嵌入的图文教程。 功能介绍 广告展示位置灵活控制&#xff0c;接入简单…

操作系统复习【面试】

操作系统复习【面试】前言推荐操作系统复习第一章 操作系统引论 11.3 操作系统的基本特性 141.3.1 并发1.3.2 共享1.3.3 虚拟1.3.4 异步1.4 操作系统的主要功能 171.4.1 处理机管理功能1.4.2 存储器管理功能1.4.3 设备管理功能1.4.4 文件管理功能1.4.5 操作系统和用户之间的接口…

目标管理利器OKR-给被各大APP抢占使用时长的你

今天聊聊好用的时间和目标管理利器OKR&#xff0c;给被各大APP抢占使用时长的你。 1、海龟的秘密 一个游泳健将&#xff0c;他发现自己竟然游不过一只海龟&#xff0c;这让他疲惫不堪&#xff0c;又失望&#xff0c;又难堪。 然后他又去不断观察&#xff0c;终于发现了海龟游…

数据结构之队列

文章目录前言一、队列二、队列应该如何实现顺序表or链表扩展了解三、队列的实现1.队列的声明2.接口&#xff08;声明&#xff09;3.接口的实现创建一个新的节点判断队列为空队头元素入队出队销毁队列注意&#xff1a;4.主函数&#xff08;测试&#xff09;四、相关习题总结前言…

【C++基础】友元

友元 定义&#xff1a;类的特点是私有成员无法在作用域外访问&#xff0c;而友元函数是特权函数&#xff0c;允许访问私有成员。 语法&#xff1a;在函数或类前加friend。 例子&#xff1a;在message中&#xff0c;published每个人都可访问&#xff0c;secret只有自己可以访问…

开放经济中的货币-中国视角下的宏观经济

开放经济中的货币 – 潘登同学的宏观经济学笔记 文章目录开放经济中的货币 -- 潘登同学的宏观经济学笔记汇率&#xff1a;复习外汇冲销下的可能三角中国的811汇改国际货币体系的现在与未来当前国际货币体系存在三个主要问题体系具有内生不稳定性美元的中心地位带来了不平等非对…

[附源码]java毕业设计校园博客系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

树莓派快速上手-远程调试图形界面

0 简述 前面的文章里介绍过通过ssh在局域网或者远程访问树莓派&#xff0c;一般而言&#xff0c;对于非图形界面的开发仅通过ssh命令行交互就能够完成的&#xff0c;但是要开发图形界面展示或交互的应用时&#xff0c;光命令行交互的方式就远远不够了。这篇文章将针对树莓派这…

Conformer测试问题

https://github.com/pengzhiliang/Conformer 抽空测试了conformer&#xff0c;训练起来很简单&#xff0c;但是会遇到一个问题&#xff1a; Loss is nan, stopping training 我用的默认配置&#xff0c;不知道为什么会有这个问题&#xff0c;知道的来探讨下。 1.数据准备 我…

华为机试 - 最长连续子序列

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 有N个正整数组成的一个序列。给定整数sum&#xff0c;求长度最长的连续子序列&#xff0c;使他们的和等于sum&#xff0c;返回此子序列的长度&#xff0c; 如果没有满足要求的序列&#xff0c;返回-1…

【Hack The Box】Linux练习-- Mirai

HTB 学习笔记 【Hack The Box】Linux练习-- Mirai &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

元宇宙技术在几年后质变,迎来体验终端世界

京东集团高级副总裁、京东探索研究院院长陶大程京东集团高级副总裁、京东探索研究院院长陶大程是京东“产业元宇宙”的提出者和构建者。他谈到&#xff0c;希望通过构建元宇宙供应链降低实体经济参与数字经济的门槛&#xff0c;帮助实体经济完成数实融合的商业转型&#xff0c;…

设计模式复习题

1.选择题 1&#xff0e;在观察者模式中&#xff0c;表述错误的是(C )C.观察者可以改变被观察者的状态&#xff0c;再由被观察者通知所有观察者依据被观察者的状态进行。 2&#xff0e;对于违反里式代换原则的两个类&#xff0c;可以采用的候选解决方案错误的是: ( D )D.以上方…