注:(2021年10月14日)Linodeは、すべてのLKEにKubernetes Autoscalerをリリースしました。この自動車業者にはまだある程度の使用法がありますが(特に積極的かつ事前に自動的に販売する場合)、積極的に維持されなくなります。
===
これは、メモリまたはCPUの使用に基づいてLKEクラスタープールで水平方向にスケーリングするリノードのための単純な自動焦点ユーティリティです。これは、Kubernetesの水平ポッドオートスケーリングを使用してポッドとこのユーティリティをスケールアップしてリノードをスケールアップできることを効果的に意味します。そのため、これをセットアップして、必要に応じてクラスターをスケーリングまたはダウンさせることができます。
このユーティリティの各インスタンスは、メモリまたはCPUのいずれかに基づいて自動的に販売されます。両方を使用するには、このユーティリティの2つのインスタンスを展開できます(通常1で十分です)。
完全にドッカー化されており(ただし、PHPで書かれています)、リソースフットプリントが低いため、ローカルまたはクラスター自体に展開できます。
このユーティリティの画像は、Meezaan/Linode-K8S-autoscaler(https://hub.docker.com/r/meezaan/linode-k8s-autoscaler)として @ docker hubを公開しています。
最新のタグには常に最新のコードがあります。また、Dockerハブタグは、リリースとしてこのGitリポジトリのタグに関連付けられています。
Dockerコンテナは、環境変数を介してすべての構成を採用します。これがそれぞれのことのリストです。
| 環境変数名 | 説明 |
|---|---|
| linode_personal_access_token | LKEスコープを使用したあなたの個人的なアクセストークン |
| linode_lke_cluster_id | LKEクラスターのAutoscaleへのID |
| linode_lke_cluster_pool_id | lkeクラスター内のノードプールIDをオートスケール |
| linode_lke_cluster_pool_minimum_nodes | クラスターに保持する最小ノード。クラスターはこれより下にスケーリングされません。 |
| autoscale_trigger | 「CPU」または「メモリ」。デフォルトはMemmoryになります。 |
| autoscale_trigger_type | 「リクエスト」または「使用済み」。デフォルトは要求されます。これにより、自動車員は、要求されているメモリまたは現在使用されているメモリまたはCPUを使用して、しきい値に違反した場合にスケールアップまたはダウンを使用するように指示します。 |
| autoscale_up_percentage | ノードプールをスケールアップするための「CPU」または「メモリ」の割合で。例:65 |
| autoscale_down_percentage | ノードプールをスケーリングする「CPU」または「メモリ」の割合で。例:40 |
| autoscale_resource_request_up_percentage | 要求された /使用可能な「CPU」または「メモリ」の割合でクラスターをスケールアップします。デフォルト:80 |
| autoscale_resource_request_down_percentage | 要求された /「メモリ」 /「メモリ」の割合がクラスターをスケーリングするのにどの割合で使用できますか。デフォルト:70 |
| autoscale_query_interval | Kubernetes APIへの各コールの前に待機する秒数秒で、CPUとメモリの使用量を確認しました。例:10 |
| autoscale_threshold_count | Clusterを上下にスケーリングするために、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を照会します。 APIへの3回連続の呼び出し(効果的に30秒以上を意味する)で、要求されたメモリがクラスターで利用可能な総メモリの80%を超える場合、指定されたノードプールにさらに2つのノードが追加されます。ユーティリティは180秒間待機し、10秒ごとにAPIの照会を開始します。
APIへの3つの連続した呼び出し(効果的に30秒を超えることを意味する)で、要求されたメモリがクラスターで利用可能な総メモリの70%未満である場合、1つのノードは削除されます(ノードは常に1つずつ削除されて、指定されたノードプールから容量が削除されないようにします)。ユーティリティは180秒間待機し、10秒ごとにAPIの照会を開始します。
同じ例、別のトリガータイプがあります。
このセットアップにより、Autoscalerユーティリティは10秒ごとにKuberenetes APIを照会します。 APIへの3回連続の呼び出し(効果的に30秒以上を意味する)で、メモリ使用量がクラスターで利用可能な総メモリの65%を超える場合、指定されたノードプールにさらに2つのノードが追加されます。ユーティリティは180秒間待機し、10秒ごとにAPIの照会を開始します。
APIへの3回連続の呼び出し(効果的に30秒を超えることを意味する)で、メモリ使用量がクラスターで利用可能な総メモリの30%未満である場合、指定されたノードプールから1つのノードが削除されます(ノードは常に1つずつ削除されます)。ユーティリティは180秒間待機し、10秒ごとにAPIの照会を開始します。
env変数とkubectl configを使用してDockerイメージを構成する必要があります。
ローカルで実行する:
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 Personal Access TokenおよびDockerレジストリの資格情報に秘密を使用しています。
これらを作成する必要があります。
上記のポッドは、0.01 CPUと15MBのメモリを実行します。メモリはAPI応答のサイズに基づいて増加する可能性がありますが、JSONを返します。そのため、クラスターに100以上のサーバーがある場合でも、30MBほどしか見ていません。
このユーティリティはLinodeと提携していません。