注意:(2021年10月14日)Linode现在已将Kubernetes Autoscaler发布给所有LKE。尽管该自动驾驶员仍然有一些用法(尤其是如果您想积极自动并提前自动),但它将不再积极维护。
===
这是基于内存或CPU使用情况在LKE群集池中水平缩放线条的简单自动化实用程序。这有效地意味着您可以使用Kubernetes的水平豆荚自动绘制来扩展豆荚,并使用该实用程序来扩展线条 - 因此您可以设置此功能并根据需要让群集扩大或向下扩展。
该实用程序的每个实例都将基于内存或CPU自动自动。要使用两者,您可以部署此实用程序的2个实例(通常1个就足够了)。
它已完全停靠(但用PHP编写),并且资源足迹较低,因此您可以在本地或集群本身部署它。
该实用程序的图像发表在 @ docker枢纽中为meezaan/linode-k8s-autoscaler(https://hub.docker.com/r/meezaan/linode-k8s-autoscaler)。
最新标签始终具有最新的代码。此外,Docker Hub标签与该GIT存储库中的标签相关。
Docker容器通过环境变量采用其所有配置。这是每个人所做的列表:
| 环境变量名称 | 描述 |
|---|---|
| linode_personal_access_token | 您带有LKE范围的个人访问令牌 |
| linode_lke_cluster_id | LKE群集到AutoScale的ID |
| linode_lke_cluster_pool_id | LKE集群中的节点池ID到AutoScale |
| linode_lke_cluster_pool_minimum_nodes | 将最小节点保存在群集中。群集不会在此下方缩放。 |
| AutoScale_trigger | 'CPU'或“内存”。默认为MEMMORY。 |
| autoscale_trigger_type | “请求”或“二手”。默认要求。这告诉Autoscaler如果违反阈值,请使用所请求的或当前使用的内存或CPU进行扩展或向下扩展。 |
| autoscale_up_percentage | 以“ CPU”或“内存”的百分比来扩展节点池。示例:65 |
| autoscale_down_percentage | 以“ CPU”或“内存”的百分比来缩放节点池。示例:40 |
| autoscale_resource_request_up_percentage | 以所需 /可用的“ CPU”或“内存”百分比以扩大群集的比例。默认值:80 |
| autoscale_resource_request_down_percentage | 以所请求 /可用的“ CPU”或“内存”的百分比为多个,以缩小群集的扩展。默认值:70 |
| autoscale_query_interval | 每次致电Kubernetes API检查CPU和内存使用情况,需要等待多少秒钟。示例:10 |
| autoscale_threshold_count | 在Autoscale_up_percentage或AutoScale_down_percentage连续进行了几次匹配之后,以向上或向下扩展群集。 |
| autoscale_number_of_nodes | 缩放群集时一次添加多少个节点。示例:1或2或3或N |
| autoscale_wait_time_after_scaling | 缩放或向下缩放后,要等待多少秒钟才能开始检查CPU和内存。应该将其设置为给群集足够的时间与更新的节点数量进行调整。示例:150 |
要理解以上,假设我们已经设置了以下值。
使用此设置,Autoscaler实用程序将每10秒查询Kuberenetes API。如果连续3个调用API(有效地含义30秒),则请求的内存超过了群集上可用的总内存的80%,则将将2个节点添加到指定的节点池中。该实用程序将等待180秒,然后再次开始一次查询API。
如果连续3个对API的调用(有效地含义30秒),请求的内存低于群集上可用的总内存的70%,将删除1个节点(每次始终删除一个节点,以确保您突然不会突然用完能力)。该实用程序将等待180秒,然后再次开始一次查询API。
相同的示例,具有不同的触发类型。
使用此设置,Autoscaler实用程序将每10秒查询Kuberenetes API。如果连续3个调用API(有效地含义30秒),则内存使用率高于群集可用的总内存的65%,则将添加2个节点。该实用程序将等待180秒,然后再次开始一次查询API。
如果连续3个对API的调用(有效地含义30秒),则记忆使用量低于群集上可用的总存储器的30%,将删除1个节点(每次始终删除一个节点,以确保您突然不会突然用完能力)。该实用程序将等待180秒,然后再次开始一次查询API。
您需要使用ENV变量和Kubectl配置配置Docker Image。
在本地运行:
docker run -v ~/.kube/config:/root/.kube/config
-e LINODE_PERSONAL_ACCCESS_TOKEN='xxxx'
-e LINODE_LKE_CLUSTER_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_MINIMUM_NODES='3'
-e AUTOSCALE_TRIGGER='cpu'
-e AUTOSCALE_UP_PERCENTAGE='60'
-e AUTOSCALE_DOWN_PERCENTAGE='30'
-e AUTOSCALE_RESOURCE_REQUEST_UP_PERCENTAGE='70'
-e AUTOSCALE_RESOURCE_REQUEST_DOWN_PERCENTAGE='70'
-e AUTOSCALE_QUERY_INTERVAL='10'
-e AUTOSCALE_THRESHOLD_COUNT='3'
-e AUTOSCALE_NUMBER_OF_NODES='1'
-e AUTOSCALE_WAIT_TIME_AFTER_SCALING='180' meezaan/linode-k8s-autoscaler
对于生产,您可以构建一个私有的Docker映像,并将带有服务帐户的凭据的Kubectl配置文件推入图像。因此,您的Dockerfile看起来像:
FROM meezaan/linode-k8s-autoscaler
COPY configfile /root/.kube/config
构建图像后(并假设它称为yourspace/k8s-autoscaler:最新),您可以使用以下清单部署它:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-autoscaler
namespace: name-of-namespace ####### Change this to the actual namespace
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: k8s-autoscale
template:
metadata:
labels:
app: k8s-autoscale
spec:
imagePullSecrets:
- name: regcred ####### Docker registry credentials secret
containers:
- name: k8s-autoscale
image: yourspace/k8s-autoscaler:latest ####### CHANGE THIS TO YOUR ACTUAL DOCKER IMAGE
env:
- name: LINODE_PERSONAL_ACCCESS_TOKEN
valueFrom:
secretKeyRef:
name: linode-personal-access-token-k8s-autoscaler ####### LINODE PERSONAL ACCESS TOKEN SECRET
key: token
- name: LINODE_LKE_CLUSTER_ID
value: ""
- name: LINODE_LKE_CLUSTER_POOL_ID
value: ""
- name: AUTOSCALE_TRIGGER
value: "memory"
- name: AUTOSCALE_UP_PERCENTAGE
value: "60"
- name: AUTOSCALE_DOWN_PERCENTAGE
value: "30"
- name: AUTOSCALE_QUERY_INTERVAL
value: "30"
- name: AUTOSCALE_THRESHOLD_COUNT
value: "3"
- name: AUTOSCALE_NUMBER_OF_NODES
value: "1"
- name: AUTOSCALE_WAIT_TIME_AFTER_SCALING
value: "150"
resources:
requests:
memory: 32Mi
limits:
memory: 32Mi
上面的清单为您的Linode个人访问令牌和Docker注册表凭据使用秘密。
您需要创建这些。
上述POD需要0.01 CPU和15MB的内存运行。内存可能会根据API响应的大小增加,但它返回JSON,因此,即使您的群集中有100多个服务器,您仍然只查看30MB左右。
该实用程序与Linode无关。