참고 : (2021 년 10 월 14 일) Linode는 이제 Kubernetes Autoscaler를 모든 LKE에 출시했습니다. 이 AutoScaler에는 여전히 약간의 사용법이 있지만 (특히 적극적이고 미리 자동 장면을 원한다면) 더 이상 적극적으로 유지되지 않습니다.
===
이것은 메모리 또는 CPU 사용을 기반으로 LKE 클러스터 풀에서 수평으로 스케일링하는 간단한 자동화 유틸리티입니다. 이것은 효과적으로 Kubernetes의 수평 포드 자동화를 사용하여 포드 와이 유틸리티를 확장하여 리노드를 확장 할 수 있음을 의미합니다. 따라서이를 설정하고 클러스터를 필요에 따라 확장하거나 아래로 내리도록 할 수 있습니다.
이 유틸리티의 각 인스턴스는 메모리 또는 CPU를 기반으로 자동 규모입니다. 두 가지를 모두 사용하려면이 유틸리티의 2 개의 인스턴스를 배포 할 수 있습니다 (일반적으로 1은 충분합니다).
완전히 도로화되어 있지만 (PHP로 작성) 자원 발자국이 낮으므로 로컬 또는 클러스터 자체에 배포 할 수 있습니다.
이 유틸리티의 이미지는 @ Docker Hub로 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 클러스터의 ID는 자동 장면입니다 |
| linode_lke_cluster_pool_id | LKE 클러스터 내의 노드 풀 ID는 자동 장면 |
| linode_lke_cluster_pool_minimum_nodes | 클러스터에 보관할 최소 노드. 클러스터는이 아래에서 축소되지 않습니다. |
| Autoscale_trigger | 'CPU'또는 '메모리'. 기본값으로 Memmory. |
| autoscale_trigger_type | '요청'또는 '중고'. 기본값 요청. 이를 통해 Autoscaler는 요청 된 또는 현재 사용되는 메모리 또는 CPU를 사용하여 Threshhold를 위반할 경우 확장 또는 아래로 확장하도록 지시합니다. |
| autoscale_up_percentage | 노드 풀을 확장하기 위해 'CPU'또는 'Memory'의 몇 퍼센트. 예 : 65 |
| autoscale_down_percentage | 노드 풀을 스케일로 낮추기 위해 'CPU'또는 'Memory'의 몇 퍼센트. 예 : 40 |
| autoscale_resource_request_up_percentage | 클러스터를 확장 할 수있는 요청 / 사용 가능한 'CPU'또는 '메모리'의 몇 퍼센트. 기본값 : 80 |
| autoscale_resource_request_down_percentage | 요청 / 클러스터의 스케일 다운을 사용할 수있는 'CPU'또는 '메모리'의 몇 퍼센트. 기본값 : 70 |
| autoscale_query_interval | CPU 및 메모리 사용을 확인하기 위해 Kubernetes API에 호출하기 전에 몇 초 동안 기다리십시오. 예 : 10 |
| autoscale_threshold_count | 클러스터를 위 또는 아래로 확장하기 위해 Autoscale_up_percentage 또는 Autoscale_down_percenge의 연속 일치 후 |
| 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 구성으로 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
이미지를 만들었고 (그리고 그것이 당신의 pace/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
위의 Manifest는 Linode 개인 액세스 토큰 및 Docker Registry 자격 증명에 비밀을 사용합니다.
이것들을 만들어야합니다.
위의 포드는 0.01 CPU 및 15MB의 메모리를 사용하여 실행됩니다. API 응답의 크기에 따라 메모리가 증가 할 수 있지만 JSON을 반환하므로 클러스터에 100 개 이상의 서버가 있더라도 여전히 30MB 정도만보고 있습니다.
이 유틸리티는 Linode와 제휴하지 않습니다.