日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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

介紹

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

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

kube-downscaler的特點

Kube-downscaler 是一款基于調度的強大工具,用于在 Kubernetes 集群中對應用程序進行升級或降級。在本節中,我們將探討該工具的一些關鍵功能:

與Kubernetes功能或工具的兼容性

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

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

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

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

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

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

但是 Kube-downscaler 主要用于縮小副本并優化集群的成本,我們通常使用 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 文件以根據您的具體需求自定義配置。例如,可以調整時區、計劃和縮放規則。

將配置應用到您的 Kubernetes 集群:

kubectl Apply -f deploy/

此命令將部署 kube-downscaler 控制器并創建 kube-downscaler 部署。

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

kubectl logs -f deployment/kube-downscaler

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

根據具體用戶需求配置kube-downscaler

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

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

minReplicas 注釋可用于設置部署的最小副本數。 

這些字段與 kube-downscaler 注釋結合使用,允許您根據特定的業務需求和資源利用模式創建自定義的擴展計劃。 

通過調整這些字段,可以配置 kube-downscaler 以優化應用程序可用性和成本效率的方式擴展部署。

以下是使用 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 點(在歐洲/柏林時間線上),副本數量將減少到 1 個。 

kube-downscaler 將根據定義的計劃自動開始縮減 pod。 

目前我們已經在 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 參數。
  • --downscale-period 或 --default-downtime CLI 參數。
  • UPSCALE_PERIOD 或 DEFAULT_UPTIME 環境變量。
  • DOWNSCALE_PERIOD 或 DEFAULT_DOWNTIME 環境變量。
  • 工作負載的命名空間不是排除列表的一部分:
  • 如果提供排除列表,它將用于代替默認值(僅包括kube-system )。
  • 工作負載的標簽與標簽列表不匹配。
  • 工作負載的名稱不是排除列表的一部分。
  • 工作負載未標記為排除(注釋 downscaler/exclude: "true" 或 downscaler/exclude-until: "2024-04-05")。
  • 沒有活動 Pod 強制整個集群進入正常運行時間(注釋 downscaler/force-uptime: "true" )。

Minimum replicas最小副本數

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

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

Specific workload特定工作負載

在正常的情況下 HorizontalPodAutoscalers ,該字段不能設置為零, 因此downscaler/downtime-replicas 至少 1 應設置為 。 關于 CronJobs ,它們的狀態將按照我們的預期進行定義 suspend: true 。

注意點

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

  • 如果當前時間不在 ,它不會立即縮小 Mon-Fri 9-17 (Buenos Aires timezone) ,而是在 15 分鐘后縮小。downscaler最終會記錄如下內容:
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 個副本,則應在 上 Deployment 應用注釋。這是一種特殊情況,因為 minReplicas 不允許在 HPA 上為 0。將部署副本設置為 0 實質上會禁用 HPA。在這種情況下,HPA 將發出事件,例如 failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API 沒有 Pod 可以從中檢索指標。
  • 如果需要縮小大于 0,則應在 HPA 上應用注釋。這允許在停機期間根據外部流量動態擴展 Pod,并在停機期間保持較低的 minReplicas 流量,如果沒有低流量。如果對部署而不是 HPA 進行批注,則會導致爭用條件,即縮減部署, 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通過命令行參數、環境變量或 Kubernetes 注釋進行配置。

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

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

僅在周末和周五 20:00 后縮小:

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

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

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

基于periods的替代邏輯

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

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

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

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

命令行選項

可用的命令行選項:

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

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

使用案例

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

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

降低成本

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

服務中斷預防

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

建議

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

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

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

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

結論

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

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

分享到:
標簽:Kubernetes
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定