簡體   English   中英

Azure AKS - 如何為在不同可用性區域的節點上運行的 pod 在公共磁盤上安裝卷?

[英]Azure AKS - how to mount a volume on a common disk for pods running on nodes from different availability zones?

我在不同可用性區域(用於 HA)的 3 個節點上運行 AKS 集群。 它上面運行着一個 API,每個集群上都有 pod。

計划是將 FileBeat 添加為一個 DaemonSet(每個節點上一個 pod),Logstash 從每個 FileBeat 實例收集日志。 我選擇了 DaemonSet 而不是 SidecarProxy 模式以在節點上消耗更少的資源。

為了使 FileBeat 能夠從 API pod 讀取日志,我想在托管的 azure 磁盤上安裝一個卷,API 可以在該磁盤上寫入日志文件,FileBeat 可以從中讀取日志文件。

Azure 磁盤當然只駐留在一個區域中。 所以問題是如果節點不在與磁盤相同的 AZ 中,則無法附加卷:

AttachVolume.Attach failed for volume "logging-persistent-volume" : Retriable: false, RetryAfter: 0s, HTTPStatusCode: 400, RawError: Retriable: false, RetryAfter: 0s, HTTPStatusCode: 400, RawError: { "error": { "code": "BadRequest", "message": "Disk /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<resource group>/providers/Microsoft.Compute/disks/<disk name> cannot be attached to the VM because it is not in zone '3'." } }

我是 Kube.netes 和 Azure 的新手。那么,在這種環境中,有沒有辦法讓所有 API pod 共享一個卷?

任何幫助表示贊賞! 謝謝!

回答你的問題

您可以在其間添加一個存儲解決方案來管理 Azure 磁盤,然后使用該存儲解決方案創建您的卷。 一個例子是Ceph ,您可以使用rook operator來設置它。

解決您的問題

如果您讓 API 記錄到標准輸出,kube.netes 會將這些日志文件寫入磁盤的特定位置。 然后 Filebeat 可以從每個節點上的這個位置讀取並將您的日志發送到您想要的任何位置。 這是用於在 kube.netes 環境中記錄日志的標准做法,除非您有特定需要將這些日志寫入卷,否則我不建議這樣做。

根據filebeat 文檔

您將 Filebeat 部署為 DaemonSet,以確保集群的每個節點上都有一個正在運行的實例。

Docker 日志主機文件夾 (/var/lib/docker/containers) 安裝在 Filebeat 容器上。 Filebeat 開始輸入文件,並在文件出現在文件夾中后立即開始收集它們。

無法(至少我知道)將一個 AZ 中的磁盤掛載到另一個 AZ 中的 VM,這也是錯誤消息所指示的。

此外, Azure 磁盤被掛載為ReadWriteOnce它一次只能用於一個 pod

由於 Azure 磁盤被掛載為 ReadWriteOnce,因此它們僅可用於單個 pod。 對於可以同時被多個 pod 訪問的存儲卷,使用 Azure 文件。

為了讓多個 pod 跨多個區域共享同一個卷,您需要 select 另一個存儲提供商。

Azure 文件是一個選項,如果它滿足您的性能要求等。請參閱Azure Kube.netes 服務 (AKS) 中應用程序的存儲選項中的更多信息

另一種方法

由於您采用的是 deamonset 方法,其中 Filebeat 在每個節點上運行一次,因此您可以將主機文件夾/var/lib/docker/containers掛載到文件 beat 容器中並從那里轉發日志。

不過,這需要您的應用程序記錄到STDOUTSTDERR ,因為這些日志最終位於/var/lib/docker/containers下。 它也是您在運行kubectl logsdocker logs時看到的那些日志。 如果您的應用程序當前登錄到文件系統,您將必須重新配置它們以登錄到STDOUT / STDERR ,或者將日志文件符號鏈接到/dev/stdout (或/proc/1/fd ,請參見此示例: https:/ /stackoverflow.com/a/61147411/7146596

這樣每個 filebeat pod 都負責從它運行的節點轉發日志。

Kube.netes 上運行 filebeat 指南中描述了這種方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM