elastic 集群_如何自动缩放Amazon Elastic Kubernetes服务集群

elastic 集群

在本文中,我们将考虑在EKS集群中自动缩放的两种最常见方法:

水平荚自动缩放器(HPA)集群自动缩放器(CA)

Horizo​​ntal Pod Autoscaler或HPA是Kubernetes组件,可根据通过Kubernetes指标服务器定义的CPU利用率等指标自动扩展服务。 HPA可在部署或副本集中缩放Pod,并被实现为Kubernetes API资源和控制器。 Controller Manager根据每个水平容器自动缩放器定义中指定的指标查询资源利用率。 它从资源指标API中的每个pod指标或自定义指标API中的任何其他指标中获取指标。

为了了解这一点,我们将配置HPA,然后对系统施加一些负载以使其运行。

首先,让我们开始安装Helm作为Kubernetes的软件包管理器。

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > helm.sh
 chmod +x helm.sh
 ./helm.sh

现在,我们将建立称为Tiller的Helm的服务器基础部分。 这需要一个服务帐户:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

上面定义了一个我们分配了集群管理员角色的Tiller服务帐户。 现在,让我们继续进行配置:

kubectl apply -f tiller.yml

使用我们刚刚创建的Tiller服务帐户运行helm init

helm init --service-account tiller

这样,我们就将Tiller安装到了集群上,从而可以管理集群中的那些资源。

安装了Helm后,我们现在可以部署度量服务器。 指标服务器是资源使用情况数据的群集范围内的聚合器,其中指标由kubelet在每个工作节点上收集,并用于指示部署的扩展行为。

因此,让我们继续并立即安装它:

helm install stable/metrics-server --name metrics-server --version 2.0.4 --namespace metrics

一旦所有检查都通过,我们就可以扩展应用程序了。

出于本文的目的,我们将部署一种特殊的Apache和PHP版本,旨在产生CPU利用率:

kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80

** requests = cpu = 200m-请求将200毫厘分配给pod

现在,让我们自动调整部署范围:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

上面指定HPA将增加或减少副本数,以将所有Pod的平均CPU利用率维持50%。 由于每个Pod要求200毫微升(如先前命令中所指定),因此可以维持100毫微升的平均CPU使用率。

让我们检查一下状态:

kubectl get hpa

查看Targets列,如果它表示unknown/50%则表明当前CPU消耗为0%,因为我们当前未向服务器发送任何请求。 这将需要几分钟的时间才能显示正确的值,因此让我们拿起一杯咖啡,然后在这里获得一些数据后再回来。

重新运行最后一个命令,并确认Targets列现在为0%/50% 。 现在,让我们运行以下命令来生成一些负载以触发缩放:

kubectl run -i --tty load-generator --image=busybox /bin/sh

在此容器内,我们将向我们的服务发送无限数量的请求。 如果我们回到另一个终端,我们可以观察自动缩放器的运行情况:

kubectl get hpa -w

我们可以看到HPA缩放器容器从1增大到我们配置的最大值10,直到平均CPU利用率低于我们的目标50%。 运行大约需要10分钟,您可以看到我们现在有10个副本。 如果我们回到另一个终端以终止负载测试,然后回到缩放器终端,我们可以看到HPA将副本数减少到最小。

集群自动缩放器

集群自动缩放器是默认的Kubernetes组件,可以缩放集群中的Pod或节点。 它会自动增加自动缩放组的大小,以便吊舱可以继续成功放置。 它还尝试从自动扩展组(未运行Pod的节点)中删除未使用的工作程序节点。

以下AWS CLI命令将创建一个自动伸缩组,其最小数量为1,最大数量为10:

eksctl create nodegroup --cluster <CLUSTER_NAME> --node-zones <REGION_CODE> --name <REGION_CODE> --asg-access --nodes-min 1 --nodes 5 --nodes-max 10 --managed

现在,我们需要向工作节点应用内联IAM策略:

{"Version" : "2012-10-17" ,
    "Statement" : [
        {
            "Action" : [
                "autoscaling:DescribeAutoScalingGroups" ,
                "autoscaling:DescribeAutoScalingInstances" ,
                "autoscaling:DescribeLaunchConfigurations" ,
                "autoscaling:DescribeTags" ,
                "autoscaling:SetDesiredCapacity" ,
                "autoscaling:TerminateInstanceInAutoScalingGroup" ,
                "ec2:DescribeLaunchTemplateVersions"
            ],
            "Resource" : "*" ,
            "Effect" : "Allow"
        }
    ]
}

基本上,这使发布群集自动缩放器的EC2工作节点可以操纵自动缩放功能。 复制它并添加到您的EC2 IAM角色。

接下来,下载以下文件:

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

并使用您的集群名称更新以下行:

- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME>

最后,我们可以部署Autoscaler:

kubectl apply -f cluster-autoscaler-autodiscover.yaml

当然,我们应该等待豆荚完成创建。 完成后,我们可以扩展集群。 我们将考虑一个带有以下yaml文件的简单nginx应用程序:

apiVersion: extensions/v1beta2
kind: Deployment
metadata:
  name: nginx-scale
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        resources: 
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 500m
            memory: 512Mi

让我们继续部署应用程序:

kubectl apply -f nginx.yaml

并检查部署:

kubectl get deployment/nginx-scale

现在,让我们将副本最多扩展到10个:

kubectl scale --replicas=10 deployment/nginx-scale

我们可以看到一些吊舱处于挂起状态,这是集群自动伸缩器用来扩展EC2实例群的触发器。

kubectl get pods -o wide --watch

结论

在本文中,我们考虑了两种类型的EKS群集自动缩放。 我们了解了集群自动缩放器每当检测到未充分利用的实例或挂起的Pod时如何启动横向扩展和横向扩展操作。 在扩展微服务应用程序时,卧式Pod自动缩放器和集群自动缩放器是Kubernetes的基本功能。 希望您发现本文有用,但还有更多内容。 到那时,快乐缩放!

关于作者-Sudip是一位具有15年以上工作经验的解决方案架构师,并且是Javelynn的创始人。 他喜欢通过写作分享自己的知识,当他不这样做时,他一定是在钓鱼或下棋。

先前发布在 https://appfleet.com/上

翻译自: https://hackernoon.com/how-to-autoscale-an-amazon-elastic-kubernetes-service-cluster-5wv3ybs

elastic 集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值