跳至主要内容

同步託管叢集

同步允許 Rancher 更新叢集值,使其與 AKS、EKS 或 GKE 中託管的相應叢集物件保持最新。這使得 Rancher 以外的來源能夠擁有託管叢集的狀態。

注意

如果同時處理來自另一個來源的更新,你可能會意外覆蓋來自一個來源的狀態。如果你在從另一個來源完成更新後的 5 分鐘內處理來自一個來源的更新,也可能發生這種情況。

運作方式​

要了解同步的運作方式,必須了解 Rancher Cluster 物件上的兩個欄位:

  1. 位於 Cluster 的 Spec 上的叢集配置物件:

    • 對於 AKS,該欄位稱為 AKSConfig
    • 對於 EKS,該欄位稱為 EKSConfig
    • 對於 GKE,該欄位稱為 GKEConfig
  2. UpstreamSpec 物件

    • 對於 AKS,這位於 Cluster 的 Status 上的 AKSStatus 欄位。
    • 對於 EKS,這位於 Cluster 的 Status 上的 EKSStatus 欄位。
    • 對於 GKE,這位於 Cluster 的 Status 上的 GKEStatus 欄位。

定義這些物件的結構類型可以在其相應的操作器專案中找到:

除以下欄位外,所有欄位都可為空:叢集名稱、位置(區域或可用性區域)、Imported 和雲端憑證參考。

AKSConfig、EKSConfig 或 GKEConfig 表示所需狀態。空值會被忽略。配置物件中非空的欄位可以被認為是受管理的。在 Rancher 中建立叢集時,所有欄位都是非空的,因此都是受管理的。當在 Rancher 中註冊現有叢集時,所有可為空的欄位都設定為空且不受管理。這些欄位在 Rancher 更改其值後才會變為受管理。

UpstreamSpec 表示託管 Kubernetes 提供者中的叢集狀態。它每 5 分鐘重新整理一次。重新整理 UpstreamSpec 後,Rancher 會檢查叢集是否正在更新。如果目前正在更新,則不會執行進一步操作。如果目前未在更新,則 AKSConfig、EKSConfig 或 GKEConfig 上的任何受管理欄位都會被最近更新的 UpstreamSpec 中的相應值覆蓋。

注意

當你從雲端提供者將叢集匯入 Rancher 時,UpstreamSpec 表示叢集狀態,而 Config 為空。如果你隨後透過 Rancher UI 更新匯入的叢集,UpstreamSpec 和 Config 都會變為非空。對叢集的任何進一步更新都應透過 Rancher 應用。這是因為沒有安全的方法來確定來自 UpstreamSpec 的更改是表示所需狀態還是只是與 Config 不匹配。如果你在透過 Rancher UI 應用任何更新後透過雲端提供者控制台更新匯入的叢集,控制器將部署回滾,並且 Config 的內容將被視為所需狀態。

有效的所需狀態可以被認為是 UpstreamSpec,加上 AKSConfig、EKSConfig 或 GKEConfig 中的所有非空欄位。這就是在 UI 中顯示的內容。

如果 Rancher 和另一個來源嘗試同時更新叢集,或在更新完成後的 5 分鐘內更新,任何受管理的欄位都可能陷入競態條件。以 EKS 為例,叢集可能將 PrivateAccess 作為受管理欄位。如果 PrivateAccess 為 false,然後在 11:01 在 EKS 控制台中啟用,並且在 11:05 之前從 Rancher 更新標籤,則該值很可能會被覆蓋。如果在叢集仍在處理更新時更新標籤,也可能發生這種情況。如果叢集已註冊且 PrivateAccess 欄位為空,則此範例中描述的問題不應發生。