在EKS Kubernetes集群上启用集群自动缩放器

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

啊啊 集群自动缩放 Kubernetes组件会自动调整Kubernetes集群的大小,以便每个Pod都有运行的地方,并且没有不必要的节点。与主要的云提供商(GCP,AWS,Azure)合作。本简短教程将向您展示如何在Amazon EKS集群上安装和配置Cluster Autoscaler。群集自动缩放器会自动修改节点组,以在需要更多资源时进行扩展,并在资源利用不足时进行扩展。

EKS群集必须正在使用此指南。以下指南将帮助您入门。

使用EKS在AWS上轻松设置Kubernetes集群

请参阅以下指南,以获取有关Pod自动缩放功能的更多信息。

在Kubernetes EKS集群中使用水平Pod自动缩放器

在EKS Kubernetes集群上启用集群自动缩放器

群集自动缩放器需要其他IAM策略和资源标记,才能管理群集中的自动缩放。

步骤1:创建EKS附加IAM策略

群集自动伸缩程序调用AWS API时需要以下IAM权限。

创建一个IAM策略json文件。

cat >aws-s3-eks-iam-policy.json<

应用策略。

aws iam create-policy --policy-name EKS-Node-group-IAM-policy --policy-document file://aws-s3-eks-iam-policy.json

这是我的策略创建输出:

{
    "Policy": {
        "PolicyName": "EKS-Node-group-IAM-policy",
        "PolicyId": "ANPATWFKCYAHACUQCHO3D",
        "Arn": "arn:aws:iam::253750766592:policy/EKS-Node-group-IAM-policy",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 0,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "CreateDate": "2020-09-04T12:26:20+00:00",
        "UpdateDate": "2020-09-04T12:26:20+00:00"
    }
}

步骤2:将策略附加到EKS节点组

如果您使用 eksctl 创建节点组的命令 –访问权限 可选所需的权限会自动提供并附加到节点的IAM角色。

登录到AWS控制台并移动 EC2> EKS实例>描述> IAM角色

单击您的IAM角色的链接,然后在下面添加权限 附加政策

在EKS Kubernetes集群上启用集群自动缩放器

附加您先前创建的策略。

该图像的alt属性为空。文件名是EKS-Configure-Cluster-Autoscaler-03-1024x229.png。

检查设置。

在EKS Kubernetes集群上启用集群自动缩放器

照着做 EKS> ClusterName>详细信息

在EKS Kubernetes集群上启用集群自动缩放器

记下群集中使用的IAM ARN,然后 IAM>角色 并搜索。

在EKS Kubernetes集群上启用集群自动缩放器

将创建的策略附加到角色。

该图像的alt属性为空。文件名是EKS-Configure-Cluster-Autoscaler-03-1024x229.png。

确保该策略在附加策略列表中。

在EKS Kubernetes集群上启用集群自动缩放器

步骤3:添加节点组标签

群集自动缩放器需要节点的“自动缩放”组中的以下标记才能自动发现。

核心价值
k8s.io/cluster-autoscaler/owned
k8s.io/cluster-autoscaler/enabledtrue

邀请 EKS>集群>集群名称> 计算

在EKS Kubernetes集群上启用集群自动缩放器

选择一个节点组,然后单击 编辑

在EKS Kubernetes集群上启用集群自动缩放器

在底部添加标签,并在完成后保存更改。

步骤4:在EKS上部署集群自动扩展程序

通过登录到运行kubectl命令的计算机来部署集群自动缩放器。

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

您还可以在申请之前下载yaml文件。

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

运行以下命令 cluster-autoscaler.kubernetes.io/safe-to-evict 部署说明:

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

编辑集群自动缩放器部署以设置集群名称并添加以下选项

--balance-similar-node-groups
--skip-nodes-with-system-pods=false

请在下面的屏幕截图中检查我的设置。

在EKS Kubernetes集群上启用集群自动缩放器

打开集群自动缩放器 释放 在Web浏览器中查看页面,找到与集群的主要和次要版本的Kubernetes相匹配的最新集群自动缩放器版本。例如,如果您的集群的Kubernetes版本为1.17,请查找从1.17开始的最新集群自动缩放器版本。记录语义版本号(1.17。n)供下一步使用的发行版。

我的集群是 v1.17, 使用1.17.3,这是1.17中可用的最新容器映像版本。

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

检查Cluster Autoscaler Pod是否正在运行。

$ kubectl get pods -n kube-system -w
NAME                                  READY   STATUS    RESTARTS   AGE
aws-node-glfrs                        1/1     Running   0          23d
aws-node-sgh8p                        1/1     Running   0          23d
cluster-autoscaler-6f56b86d9b-p9gc7   1/1     Running   5          21m # It is running
coredns-6987776bbd-2mgxp              1/1     Running   0          23d
coredns-6987776bbd-vdn8j              1/1     Running   0          23d
efs-csi-node-p57gw                    3/3     Running   0          18d
efs-csi-node-z7gh9                    3/3     Running   0          18d
kube-proxy-5glzs                      1/1     Running   0          23d
kube-proxy-hgqm5                      1/1     Running   0          23d
metrics-server-7cb45bbfd5-kbrt7       1/1     Running   0          23d

您可以监视日志流。

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

输出:

I0904 14:28:50.937242       1 scale_down.go:431] Scale-down calculation: ignoring 1 nodes unremovable in the last 5m0s
I0904 14:28:50.937257       1 scale_down.go:462] Node ip-192-168-138-244.eu-west-1.compute.internal - memory utilization 0.702430
I0904 14:28:50.937268       1 scale_down.go:466] Node ip-192-168-138-244.eu-west-1.compute.internal is not suitable for removal - memory utilization too big (0.702430)
I0904 14:28:50.937333       1 static_autoscaler.go:439] Scale down status: unneededOnly=false lastScaleUpTime=2020-09-04 13:57:03.11117817 +0000 UTC m=+15.907067864 lastScaleDownDeleteTime=2020-09-04 13:57:03.111178246 +0000 UTC m=+15.907067938 lastScaleDownFailTime=2020-09-04 13:57:03.111178318 +0000 UTC m=+15.907068011 scaleDownForbidden=false isDeleteInProgress=false scaleDownInCooldown=false
I0904 14:28:50.937358       1 static_autoscaler.go:452] Starting scale down
I0904 14:28:50.937391       1 scale_down.go:776] No candidates for scale down

步骤5:测试EKS群集自动缩放器

这样就完成了安装。让我们测试一下。

集群有两个节点。为节点组设置的最大数量为 3。

$ $ kubectl get nodes
NAME                                            STATUS   ROLES    AGE   VERSION
ip-192-168-138-244.eu-west-1.compute.internal   Ready       23d   v1.17.9-eks-4c6976
ip-192-168-176-247.eu-west-1.compute.internal   Ready       23d   v1.17.9-eks-4c6976

部署大量的Pod,并查看它们是否可以自动扩展到节点组中配置的最大节点数。

$ kubectl run nginx-example --image=nginx --port=80 --replicas=100

观看创建的新节点。

$ watch kubectl get nodes

您将看到创建的新节点并将其添加到集群中。

$ kubectl get nodes
NAME                                            STATUS   ROLES    AGE   VERSION
ip-192-168-119-255.eu-west-1.compute.internal   Ready       26m   v1.17.9-eks-4c6976
ip-192-168-138-244.eu-west-1.compute.internal   Ready       23d   v1.17.9-eks-4c6976
ip-192-168-176-247.eu-west-1.compute.internal   Ready       23d   v1.17.9-eks-4c6976

使用Pod删除部署将按比例缩小群集。

$ kubectl delete deployment nginx-example

这就是您在EKS Kubernetes集群中配置集群自动扩展所需的全部。

EKS的详细信息:

在EKS Kubernetes集群上安装Istio Service Mesh

在EKS上安装CloudWatch Container Insights | Kubernetes

在EKS Kubernetes集群上部署Prometheus

Kubernetes学习课程:

这是续集。
您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南


这是续集。

这是续集。
这是续集。

Sidebar