自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 kube-downscaler 降低 Kubernetes 集群成本

云計算 云原生 開源
Kube-downscaler 是管理 Kubernetes 集群中資源使用情況的強大工具。通過定義擴展計劃,用戶可以優(yōu)化集群中的資源使用并降低成本,同時確保應(yīng)用程序即使在高峰使用期間也保持可用和響應(yīng)。

介紹

Kube-downscaler 是一款開源工具,允許用戶定義 Kubernetes 中 pod 資源自動縮減的時間。這有助于通過減少非高峰時段的資源使用量來降低基礎(chǔ)設(shè)施成本。

在本文中,我們將詳細介紹 kube-downscaler 的功能、安裝和配置,以及它的用例和未來前景。

kube-downscaler的特點

Kube-downscaler 是一款基于調(diào)度的強大工具,用于在 Kubernetes 集群中對應(yīng)用程序進行升級或降級。在本節(jié)中,我們將探討該工具的一些關(guān)鍵功能:

與Kubernetes功能或工具的兼容性

Kube-downscaler 還支持水平 Pod 自動縮放 (HPA),并可以與 HPA 結(jié)合使用,以確保為應(yīng)用程序維護所需的副本數(shù)量。這使得 kube-downscaler 能夠為 Kubernetes 中的應(yīng)用程序擴展提供額外的靈活性和細粒度的控制。

Karpenter 和 kube-downscaler 是兩個可以結(jié)合使用的工具,可以為 Kubernetes 集群提供完整且強大的資源管理解決方案。通過結(jié)合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以從水平和垂直擴展中受益。 Downscaler 允許減少 Pod 數(shù)量,而 Karpenter 通過將 Pod 整合到更少或不同類型的機器上來優(yōu)化節(jié)點利用率。

根據(jù)定義的時間段自動擴展部署副本

Kube-downscaler 可以根據(jù)預(yù)定義的時間段自動擴展部署副本。這意味著我們可以設(shè)置一個計劃,在一天、一周或一個月的特定時間增加或減少副本數(shù)量。

比如,如果我們知道應(yīng)用程序在一天中的某些時段遇到高流量,則可以將 kube-downscaler 配置為在這些時段自動擴展副本,然后在流量減少時縮小副本。 

這可以允許在預(yù)期峰值負載的情況下進行擴展,而不是等待峰值負載發(fā)生并由 HPA 處理。這可以幫助優(yōu)化資源使用并確保您的應(yīng)用程序始終可用且響應(yīng)迅速。

但是 Kube-downscaler 主要用于縮小副本并優(yōu)化集群的成本,我們通常使用 HPA 來管理擴展。

kube-downscaler的安裝和配置

kubernetes集群上kube-downscaler安裝說明

從 GitHub 克隆 kube-downscaler 存儲庫:

git clone <https://codeberg.org/hjacobs/kube-downscaler.git>

進入 kube-downscaler 目錄:

cd kube-downscaler

編輯 deploy/kube-downscaler.yaml 文件以根據(jù)您的具體需求自定義配置。例如,可以調(diào)整時區(qū)、計劃和縮放規(guī)則。

將配置應(yīng)用到您的 Kubernetes 集群:

kubectl apply -f deploy/

此命令將部署 kube-downscaler 控制器并創(chuàng)建 kube-downscaler 部署。

可以通過檢查 kube-downscaler 部署的日志來驗證 kube-downscaler 控制器是否正在運行:

kubectl logs -f deployment/kube-downscaler

安裝完成后,需要進行一下配置。

根據(jù)具體用戶需求配置kube-downscaler

Kube-downscaler 通過在 Kubernetes 部署對象上使用注釋來提供擴展計劃的定制。 

部署對象中的 downTimePeriod注釋可用于指定不應(yīng)擴展部署的停機時間段。

minReplicas 注釋可用于設(shè)置部署的最小副本數(shù)。 

這些字段與 kube-downscaler 注釋結(jié)合使用,允許您根據(jù)特定的業(yè)務(wù)需求和資源利用模式創(chuàng)建自定義的擴展計劃。 

通過調(diào)整這些字段,可以配置 kube-downscaler 以優(yōu)化應(yīng)用程序可用性和成本效率的方式擴展部署。

以下是使用 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 如果滿足以下所有條件,將縮減部署的副本:

  • current time不是“uptime”計劃的一部分,也不是“downtime”計劃的一部分。 如果為 true,則按以下順序評估計劃:

  • downscaler/downscale-period 或 downscaler/downtime 工作負載定義的注釋。
  • downscaler/upscale-period 或 downscaler/uptime 工作負載定義的注釋。
  • downscaler/downscale-period 或 downscaler/downtime 工作負載命名空間上的注釋。
  • downscaler/upscale-period 或 downscaler/uptime 工作負載命名空間上的注釋。
  • --upscale-period 或 --default-uptime CLI 參數(shù)。
  • --downscale-period 或 --default-downtime CLI 參數(shù)。
  • UPSCALE_PERIOD 或 DEFAULT_UPTIME 環(huán)境變量。
  • DOWNSCALE_PERIOD 或 DEFAULT_DOWNTIME 環(huán)境變量。
  • 工作負載的命名空間不是排除列表的一部分:
  • 如果提供排除列表,它將用于代替默認值(僅包括kube-system )。
  • 工作負載的標(biāo)簽與標(biāo)簽列表不匹配。
  • 工作負載的名稱不是排除列表的一部分。
  • 工作負載未標(biāo)記為排除(注釋 downscaler/exclude: "true" 或 downscaler/exclude-until: "2024-04-05")。
  • 沒有活動 Pod 強制整個集群進入正常運行時間(注釋 downscaler/force-uptime: "true" )。

Minimum replicas最小副本數(shù)

默認情況下,部署將縮減為零副本。這可以通過部署或其命名空間的注釋進行配置, downscaler/downtime-replicas 也可以通過 CLI 使用 --downtime-replicas 。

Ex: downscaler/downtime-replicas: "1"。

Specific workload特定工作負載

在正常的情況下 HorizontalPodAutoscalers ,該字段不能設(shè)置為零, 因此downscaler/downtime-replicas 至少 1 應(yīng)設(shè)置為 。 關(guān)于 CronJobs ,它們的狀態(tài)將按照我們的預(yù)期進行定義 suspend: true 。

注意點

請注意,默認的寬限期為 15 分鐘適用于新的 nginx 部署,即

  • 如果當(dāng)前時間不在 ,它不會立即縮小 Mon-Fri 9-17 (Buenos Aires timezone) ,而是在 15 分鐘后縮小。downscaler最終會記錄如下內(nèi)容:
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) 與部署一起使用,請考慮以下事項:

  • 如果需要縮減到 0 個副本,則應(yīng)在 上 Deployment 應(yīng)用注釋。這是一種特殊情況,因為 minReplicas 不允許在 HPA 上為 0。將部署副本設(shè)置為 0 實質(zhì)上會禁用 HPA。在這種情況下,HPA 將發(fā)出事件,例如 failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API 沒有 Pod 可以從中檢索指標(biāo)。
  • 如果需要縮小大于 0,則應(yīng)在 HPA 上應(yīng)用注釋。這允許在停機期間根據(jù)外部流量動態(tài)擴展 Pod,并在停機期間保持較低的 minReplicas 流量,如果沒有低流量。如果對部署而不是 HPA 進行批注,則會導(dǎo)致爭用條件,即縮減部署, kube-downscaler HPA 在部署更高時 minReplicas 將其升級。

若要使用 在 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'

詳細配置

Uptime/downtime spec

downscaler通過命令行參數(shù)、環(huán)境變量或 Kubernetes 注釋進行配置。

時間定義(例如 DEFAULT_UPTIME )接受以逗號分隔的規(guī)范列表,例如,以下配置將縮小非工作時間的所有部署:

DEFAULT_UPTIME="Mon-Fri 07:30-20:30 Europe/Berlin"

僅在周末和周五 20:00 后縮?。?/span>

DEFAULT_DOWNTIME="Sat-Sun 00:00-24:00 CET,Fri-Fri 20:00-24:00 CET'

每個時間規(guī)范可以采用以下兩種格式之一:

  • 重復(fù)規(guī)范格式 <WEEKDAY-FROM>-<WEEKDAY-TO-INCLUSIVE> <HH>:<MM>-<HH>:<MM> <TIMEZONE> .時區(qū)值可以是任何時區(qū),例如“US/Eastern”、“PST”或“UTC”。
  • 絕對規(guī)范格式, <TIME_FROM>-<TIME_TO> 其中每個 <TIME> 格式都是ISO 8601日期和時間的格式 <YYYY>-<MM>-<DD>T<HH>:<MM>:<SS>[+-]<TZHH>:<TZMM> 。

基于periods的替代邏輯

您可以選擇升級或縮減的時間段,而不是嚴格的正常運行時間或停機時間。時間定義是相同的。在這種情況下,放大或縮小只發(fā)生在時間段,其余時間將被忽略。

如果配置了升級或縮減周期,將忽略正常運行時間和停機時間。這意味著某些選項是互斥的,例如,您可以使用或 --default-downtime ,但不能同時使用 --downscale-period 兩者。

此定義將在 19:00 到 20:00 之間縮減群集。如果手動升級集群,則在第二天 19:00-20:00 之前不會縮減集群。

DOWNSCALE_PERIOD="Mon-Sun 19:00-20:00 Europe/Berlin"

命令行選項

可用的命令行選項:

  • --dry-run僅運行模式:不更改任何內(nèi)容,只需打印將要執(zhí)行的操作
  • --debug調(diào)試模式:打印更多信息
  • --once僅運行一次循環(huán)并退出
  • --interval循環(huán)間隔(默認:30 秒)
  • --namespace將downscaler限制為僅在單個命名空間(默認:所有命名空間)中工作。這主要適用于 kube-downscaler 的部署者只能訪問給定命名空間(而不是集群訪問權(quán)限)的部署場景。如果與 同時 --exclude-namespaces使用 ,則不應(yīng)用任何應(yīng)用。
  • --include-resources將此類資源縮小為逗號分隔列表。
  • --grace-period新部署在縮減部署之前的寬限期(以秒為單位)(默認值:15 分鐘)。寬限期從創(chuàng)建部署時開始計算,即無論寬限期如何,更新的部署都將立即縮減。
  • --upscale-period僅在給定時間段內(nèi)縱向擴展的替代邏輯(默認:從不),也可以通過環(huán)境變量 UPSCALE_PERIOD 或通過每個部署 downscaler/upscale-period 上的注釋進行配置
  • --downscale-period僅在給定時間段內(nèi)縮減的替代邏輯(默認:從不),也可以通過環(huán)境變量 DOWNSCALE_PERIOD 或通過每個部署 downscaler/downscale-period 上的注釋進行配置
  • --default-uptime要縱向擴展的默認時間范圍(默認:始終),也可以通過環(huán)境變量 DEFAULT_UPTIME 或通過每個部署 downscaler/uptime 上的注釋進行配置
  • --default-downtime要縮減的默認時間范圍(默認:從不),也可以通過環(huán)境變量 DEFAULT_DOWNTIME 或通過每個部署 downscaler/downtime 上的注釋進行配置
  • --exclude-namespaces從降級中排除命名空間(正則表達式模式列表,默認:kube-system),也可以通過環(huán)境變量 EXCLUDE_NAMESPACES 進行配置。如果與 同時 --namespace 使用 ,則不應(yīng)用任何應(yīng)用。
  • --exclude-deployments從降級中排除特定部署/狀態(tài)集/cronjobs(默認:kube-downscaler,downscaler),也可以通過環(huán)境變量 EXCLUDE_DEPLOYMENTS 進行配置。盡管名稱如此,但此選項將與任何包含的資源類型(Deployment,StatefulSet,CronJob等)的名稱匹配。
  • --downtime-replicas縮小到的副本的默認值,注釋 downscaler/downtime-replicas 優(yōu)先于此值。
  • --deployment-time-annotation可選:將使用的注釋的名稱,而不是資源的創(chuàng)建時間戳。如果您希望資源在部署后的寬限期 ( --grace-period ) 內(nèi)保持縱向擴展,則應(yīng)使用此選項。注釋的時間戳值的格式必須與 Kubernetes 的格式完全相同: creationTimestamp %Y-%m-%dT%H:%M:%SZ 。建議:通過部署工具自動設(shè)置此批注。
  • --matching-labels可選:kube-downscaleer 范圍涵蓋的工作負載標(biāo)簽列表。標(biāo)簽與列表中的任何工作負載都不匹配的所有工作負載都將被忽略。為了向后兼容,如果未指定此參數(shù),kube-downscaler 將應(yīng)用于所有資源。

Namespace Defaults命名空間默認值

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

命名空間級別支持以下批注:

  • downscaler/upscale-period。
  • downscaler/downscale-period。
  • downscaler/uptime :為此命名空間中的所有資源設(shè)置“正常運行時間”。
  • downscaler/downtime :為此命名空間中的所有資源設(shè)置“停機時間”。
  • downscaler/force-downtime :強制縮減此命名空間中的所有資源 - 可以是 true / false。
  • downscaler/force-uptime :強制向上擴展此命名空間中的所有資源 - 可以是 true / false。
  • downscaler/exclude :設(shè)置為 以 true 排除命名空間中的所有資源。
  • downscaler/exclude-until :暫時排除命名空間中的所有資源,直到給定的時間戳。
  • downscaler/downtime-replicas :覆蓋默認目標(biāo)副本以縮小到(默認值:零)。

使用案例

該工具的主要用例是通過優(yōu)化 Kubernetes 集群資源的利用率來降低成本。不過,它也可以用來預(yù)熱集群,避免過度依賴 HPA。 

雖然這不是其主要目的,但這種組合提供了一種替代解決方案,可確保應(yīng)用程序的高可用性,同時最大限度地降低基礎(chǔ)設(shè)施成本。

降低成本

kube-downscaler 的另一個用例是防止高峰使用期間的服務(wù)中斷。通過定義在高需求期間擴展資源的計劃,kube-downscaler 可以幫助預(yù)先擴展部署并避免 HPA 延遲,以確保應(yīng)用程序即使在高峰使用期間也保持可用和響應(yīng)。

服務(wù)中斷預(yù)防

kube-downscaler 的另一個用例是防止高峰使用期間的服務(wù)中斷。通過定義在高需求期間擴展資源的計劃,kube-downscaler 可以幫助預(yù)先擴展部署并避免 HPA 延遲,以確保應(yīng)用程序即使在高峰使用期間也保持可用和響應(yīng)。

建議

基于預(yù)定義計劃的擴展,這可能并不適合所有用例。此外,它不支持自動縮放,這意味著用戶必須手動調(diào)整縮放計劃以滿足不斷變化的需求。

另一種可供考慮的解決方案是 Keda。 Keda是一個開源項目,為Kubernetes應(yīng)用程序提供動態(tài)自動伸縮功能。使用 Keda,用戶可以根據(jù)各種指標(biāo)(例如隊列長度、CPU 使用率或自定義指標(biāo))設(shè)置自定義擴展規(guī)則。

這允許對資源使用進行更精細的控制,并確保應(yīng)用程序始終能夠正確擴展以滿足需求。

此外,Keda 兼容廣泛的 Kubernetes 應(yīng)用程序,包括有狀態(tài)和無狀態(tài)應(yīng)用程序,并支持多種事件源,例如 Azure Event Hubs、Kafka 和 RabbitMQ。

結(jié)論

Kube-downscaler 是管理 Kubernetes 集群中資源使用情況的強大工具。通過定義擴展計劃,用戶可以優(yōu)化集群中的資源使用并降低成本,同時確保應(yīng)用程序即使在高峰使用期間也保持可用和響應(yīng)。

雖然 kube-downscaler 是管理 Kubernetes 集群中資源使用情況的一個有價值的工具,但它可能有一些限制。如果需要對資源擴展進行更精細的控制或需要自動擴展功能,那么可能值得考慮像 Keda 這樣的替代解決方案。

責(zé)任編輯:姜華 來源: 新鈦云服
相關(guān)推薦

2021-06-17 06:29:16

kube-vip Kubernetes開源項目

2022-03-24 07:44:41

OPA安全策略Rego

2021-09-09 07:45:25

kube-vip Kuberneteshostname

2021-09-29 08:00:00

Kubernetes集群容器

2022-09-23 15:58:03

數(shù)據(jù)建模大數(shù)據(jù)

2023-11-29 09:29:48

Kuberneteskube

2021-08-17 07:15:15

ciliumKubernetes集群

2023-08-20 16:51:28

Kubernetes開源工具

2020-07-08 08:03:37

KubernetesLens集群

2023-03-30 09:17:42

KubesprayKubernetesLinux

2021-09-27 05:42:44

VeleroKubernetes 公有云

2013-08-01 00:00:00

華為遠程醫(yī)療華為

2012-10-18 19:25:21

佳能

2020-05-07 21:18:30

物聯(lián)網(wǎng)維護成本IOT

2021-07-01 11:29:45

KubernetesGrafana監(jiān)控

2010-07-29 17:01:14

2009-02-16 15:50:57

服務(wù)器 降低成本

2010-03-10 12:13:06

IT運維管理網(wǎng)絡(luò)拓撲摩卡軟件

2024-03-06 16:36:42

2020-04-10 10:43:51

Mobvista云計算成本云原生
點贊
收藏

51CTO技術(shù)棧公眾號