ref: https://medium.com/swlh/quick-fix-sharing-persistent-disks-on-multiple-nodes-in-kubernetes-ef5541fd8376
這篇文章是 kubernetes 與 Storage 整合的經驗分享文,該文章包括了下列內容
Cloud Storage, NFS, Kubernetes, PV/PVC.
Kubernetes 內針對這些儲存相關的使用方式有
1. 使用 ephemeral 的儲存設備
ephemeral 只適合暫存資料使用,因為該儲存設備不是持久保存的,這意味 Container 如果重啟,資料就會消失。
2. 使用 Bind Mount 的方式將資料從節點掛載到容器中
就如同過往使用 Docker 時會使用 -v 的方式將同節點中的儲存目錄給掛載到容器中來使用。
基本上有任何永久性儲存的需求都會採用(2) 這個方式來處理,而目前很多 Cloud Provider 都有提供相關的儲存裝置讓你的 VM(k8s Node)
可以輕鬆存取與使用。
舉例來說,AWS 有 EBS, GCP 有 GPD,這類型的 Block Storage Device 本身支援動態掛載與卸載,所以就算 Kubernetes 將目標 Container 重新部署到
不同節點上也不需要擔心資料會不同,因為這些 Storage 可以隨者不同節點動態掛載上去,讓你的 Container 看到相同的資料。
但是以上兩個裝置都有一個限制,就是並不支援同時多人寫入的動作,於 Kubernetes 只能使用 Read/Write 模式。
這意味每個 Storage 同時只能有一個 Container 去進行讀寫操作(but Azure 的服務就沒有這個限制)
作者假設今天有一個服務底層是由三個元件組成,這些元件會需要針對相同一個資料集一起處理。
舉例來說有服務 A,B,C
A: 將資料寫入到儲存系統中
B: 從儲存系統中讀入資料進行二次處理,處理完畢再寫回去儲存系統中
C: 將資料從儲存系統中讀出並且供外部使用
上述情境簡單說就是一個儲存設備,會有三個服務同時想要讀取,一個專心寫,一個同時讀寫,一個專心讀。
這種需求就沒有辦法單純使用 EBS/GPD等裝置來使用,因此作者接下來就會針對如何使用 NFS 這套網路儲存系統來搭建一個符合上述需求的用法。
該解決方案流程如下
1) 透過 EBS/GPD 的方式掛載一個儲存空間到 k8s 節點中
2) 部署一個 NFS Server 的容器到 Kubernetes 中,該 NFS Server 會使用 EBS/GPD 作為其儲存空間的來源
3) NFS Server 透過 service 分享服務
4) 部署 PV/PVC 物件到 Kubernetes 中
5) A,B,C 三種容器透過 PVC 的方式來存取 NFS Server
因為 NFS 本身就是一個可多重讀寫的解決方案,作者透過這種方式讓多個應用程式可以同時讀寫,同時將這些資料保存到 EBS/GPD 的儲存空間中。
不過這種用法帶來的問題可能就是速度問題,從同節點直接存取變成透過網路存取,所以如果本身對於存取有非常高的頻寬需求時,使用這種解決方案也許會遇到
很難解決的瓶頸,畢竟大部分人的 k8s 叢集都是 data/control 兩種資料交雜於底層的網路架構中,沒有辦法將 data plane/control plane 給分開來。
有興趣看作者如何一步一步搞定上述流程的可以參考全文
「vm in azure」的推薦目錄:
- 關於vm in azure 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於vm in azure 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於vm in azure 在 Microsoft Azure Facebook 的最佳解答
- 關於vm in azure 在 azure-docs/connect-logon.md at master - virtual-machines 的評價
- 關於vm in azure 在 Azure Virtual Machine Scale Sets - YouTube 的評價
- 關於vm in azure 在 How to list Virtual Machines Classic in Azure - Stack Overflow 的評價
vm in azure 在 矽谷牛的耕田筆記 Facebook 的最佳解答
作者今天想要針對自己的應用程式準備一個滿足下列的條件的運行環境
1. 該環境所需要的金錢成本盡可能地低
2. 能夠針對流量而自動地去 scale out/in 整個環境
3. API 後端應用程式是否能夠有 self healing 的能力
考量過後,作者考慮使用 Kubernetes 作為其運作平台,因此開始了成本探險之旅,想瞭解一個最便宜的 Kubernetes 服務可以多少錢。
為了滿足作者的應用程式,作者針對該 k8s 環境考慮了下列五個方向
1. K8s 的 Control Plane
2. 運作的 VM
3. Load Balancer
4. Disk 大小
5. Container Registry
作者針對三大公有雲,分別是 Azure/GCP/AWS 來進行分析,比較上述五大類型下分別的每個月成本多少
結果因為 Aks 的 Control Plane 目前不用錢,因此與其他兩家比起來價錢落差非常大。
考慮五個元件後, Azure/GCP/AWS 每個月最低價格為 $38.40 $102.75 $107.58
這也是為什麼作者的標題是用每天一美元的價格來運行一個 kubernetes cluster。
本文最有趣的應該是相同元件下,不同公有雲之間的比較與價目表,算是幫助大家去挖掘與比較,有興趣的可以參考原文
https://georgepaw.medium.com/how-to-run-the-cheapest-kubernetes-cluster-at-1-per-day-9287abb90cee
vm in azure 在 Microsoft Azure Facebook 的最佳解答
Fire up additional containers instead of bringing up VM-based nodes with Virtual Nodes, now supported in Azure Kubernetes Service: http://msft.social/62PmEl
vm in azure 在 azure-docs/connect-logon.md at master - virtual-machines 的推薦與評價
How to connect and sign on to an Azure virtual machine running Windows. Applies to: ✔️ Windows VMs ✔️ Flexible scale sets. You'll use the Connect button ... ... <看更多>