EKS集群的弹性扩缩容CA的配置实战 ·『云原生品鉴与布道』·

这篇具有很好参考价值的文章主要介绍了EKS集群的弹性扩缩容CA的配置实战 ·『云原生品鉴与布道』·。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

弹性伸缩主要有三个维度:

HPA,根据利用率,自动伸缩 Pod 数量

VPA,根据历史数据,自动设置 Pod 的 Request、Limit

CA,根据使用率,自动伸缩 Node 数量

EKS集群的弹性扩缩容是一项功能(这里指node的),可以自动上下伸缩您的资源以满足不断变化的需求。若没有此项重要的 Kubernetes 功能,则需要耗费大量的人力资源来手动执行这些工作。

Amazon EKS 支持两款弹性缩放产品:Kubernetes ​​Cluster Autoscaler​​​ 和 ​​Karpenter​​​ 开源自动缩放项目。Cluster Autoscaler 使用 AWS 缩放组,而 Karpenter 则直接使用 Amazon EC2 Fleet。(参考 ​​​https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/autoscaling.html​​)

EKS Cluster Autoscaler的配置实战

信息:

EKS集群名称:pre-production          

地域: ap-southeast-1    亚太地区 (新加坡)

登录ID: 75xxxxxxx533

1、前置条件:一个AutoScaling Group     [Cluster Autoscaler=CA 和 Auto Scaling组 是2个不同的概念,CA控制AS实现弹性伸缩。] 

2、创建向 IAM 角色授予 Cluster Autoscaler 所需权限的 IAM 策略,使得 Cluster Autoscaler 能够具备操作 AWS AutoScaling 的权限。

  • 首先在群集上为服务帐户启用IAM角色
eksctl utils associate-iam-oidc-provider \
    --cluster pre-production \
    --approve --region ap-southeast-1
  • 编辑文件IAM权限描述文件
cat <<EoF > /home/ec2-user/k8s-asg-policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:DescribeAutoScalingInstances",
                "autoscaling:DescribeLaunchConfigurations",
                "autoscaling:DescribeTags",
                "autoscaling:SetDesiredCapacity",
                "autoscaling:TerminateInstanceInAutoScalingGroup",
                "ec2:DescribeLaunchTemplateVersions"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
EoF
  • ​通过AWS CLI命令创建IAM权限​
aws iam create-policy   \
  --policy-name k8s-asg-policy \
  --policy-document file:///bsn/k8s/Cluster-Autoscaler/k8s-asg-policy.json --region ap-southeast-1

3、使用 eksctl 创建 Service Account 以及 IAM 角色,并将上一步创建的 IAM 策略附加到该角色 如果您自定义了集群名称,请将–cluster xxxx 替换为您的集群名称(若您没有使用默认配置) 请将 iam::xxxxxxxxxxxx:替换为您的账户ID(在您的aws控制台点击右上角可查看),例如263168716248(必须替换)

eksctl create iamserviceaccount \
    --name cluster-autoscaler \
    --namespace kube-system \
    --cluster pre-production \
    --attach-policy-arn "arn:aws:iam::75xxxxxx533:policy/k8s-asg-policy" \
    --approve \
    --override-existing-serviceaccounts --region ap-southeast-1

特别注意:中国地域的arn格式会多一个-cn,宁夏为例:arn:aws-cn:iam::984xxxx4388:

此过程需要花一点时间,eksctl 会通过 CloudFormation 创建相关的权限资源

通过以下describe命令进行验证

kubectl -n kube-system describe sa cluster-autoscaler

4、部署 Cluster Autoscaler,请直接复制执行下面命令

kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

输出

serviceaccount/cluster-autoscaler created
clusterrole.rbac.authorization.k8s.io/cluster-autoscaler created
role.rbac.authorization.k8s.io/cluster-autoscaler created
clusterrolebinding.rbac.authorization.k8s.io/cluster-autoscaler created
rolebinding.rbac.authorization.k8s.io/cluster-autoscaler created
deployment.apps/cluster-autoscaler created

5,执行以下命令将cluster-autoscaler.kubernetes.io/safe-to-evict批注添加到部署中。

为了防止 CA 删除运行它自己的 pod 的节点, 添加注释cluster-autoscaler.kubernetes.io/safe-to-evict

kubectl -n kube-system \
    annotate deployment.apps/cluster-autoscaler \
    cluster-autoscaler.kubernetes.io/safe-to-evict="false"

6,通过kubectl edit编辑 Cluster Autoscaler 部署 (Deployment) 在 “spec: container: - command” 部分,将 (包括 <>)替换为当前 EKS 集群的名称(默认为odoo),并添加 “–balance-similar-node-groups"以及”–skip-nodes-with-system-pods=false"选项 示范如下: 执行命令,翻到后半段

修改部分如下所示(下面3行)

spec:
      containers:
      - command:
        - ./cluster-autoscaler
        - --v=4
        - --stderrthreshold=info
        - --cloud-provider=aws
        - --skip-nodes-with-local-storage=false
        - --expander=least-waste
        - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/pre-production
        - --balance-similar-node-groups
        - --skip-nodes-with-system-pods=false

完成修改后通过 esc键 输入 :wq 回车 保存并退出。

7,修改 Cluster Autoscaler 的 image 配置,复制执行以下命令

kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=k8s.gcr.io/autoscaling/cluster-autoscaler:v1.20.0

这个版本貌似可以用这2个命令确定,供参考

export K8S_VERSION=$(kubectl version --short | grep 'Server Version:' | sed 's/[^0-9.]*\([0-9.]*\).*/\1/' | cut -d. -f1,2)
export AUTOSCALER_VERSION=$(curl -s "https://api.github.com/repos/kubernetes/autoscaler/releases" | grep '"tag_name":' | sed -s 's/.*-\([0-9][0-9\.]*\).*/\1/' | grep -m1 ${K8S_VERSION})

8,查看 Cluster Autoscaler 日志,确认部署成功,复制执行以下命令

kubectl -n kube-system logs -f deployment.apps/cluster-autoscaler

9,您也可以通过命令autoscaling命令查看当前您的两个弹性扩展组状态。正常情况下,您现在拥有两个工作负载组,一个是onDemand的集群,最大节点数是1,一个是Spot的集群,最大值是4。当大规模负载发生时,会在Spot的集群进行扩容。平时的正常运行状态是1台Stop加2台onDemand

请将Value=='xxxx'的odoo替换为您的集群名称(默认为odoo),然后执行查看

aws autoscaling \
describe-auto-scaling-groups \
--query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='pre-production']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
--output table --region ap-southeast-1

输出

-----------------------------------------------------------------------------------
|                            DescribeAutoScalingGroups                            |
+------------------------------------------------------------------+----+----+----+
|  eks-pre-production-gnode1-b8c3ba17-d029-f1cb-839b-46478531d530  |  3 |  5 |  3 |
+------------------------------------------------------------------+----+----+----+

 10、部署测试应用,增加副本测试,或者并发压力测试

参考:

​​https://graviton2.awspsa.com/3-%E5%AE%9E%E9%AA%8C3%E9%85%8D%E7%BD%AEeks%E5%BC%B9%E6%80%A7%E9%9B%86%E7%BE%A4%E5%B9%B6%E8%BF%90%E8%A1%8C%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95.html​​

​​https://blog.csdn.net/weixin_41335923/article/details/121486673​​文章来源地址https://www.toymoban.com/news/detail-842950.html

到了这里,关于EKS集群的弹性扩缩容CA的配置实战 ·『云原生品鉴与布道』·的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

    💖The Begin💖点点关注,收藏不迷路💖 首先,确保你已经安装了Docker。 要下载特定版本的Tomcat镜像,可以在 docker pull 命令后面添加 image_name: tag 参数。其中 tag 制定了镜像的版本号。 解决插入中文报错: 总结: docker安装完mysql,运行实例之后,建议先修改完字符集编码后再

    2024年02月10日
    浏览(38)
  • 第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

    当集群中OSD进行扩缩容操作后,会触发一个Reblanceing数据重分布的机制,简单的理解就是将扩缩容前后OSD中的PG在每一个OSD中进行均匀分布,如下图所示: 在扩容前集群有两个OSD节点,这两个OSD中分布着十个PG,扩容后,集群中有三个OSD节点,此时就会触发Reblanceing数据重分布

    2024年04月15日
    浏览(43)
  • 【云原生】AWS创建EKS1.25(Kubernetes)集群

    我这里使用的是 eksctl 命令创建的,更多信息:https://eksctl.io/usage/schema/ 1、编写 yaml 文件 vim eks-cluster.yaml 2、创建集群 3、本地管理 获取 config 文件自动添加到 ~/.kube/config 使用 kubectl 工具管理集群,现在可以使用 kubectl 工具管理集群了

    2024年02月13日
    浏览(38)
  • 云原生之深入解析Thanos在EKS多集群架构上存储多个集群Prometheus

    随着 HiredScore 的产品和客户群越来越大,已经开始向 Kubernetes 过渡并迅速采用它,它是我们重要的障碍之一,也可能是最大的监控基础设施。我们在使用 Prometheus / Grafana 堆栈进行监控方面有一些经验,了解到希望创建一个更好、高可用性和弹性的基础架构,具有可行且具有成

    2024年02月02日
    浏览(51)
  • xfs文件系统扩缩容

    ext4文件系统可以进行扩缩容操作,但xfs的文件系统只能扩容,无法直接缩容 所以如果需要进行xfs的缩容,可以先使用xfsdump备份文件系统,然后对逻辑卷(/分区)进行缩容操作(此时原xfs文件系统会损坏),然后再重新格式化该逻辑卷(/分区),最后xfsrestore将备份还原到该逻辑卷

    2024年02月12日
    浏览(44)
  • zookeeper动态扩缩容(无需重启)

    目录 一、启动一个zk 二、扩容一个zk 三、缩容一个zk 四、重新配置集群的节点 前言: zookeeper动态扩/缩容的reconfig命令旨在不需要重启zookeeper中任何一个节点的情况下,对整个zookeeper集群进行动态扩/缩容。 zookeeper客户端支持的命令: 在实际验证中发现一些细节问题,先记录

    2024年02月21日
    浏览(47)
  • Kubernetes中Pod的扩缩容介绍

    在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩缩容操作提供了手动和自动两种模式,手动模式通过执行

    2024年02月07日
    浏览(49)
  • k8s教程(pod篇)-扩缩容

    声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale机制 来完成

    2024年02月08日
    浏览(58)
  • k8s扩缩容与滚动更新

    使用kubectl run创建 应用 端口暴露出去 使用kubectl  create 创建应用 端口暴露出去 run 与 create 区别: run 为一次性的创建运行,删除后不会自动生成,没有 pod 控制器 create 创建的,删除后还会自动生成,有 pod 控制器,拥有副本集控制 scale 应用 默认情况下 应用只会运行一个副

    2024年02月12日
    浏览(45)
  • 研发工程师玩转Kubernetes——自动扩缩容

    在《研发工程师玩转Kubernetes——使用Deployment进行多副本维护》一文中,我们通过Deployment实现了多副本维护——即维持在一个确定数量的副本个数。而在现实场景中,我们往往需要根据服务的压力,采用水平(横向)扩容的方式——即增加多个副本,来分担压力。当服务压力

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包