掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:祝祥 2023-10-27 08:03:29
云計算
云原生
開源 Kube-downscaler 是管理 Kubernetes 集群中資源使用情況的強大工具。通過定義擴展計劃,用戶可以優(yōu)化集群中的資源使用并降低成本,同時確保應用程序即使在高峰使用期間也保持可用和響應。

創(chuàng)新互聯(lián)是專業(yè)的炎陵網(wǎng)站建設公司,炎陵接單;提供成都網(wǎng)站建設、網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行炎陵網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Kube-downscaler 是一款開源工具,允許用戶定義 Kubernetes 中 pod 資源自動縮減的時間。這有助于通過減少非高峰時段的資源使用量來降低基礎設施成本。
在本文中,我們將詳細介紹 kube-downscaler 的功能、安裝和配置,以及它的用例和未來前景。
Kube-downscaler 是一款基于調(diào)度的強大工具,用于在 Kubernetes 集群中對應用程序進行升級或降級。在本節(jié)中,我們將探討該工具的一些關(guān)鍵功能:
Kube-downscaler 還支持水平 Pod 自動縮放 (HPA),并可以與 HPA 結(jié)合使用,以確保為應用程序維護所需的副本數(shù)量。這使得 kube-downscaler 能夠為 Kubernetes 中的應用程序擴展提供額外的靈活性和細粒度的控制。
Karpenter 和 kube-downscaler 是兩個可以結(jié)合使用的工具,可以為 Kubernetes 集群提供完整且強大的資源管理解決方案。通過結(jié)合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以從水平和垂直擴展中受益。 Downscaler 允許減少 Pod 數(shù)量,而 Karpenter 通過將 Pod 整合到更少或不同類型的機器上來優(yōu)化節(jié)點利用率。
Kube-downscaler 可以根據(jù)預定義的時間段自動擴展部署副本。這意味著我們可以設置一個計劃,在一天、一周或一個月的特定時間增加或減少副本數(shù)量。
比如,如果我們知道應用程序在一天中的某些時段遇到高流量,則可以將 kube-downscaler 配置為在這些時段自動擴展副本,然后在流量減少時縮小副本。
這可以允許在預期峰值負載的情況下進行擴展,而不是等待峰值負載發(fā)生并由 HPA 處理。這可以幫助優(yōu)化資源使用并確保您的應用程序始終可用且響應迅速。
但是 Kube-downscaler 主要用于縮小副本并優(yōu)化集群的成本,我們通常使用 HPA 來管理擴展。
從 GitHub 克隆 kube-downscaler 存儲庫:
git clone 進入 kube-downscaler 目錄:
cd kube-downscaler編輯 deploy/kube-downscaler.yaml 文件以根據(jù)您的具體需求自定義配置。例如,可以調(diào)整時區(qū)、計劃和縮放規(guī)則。
將配置應用到您的 Kubernetes 集群:
kubectl apply -f deploy/此命令將部署 kube-downscaler 控制器并創(chuàng)建 kube-downscaler 部署。
可以通過檢查 kube-downscaler 部署的日志來驗證 kube-downscaler 控制器是否正在運行:
kubectl logs -f deployment/kube-downscaler安裝完成后,需要進行一下配置。
Kube-downscaler 通過在 Kubernetes 部署對象上使用注釋來提供擴展計劃的定制。
部署對象中的 downTimePeriod注釋可用于指定不應擴展部署的停機時間段。
minReplicas 注釋可用于設置部署的最小副本數(shù)。
這些字段與 kube-downscaler 注釋結(jié)合使用,允許您根據(jù)特定的業(yè)務需求和資源利用模式創(chuàng)建自定義的擴展計劃。
通過調(diào)整這些字段,可以配置 kube-downscaler 以優(yōu)化應用程序可用性和成本效率的方式擴展部署。
以下是使用 kube-downscaler 進行部署的簡單配置。
apiVersion: apps/v1
kind: Deployment
metadata:
name: random-deployment
annotations:
# Kube-downscaler
downscaler/downtimePeriod: "Mon-Fri 00:00-07:00 Europe/Berlin"
downscaler/minReplicas: 1
spec:
replicas: 2
selector:
matchLabels:
app: random
template:
metadata:
labels:
app: random
spec:
containers:
- name: random-container
image: random-image通過此配置,從周一到周五午夜到早上 7 點(在歐洲/柏林時間線上),副本數(shù)量將減少到 1 個。
kube-downscaler 將根據(jù)定義的計劃自動開始縮減 pod。
目前我們已經(jīng)在 Kubernetes 集群上安裝并運行了 kube-downscaler。
Kube-downscaler 如果滿足以下所有條件,將縮減部署的副本:
默認情況下,部署將縮減為零副本。這可以通過部署或其命名空間的注釋進行配置, downscaler/downtime-replicas 也可以通過 CLI 使用 --downtime-replicas 。
Ex: downscaler/downtime-replicas: "1"。
在正常的情況下 HorizontalPodAutoscalers ,該字段不能設置為零, 因此downscaler/downtime-replicas 至少 1 應設置為 。 關(guān)于 CronJobs ,它們的狀態(tài)將按照我們的預期進行定義 suspend: true 。
請注意,默認的寬限期為 15 分鐘適用于新的 nginx 部署,即
INFO: Scaling down Deployment default/nginx from 1 to 0 replicas (uptime: Mon-Fri 09:00-17:00 America/Buenos_Aires, downtime: never)請注意,如果 HorizontalPodAutoscaler (HPA) 與部署一起使用,請考慮以下事項:
若要使用 在 HPA 上 --downtime-replicas=1 啟用downscaler,請確保將以下注釋添加到部署和 HPA。
$ kubectl annotate deploy nginx 'downscaler/exclude=true'
$ kubectl annotate hpa nginx 'downscaler/downtime-replicas=1'
$ kubectl annotate hpa nginx 'downscaler/uptime=Mon-Fri 09:00-17:00 America/Buenos_Aires'downscaler通過命令行參數(shù)、環(huán)境變量或 Kubernetes 注釋進行配置。
時間定義(例如 DEFAULT_UPTIME )接受以逗號分隔的規(guī)范列表,例如,以下配置將縮小非工作時間的所有部署:
DEFAULT_UPTIME="Mon-Fri 07:30-20:30 Europe/Berlin"僅在周末和周五 20:00 后縮?。?/p>
DEFAULT_DOWNTIME="Sat-Sun 00:00-24:00 CET,Fri-Fri 20:00-24:00 CET'每個時間規(guī)范可以采用以下兩種格式之一:
您可以選擇升級或縮減的時間段,而不是嚴格的正常運行時間或停機時間。時間定義是相同的。在這種情況下,放大或縮小只發(fā)生在時間段,其余時間將被忽略。
如果配置了升級或縮減周期,將忽略正常運行時間和停機時間。這意味著某些選項是互斥的,例如,您可以使用或 --default-downtime ,但不能同時使用 --downscale-period 兩者。
此定義將在 19:00 到 20:00 之間縮減群集。如果手動升級集群,則在第二天 19:00-20:00 之前不會縮減集群。
DOWNSCALE_PERIOD="Mon-Sun 19:00-20:00 Europe/Berlin"可用的命令行選項:
DEFAULT_UPTIME 、 DEFAULT_DOWNTIME 和 FORCE_UPTIME 排除也可以使用命名空間注釋進行配置。在配置的情況下,這些值將取代其他全局默認值。
apiVersion: v1
kind: Namespace
metadata:
name: foo
labels:
name: foo
annotations:
downscaler/uptime: Mon-Sun 07:30-18:00 CET命名空間級別支持以下批注:
該工具的主要用例是通過優(yōu)化 Kubernetes 集群資源的利用率來降低成本。不過,它也可以用來預熱集群,避免過度依賴 HPA。
雖然這不是其主要目的,但這種組合提供了一種替代解決方案,可確保應用程序的高可用性,同時最大限度地降低基礎設施成本。
kube-downscaler 的另一個用例是防止高峰使用期間的服務中斷。通過定義在高需求期間擴展資源的計劃,kube-downscaler 可以幫助預先擴展部署并避免 HPA 延遲,以確保應用程序即使在高峰使用期間也保持可用和響應。
kube-downscaler 的另一個用例是防止高峰使用期間的服務中斷。通過定義在高需求期間擴展資源的計劃,kube-downscaler 可以幫助預先擴展部署并避免 HPA 延遲,以確保應用程序即使在高峰使用期間也保持可用和響應。
基于預定義計劃的擴展,這可能并不適合所有用例。此外,它不支持自動縮放,這意味著用戶必須手動調(diào)整縮放計劃以滿足不斷變化的需求。
另一種可供考慮的解決方案是 Keda。 Keda是一個開源項目,為Kubernetes應用程序提供動態(tài)自動伸縮功能。使用 Keda,用戶可以根據(jù)各種指標(例如隊列長度、CPU 使用率或自定義指標)設置自定義擴展規(guī)則。
這允許對資源使用進行更精細的控制,并確保應用程序始終能夠正確擴展以滿足需求。
此外,Keda 兼容廣泛的 Kubernetes 應用程序,包括有狀態(tài)和無狀態(tài)應用程序,并支持多種事件源,例如 Azure Event Hubs、Kafka 和 RabbitMQ。
Kube-downscaler 是管理 Kubernetes 集群中資源使用情況的強大工具。通過定義擴展計劃,用戶可以優(yōu)化集群中的資源使用并降低成本,同時確保應用程序即使在高峰使用期間也保持可用和響應。
雖然 kube-downscaler 是管理 Kubernetes 集群中資源使用情況的一個有價值的工具,但它可能有一些限制。如果需要對資源擴展進行更精細的控制或需要自動擴展功能,那么可能值得考慮像 Keda 這樣的替代解決方案。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流