使用開源工具監(jiān)控 Kubernetes 云成本
Kubernetes 是一個(gè)強(qiáng)大的平臺,用于管理云中的動態(tài)容器化應(yīng)用,但可能很難理解成本發(fā)生在哪里。管理 Kubernetes 資源的成本效率可能是一個(gè)挑戰(zhàn)。這就是 OpenCost 的用武之地。OpenCost 是一種云成本監(jiān)控工具,與 Kubernetes 無縫集成,讓你可以實(shí)時(shí)跟蹤云支出,以便相應(yīng)地優(yōu)化資源。
OpenCost 是一個(gè)開源 CNCF 沙盒項(xiàng)目 和 規(guī)范,用于實(shí)時(shí)監(jiān)控與 Kubernetes 部署相關(guān)的云成本。該規(guī)范按服務(wù)、部署、命名空間、標(biāo)簽等對當(dāng)前和歷史 Kubernetes 云支出和資源分配進(jìn)行建模。這些數(shù)據(jù)對于理解和優(yōu)化 Kubernetes 從應(yīng)用到基礎(chǔ)設(shè)施的成本和性能至關(guān)重要。
要求和安裝
開始使用 OpenCost 是一個(gè)相對簡單的過程。OpenCost 使用 Prometheus 進(jìn)行監(jiān)控和指標(biāo)存儲。你可以從 Prometheus 社區(qū)的 Kubernetes Helm Chart 安裝它。
安裝 Prometheus
首先使用以下命令安裝 Prometheus:
$ helm install my-prometheus --repo https://prometheus-community.github.io/helm-charts prometheus \
--namespace prometheus --create-namespace \
--set pushgateway.enabled=false --set alertmanager.enabled=false -f \
https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/prometheus/extraScrapeConfigs.yaml
安裝 OpenCost
接下來,使用 kubectl
命令安裝 OpenCost:
$ kubectl apply --namespace opencost -f \
https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/opencost.yaml
此命令將 OpenCost 部署到你的集群并開始收集數(shù)據(jù)。這就是大多數(shù)安裝所需的全部內(nèi)容。你可以使用你自己的 Prometheus 安裝或使用 OpenCost Helm Chart 自定義部署。
測試和訪問
OpenCost 會自動檢測它是否在 AWS、Azure 還是 GCP 上運(yùn)行,你可以將其配置為為本地 Kubernetes 部署提供定價(jià)。首先轉(zhuǎn)發(fā) API 和 UI 訪問的端口:
$ kubectl port-forward --namespace opencost service/opencost 9003 9090
大約五分鐘內(nèi),你可以驗(yàn)證 UI 和服務(wù)器是否正在運(yùn)行,并且你可以通過 http://localhost:9090
監(jiān)控成本
你已準(zhǔn)備好開始使用部署到 Kubernetes 集群的 OpenCost 來監(jiān)控云成本。OpenCost 儀表板提供對云支出的實(shí)時(shí)可見性,使你能夠識別成本異常并優(yōu)化云資源。你可以按節(jié)點(diǎn)、命名空間、pod、標(biāo)簽等查看云支出。
OpenCost monitoring console
kubectl cost 插件提供了對 Kubernetes 成本分配指標(biāo)的簡單 CLI 查詢。它允許開發(fā)人員、運(yùn)營商和其他人快速確定任何 Kubernetes 工作負(fù)載的成本和效率。
$ kubectl cost --service-port 9003 \
--service-name opencost --kubecost-namespace opencost \
--allocation-path /allocation/compute pod \
--window 5m --show-efficiency=true
+-------+---------+-------------+----------+---------------+
|CLUSTER|NAMESPACE|POD |MONTH RATE|COST EFFICIENCY|
+-------+---------+-------------+----------+---------------+
|cl-one |kube-syst|coredns-db...| 1.486732 | 0.033660 |
| | |coredns-...dm| 1.486732 | 0.032272 |
| | |kube-prox...7| 1.359577 | 0.002200 |
| | |kube-prox...x| 1.359577 | 0.002470 |
| |opencost |opencost...5t| 0.459713 | 0.187180 |
| |kube-syst|aws-node-cbwl| 0.342340 | 0.134960 |
| | |aws-node-gbfh| 0.342340 | 0.133760 |
| |prometheu|my-prome...pv| 0.000000 | 0.000000 |
| | |my-prome...hn| 0.000000 | 0.000000 |
| | |my-prome...89| 0.000000 | 0.000000 |
+-------+---------+-------------+----------+---------------+
| SUMMED| | | 6.837011 | |
+-------+---------+-------------+----------+---------------+
你還可以集成 API,以編程方式將數(shù)據(jù)提取到你選擇的平臺中。
Kubernetes 優(yōu)化策略
現(xiàn)在你已經(jīng)掌握了云成本,是時(shí)候優(yōu)化你的 Kubernetes 環(huán)境了。優(yōu)化是一個(gè)迭代過程。從棧的頂部(容器)開始并遍歷每一層。每一步的效率都會復(fù)合。有很多方法可以優(yōu)化 Kubernetes 以提高成本效率,例如:
- 查找廢棄的工作負(fù)載和未申明的卷:不再使用或斷開連接的容器莢和存儲會繼續(xù)消耗資源而不提供價(jià)值。
- 調(diào)整你的工作負(fù)載大?。捍_保你為你的工作負(fù)載使用正確大小的容器。調(diào)查分配過多和分配不足的容器。
- 自動擴(kuò)展:自動擴(kuò)展可以幫助你僅在需要時(shí)使用資源來節(jié)省成本。
- 調(diào)整集群大?。汗?jié)點(diǎn)過多或過大可能會導(dǎo)致效率低下。在容量、可用性和性能之間找到適當(dāng)?shù)钠胶饪赡軙蟠蠼档统杀尽?/li>
- 研究更便宜的節(jié)點(diǎn)類型:CPU、RAM、網(wǎng)絡(luò)和存儲有很多變化。切換到 ARM 架構(gòu)可能會帶來更大的節(jié)省。
- 投資 FinOps 團(tuán)隊(duì):組織內(nèi)的專門團(tuán)隊(duì)可以通過協(xié)調(diào)預(yù)留實(shí)例、現(xiàn)貨實(shí)例和節(jié)省計(jì)劃來尋找實(shí)現(xiàn)更大節(jié)省的方法。
從今天開始
監(jiān)控 Kubernetes 環(huán)境中的成本可能具有挑戰(zhàn)性,但使用 OpenCost 則不必如此。要開始使用 OpenCost 并控制你的云支出,請?jiān)L問 OpenCost 網(wǎng)站,在 GitHub 中獲取代碼,查看 OpenCost 文檔,并參與 CNCF Slack 中的 #opencost 頻道。