注意:(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無關。